LayoutManager automatisch resizen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 27
Registriert: Fr, 03. Aug 2018 7:17

LayoutManager automatisch resizen

Beitrag von littlea1991 »

Guten Morgen liebe Forenmitglieder,

ich habe in mein derzeitiges Programm den LayoutManager eingebunden mit der Layoutalign Variable in jedem Xbase Part. Da ich nicht für jedes Untermenü einen neuen Xbpdialog kreieren möchte, tue ich bei jedem Funktionsaufruf die Aktuelle Oberfläche in einer deleteChild() Funktion löschen.

Code: Alles auswählen

FUNCTION deleteChild(aChildMenue)

local aChild:= {}, nCounter
aChild := aChildMenue
nCounter := len(aChild)

FOR i := 1 to nCounter
 oDlg:drawingArea:delChild(aChild[i])
NEXT i

und das neue Maske mit Xbase Parts in die Drawingarea einzeichnen. Allerdings gibt es das Problem das, wenn der Benutzer das Fenster zwischenzeitig Maximiert bzw einfach ändert, die neue Maske sich nicht dem geänderten Fenster automatisch anpasst. Sondern die Xbase Parts in der alten Position verharren.
Es fehlt also eine Möglichkeit den Xbase Parts sich automatisch der geänderten Fenstergröße anzupassen, sie reagieren erst auf das Layoutalign wenn man das Fenster zu alten größe Verschiebt (die oDlg:minSize:= {1024,768})
Ich habe jetzt mehrere Möglichkeiten ausprobiert um das Problem zu umgehen:
1. einen Layoutmanager anzulegen mit oDlg:LayoutManager:= LayoutManager:New() und oDlg:LayoutManager:addChild() die Xbase Parts hinzuzufügen und nach jedem deleteChild(aChildMenue) aufruf

Code: Alles auswählen

oDlg:LayoutManager:recompute() 
Allerdings bewirkt das recompute keine Änderung.
2. für jedes neue Maske im Programm eine neuen XbpDialog. Allerdings wird dann auch nicht die alte größe des Fensters übernommen.

wie habt ihr es mit Variablen Fenster und dem LayoutManager gelöst? Ich fände es sinnlos für jedes neue Untermenü im Programm ein neues Fenster kreieren zu müssen. Temporär habe ich ein oDlg:maxSize eingeführt damit das Fenster sich nicht weiter verschieben kann.
Eine Überlegung wäre alle Masken vorher zu Zeichnen und die Xbase Parts mit einem visible:= T. Sichtbar zu machen.

Vielen Dank im voraus für eure Antworten!

Ali
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 automatisch resizen

Beitrag von AUGE_OHR »

littlea1991 hat geschrieben: Do, 25. Okt 2018 7:42 Da ich nicht für jedes Untermenü einen neuen Xbpdialog kreieren möchte, tue ich bei jedem Funktionsaufruf die Aktuelle Oberfläche in einer deleteChild() Funktion löschen.
wenn deleteChild() nicht eine Method vom Layout Manager ist wie soll er darauf reagieren :?:

wenn du mit dem Layout Manager arbeiten willst und er dir nicht ausreicht dann mache deine Erweiterungen in einer

Code: Alles auswählen

CLASS xyz  FROM XbpDialog
und stelle sicher das alle XbParts über o:DrawingArea:Childlist() erreichbar sind.

---

zum Erstellen von Masken empfehle ich den Formdesigner XppFD.EXE um damit CLASS Code zu erzeugen.
Tip : zwischendurch das Formular unter neuen Namen abspeichern denn es gibt kein UnDo :!:
gruss by OHR
Jimmy
Antworten