LayoutManager()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

LayoutManager()

Beitrag von Jan »

Hat jemand da schon mal mit gearbeitet? Ich bau das gerade bei mir ein, und das klappt hervorragend. Bis auf die relativen Angaben, also z. B. XBPLAYOUT_RELWIDTH oder XBPLAYOUT_RELRIGHT. Die reagieren überhaupt garnicht. Oder muß ich dabei irgendwas besonderes beachten?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: LayoutManager()

Beitrag von Werner_Bayern »

Yep. Bei mir klappt XBPLAYOUT_RELWIDTH so:

Code: Alles auswählen

nLayout := XBPLAYOUT_TOP + XBPLAYOUT_BOTTOM
.
.
.
nLayout += XBPLAYOUT_RELWIDTH + XBPLAYOUT_LEFT
oder auch

Code: Alles auswählen

nLayout += XBPLAYOUT_RELWIDTH + XBPLAYOUT_CENTERX
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan »

Hallo Werner,

ich hab z. B.

Code: Alles auswählen

XBPLAYOUT_RELRIGHT + XBPLAYOUT_TOP + XBPLAYOUT_BOTTOM + XBPLAYOUT_LEFT
Und das wird alles sauber umgesetzt - bis auf XBPLAYOUT_RELRIGHT. Das wird einfach ignoriert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: LayoutManager()

Beitrag von Werner_Bayern »

Servus Jan,

XBPLAYOUT_RELRIGHT hab ich bisher noch nicht im Gebrauch, sorry.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan »

Ich muß da noch einmal drauf zurück kommen. Ich kämpfe gerade mit folgendem Problem:

Ich habe einen Dialog, auf dem zwei Spalten mit Groupboxen sind. Rechts am Rand ist eine Spalte mit XbpPushbutton(). Die Buttons sind 100 Pixel breit. Die Groupboxen werden in der Breite (oParent:currentSize()[1] -130) / 2 gerechnet. Also Gesamtbreite abzüglich Platz für die Buttons, und davon die Hälfte.

Ich bekomme das mit den Layout-Angaben ganz sauber hin, die Position von links oder rechts festzulegen, das wird beim Resizing auch so umgesetzt. Aber die Breite der Groupboxen ändert sich nicht mit. Ich hab das mit relright oder relwidth versucht, aber ob ich das reinschreibe oder in China ein Spaten umfällt ...

Hat jemand von Euch eine Idee?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

Jan hat geschrieben:Rechts am Rand ist eine Spalte mit XbpPushbutton(). Die Buttons sind 100 Pixel breit.
Frage : soll die rechte Group/Buttons weiterhin nur 100 Pixel breit sein ?
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan »

Jimmy,

es soll dabei bleiben, das die Groupboxen (oParent - 130) / 2 breit sind. Natürlich immer in Abhängigkeit der Breite von oParent ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

Jan hat geschrieben:es soll dabei bleiben, das die Groupboxen (oParent - 130) / 2 breit sind. Natürlich immer in Abhängigkeit der Breite von oParent ...
also soll das Layout wie mit einem Faktor arbeiten ?!

Code: Alles auswählen

XBP_LEFTEDGE+XBP_TOPEDGE+XBP_RELWIDTH+XBP_RELHEIGHT+XBP_RELXPOS+XBP_RELYPOS
sollte es doch bringen, oder ?
p.s. ein Snapshot wäre gut ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

habs mal ausprobiert : wenn nicht alle XbParts in der horizontalen Ebene XBP_RELWIDTH haben dann entsteht vermutlich das Problem
XBP_RELWIDTH.jpg
XBP_RELWIDTH.jpg (28.41 KiB) 13277 mal betrachtet
wo der rote Strich ist "fehlt" was in der Breite ... weil die rechte Gruppe auf 130 Pixel festgenagelt und kein XBP_RELWIDTH verwendet wurde ... aber woher soll der dann seine% Rechnung machen da er vom ursprünglichem Verhältnis / Positionen ausgeht ?

p.s. Typischer Fall für XbpSplitbar() die ja "unsichtbar" sein kann
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

... und alles klar ? sonst hätte ich noch einen Lösungsvorschlag.
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: LayoutManager()

Beitrag von georg »

Hallo,


ich wärme das Thema mal auf. Nach dem Forentreffen in Leverkusen weiss ich, dass der LayoutManager schon in der 1.90.355 vorhanden ist, leider sind aber nur ein paar der Konstanten definiert, die XBPLAYOUT_RELRIGHT und Co. jedoch nicht.

Da ich aktuell die 2.0 nicht installiert habe, fehlt mir der Zugriff auf die Definitionen - könnte die einer von Euch posten? Danke im voraus.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

