LayoutManager()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

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

LayoutManager()

Beitrag von Jan » Sa, 06. Jun 2015 21:41

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: 1811
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: LayoutManager()

Beitrag von Werner_Bayern » Sa, 06. Jun 2015 22:04

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 light!>

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan » Sa, 06. Jun 2015 22:06

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: 1811
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: LayoutManager()

Beitrag von Werner_Bayern » So, 07. Jun 2015 13:43

Servus Jan,

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

Werner

<when the music is over, turn off the light!>

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan » Sa, 28. Nov 2015 10:10

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Sa, 28. Nov 2015 11:12

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: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan » Sa, 28. Nov 2015 11:14

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Sa, 28. Nov 2015 11:46

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Sa, 28. Nov 2015 12:17

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) 4386 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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Sa, 28. Nov 2015 20:05

... und alles klar ? sonst hätte ich noch einen Lösungsvorschlag.
gruss by OHR
Jimmy

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2661
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 11 Mal

Re: LayoutManager()

Beitrag von georg » Di, 05. Apr 2016 15:34

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Di, 05. Apr 2016 20:01

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
Foren-Administrator
Foren-Administrator
Beiträge: 2661
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 11 Mal

Re: LayoutManager()

Beitrag von georg » Mi, 06. Apr 2016 9:22

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15215
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 6 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von brandelh » Mi, 06. Apr 2016 9:57

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Mi, 06. Apr 2016 10:34

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
Foren-Administrator
Foren-Administrator
Beiträge: 2661
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 11 Mal

Re: LayoutManager()

Beitrag von georg » Mi, 06. Apr 2016 11:11

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan » Mi, 06. Apr 2016 11:11

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Mi, 06. Apr 2016 11:29

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
Foren-Administrator
Foren-Administrator
Beiträge: 2661
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 11 Mal

Re: LayoutManager()

Beitrag von georg » Do, 07. Apr 2016 14:37

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: LayoutManager()

Beitrag von Manfred » Fr, 11. Sep 2020 10:20

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Tom » Fr, 11. Sep 2020 12:35

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: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: LayoutManager()

Beitrag von Manfred » Fr, 11. Sep 2020 12:41

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: LayoutManager()

Beitrag von AUGE_OHR » Sa, 12. Sep 2020 2:12

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: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: LayoutManager()

Beitrag von Jan » Sa, 12. Sep 2020 8:02

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