georg hat geschrieben:Da ich aktuell die 2.0 nicht installiert habe, fehlt mir der Zugriff auf die Definitionen - könnte die einer von Euch posten? Danke im voraus.
es müsste doch in einer Include Datei stehen ...

Code: Alles auswählen

#IF XPPVER > 1900331 .AND. XPPVER < 2000000
   // Xbase++ 1.9 compatibility
   #pragma library( "xppui3.lib" )

   #ifndef XBP_RELXPOS
   #define XBP_RELXPOS                    0x10
   #define XBP_RELYPOS                    0x20
   #define XBP_RELWIDTH                   0x40
   #define XBP_RELHEIGHT                  0x80
   #define XBP_XCENTER                    0x1000
   #define XBP_YCENTER                    0x2000
   #endif
#endif
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: LayoutManager()

Beitrag von georg »

Danke, Jimmy -


ein Durchsuchen aller alaska-seitigen .CH-Dateien ergab leider keinen Treffer, daher habe ich nachgefragt.

Ich bin jetzt ein wenig weiter, aber auch ein wenig mehr frustriert - ich versuche gerade, das PreView-Beispiel aus den Alaska-Quellen mit dem LayoutManager zu versehen, aber das klappt nicht richtig.

Für das Fenster sowie rechts platzierten Buttons funktioniert es wie erwartet, jedoch das XbpPreview()-Objekt "verschwindet", wenn man die einzelnen Elemente mit der :layoutAlign iVar versieht. Ich denke, das Problem liegt in den fest definierten Grössen in der Methode :setSize(), aber da muss ich noch mal wühlen. Aber wenn jemand von Euch das schon durch hat, würde ich gerne von fremden Erfahrungen profitieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von brandelh »

Ich hatte ein Element unten und dachte, reicht wenn ich dem sage er solle oben unten und rechts anpassen ...
aber er "unterwanderte" dann die Elemente darüber ...

Ein solches ich passe mich überall an braucht eines darüber mit Ich passe mich nur seitwärts an als Obergrenze ...
ob auch ein NONE Eintrag geht weiß ich nicht, aber KEIN Eintrag ging nicht.

PS: die Schlüsselworte hab ich noch nicht im Kopf, daher die verbale Beschreibung ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

georg hat geschrieben:Für das Fenster sowie rechts platzierten Buttons funktioniert es wie erwartet, jedoch das XbpPreview()-Objekt "verschwindet", wenn man die einzelnen Elemente mit der :layoutAlign iVar versieht. Ich denke, das Problem liegt in den fest definierten Grössen in der Methode :setSize(), aber da muss ich noch mal wühlen.
Nope ... die Preview enthält ein "Top-Window" und da wirkt der Layoutmanager nicht sondern nur auf die Childs.
aber die Lösung ist "einfach"

Code: Alles auswählen

// damit man maximieren kann
   oDlg:maxButton := .T.
// einfügen in Main
   oDlg:drawingArea:resize := {| aOldSize, aNewSize, oSelf | MainResize(aOldSize, aNewSize, oSelf) }
...

PROCEDURE MainResize(aOldSize, aNewSize, oSelf)
LOCAL aChild
LOCAL i,iMax

   IF aOldSize[1] == 0 .AND. aOldSize[2] == 0               // was minimize
      aOldSize := aNewSize                                  // New Size
   ELSEIF aNewSize[1] == 0 .OR. aNewSize[2] == 0            // is now minimized
      RETURN
   ELSEIF aNewSize[1] == aOldSize[1] .AND. aNewSize[2] == aOldSize[2]
      RETURN
   ENDIF                                                    // same Size

   oSelf:lockUpdate(.T.)

   aChild := oSelf:Childlist()
   iMax  := LEN(aChild)
   FOR i := 1 TO iMax
      IF aChild[i]:isDerivedFrom( "XbpPreview" )
         // Werte sind pi * daumen ... 
         aChild[i]:setsize({(aNewSize[1]/4*3)-20,aNewSize[2]-30})
         // das erledigt den Rest
         aChild[i]:Zoom()
*     ELSEIF aChild[i]:isDerivedFrom( "XbpPushbutton" )
      ENDIF
   NEXT

   oSelf:lockUpdate(.F.)
   oSelf:invalidateRect()
RETURN
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: LayoutManager()

Beitrag von georg »

Danke, Jimmy - dafür hast Du (mal wieder) ein Bier (oder vergleichbares) gut.

Es verbleibt ein Problem:

Code: Alles auswählen

	oView:layoutAlign := XBP_LEFTEDGE + XBP_TOPEDGE + XBP_RELWIDTH + XBP_RELHEIGHT + XBP_RELXPOS + XBP_RELYPOS
Damit sollte das View-Fenster sich an der relativen Höhe und Breite orientieren - was eingeschränkt funktioniert, da die Breite sich zwar ändert, die Höhe aber nicht.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan »

Georg,

ich habe die Erfahrung machen müssen, das einzelne Elemente, die ich mit dem Layout-Manager verwalte, in Dialogen verschwinden, wenn ich z. B. auf ein anderes Prorgamm gewechselt bin und dann auf den Dialog gehe. Ich hatte das Alaska schon gemeldet, da sind wir aber noch nicht weiter.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

georg hat geschrieben:Es verbleibt ein Problem:

Code: Alles auswählen

	oView:layoutAlign := XBP_LEFTEDGE + XBP_TOPEDGE + XBP_RELWIDTH + XBP_RELHEIGHT + XBP_RELXPOS + XBP_RELYPOS
das ist doch jetzt "doppelt gemoppelt" weil du ein o:resize auf das "Top-Fenster" setzt.

das Preview Demo hat ja nur noch 4 Buttons ... da benötigt man doch keinen Layoutmanager ;)
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: LayoutManager()

Beitrag von georg »

Hallo, Jimmy -


der Gedanke ist ein anderer: wenn der Anwender das Fenster vergrössern will (als Brillenträger denkt man da zuerst dran), um etwas besser erkennen zu können, sollte sich eben auch das XbpPreview-Fenster entsprechend vergrössern. Dass dann die Buttons auch eine neue, relative Position brauchen, ist klar, aber Schwerpunkt war das XbpPreview-Fenster.

Eine interessante Anekdote am Rande: ich habe mir vor Jahren das Beispiel angesehen und mit einer anderen Datenbasis versehen - und dann war die Anzeige leer. Weil Alaska das Beispiel so einfach aufgebaut hatte, dass es eben nur mit der im aktuellen Select()-Bereich geöffneten Datei arbeitet. Keine Datei offen, keine Anzeige. Aber das ist mir erst bei einem erneuten Versuch dieses Jahr aufgefallen.

So nett die Beispiele sind, ein wenig allgemeiner dürften sie schon sein, denn ich will ja nicht nur einfache Listen drucken, sondern auch mal andere Dinge wie Rechnungen oder so etwas.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: LayoutManager()

Beitrag von Manfred »

Sorry,
aber ich komme mit dem Teil nicht klar. Das Ergebnis ist bei mir grottenschlecht. Was mache ich falsch?
Kann mir mal jemand eine kleine ANleitung geben, wie man vorgehen muß um ein brauchbares Ergebnis zu bekommen?
Ich habe verschiedene :layoutalign kombiniert und erhalte im schlechtesten Ergebnis, das ich auf einmal den Dialog nicht mehr geschlossen bekomme (XBPLAYOUT_RELWIDTH + XBPLAYOUT_RELHEIGHT). Das Resizing klappt auch nicht richtig usw.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Tom »

Aber Du hast doch mit dem Resizing- und Scaling-Zeug aus eXpress++ eigentlich alles, was Du brauchst.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: LayoutManager()

Beitrag von Manfred »

Ja, das stimmt. Ich habe aber vor langer Zeit angefangen ein paar Dinge in xbase pur zu erstellen um zu sehen und zu lernen, wie das gemacht werden muß. Das gehört auch dazu. Wenn ich das jetzt mit den dynamischen Parts alles in express++ neu machen wollte, das wäre zu aufwändig.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR »

hi,

ein Problem, was auch den LayoutManager() betrifft, ist die "relative" Veränderung vom letzten Zustand zum "ist" Zustand.

Code: Alles auswählen

   o:resize := {| aOldSize, aNewSize, self | ... }
wenn man aOldSize für die "relative" Veränderung nimmt funktioniert es irgendwann nicht mehr :^o

ich nutze deshalb aOldSize NICHT sondern beziehe mich auf die Grösse des Original Layout
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan »

Manfred,

ab und an habe ich auch das Problem, das der einfach nicht das macht was ich will. Aber ansonsten klappt das immer einwandfrei.

Abstand zum Parent immer an allen viel Seiten gleich: :layoutAlign := XBPLAYOUT_LEFT + XBPLAYOUT_RIGHT + XBPLAYOUT_TOP + XBPLAYOUT_BOTTOM
Prozentuel gleicher Abstand: :layoutAlign := XBPLAYOUT_RELLEFT + XBPLAYOUT_RELTOP (soweit ich mich erinnere darf man da nicht alle vier Seiten eintragen, aber das ist zu lange her das ich das getestet hatte)

An den wenigen Stellen, wo ich das darüber nicht hinbekommen, habe mach ich das weiterhin per :resize. Ist zwar erheblich aufwändiger zu pflegen, aber klappt dann immer.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten