Holzchopf.MaxGuiLayout

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Holzchopf

Meisterpacker

Betreff: Holzchopf.MaxGuiLayout

BeitragSo, Jun 12, 2011 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch schon mal über die Layout-Gestaltung von MaxGui geärgert? (Das ist eine rhetorische Frage, ich will den Thread jetzt nicht mit "Ja!" überfüllt haben Wink )

Ich hab' mir da eine kleine Abhilfe geschrieben und denke, ich könnte die mit euch teilen:

Holzchopf.MaxGuiLayout
(in den mod-Ordner eurer BMax-Installation entpacken, builden und geniessen)

Was das Modul erlaubt?
Ganz einfach: Man hat dann einen simplen Layout-Manager, mit dem man Bereiche aufteilen und erweitern kann - um die Positionierung selber muss man sich nicht mehr gross kümmern, diese wird aus Höhen- und Breitenangaben automatisch berechnet.

Ein kleines Beispiel in BlitzMax: [AUSKLAPPEN]
SuperStrict

Framework MaxGUI.Drivers
Import BRL.EventQueue
Import Holzchopf.MaxGuiLayout

' Layout fürs Fenster, da es am oberen linken Fensterrand beginnen soll, wird es an (0,0) erstellt
Local lmWindow:TMaxGuiLayout = TMaxGuiLayout.Create(0,0,200,0)
' Und da machen wir auch gleich ein Fenster draus
lmWindow.Window("Beispiel 1", 0,0,Null, WINDOW_TITLEBAR | WINDOW_CENTER | WINDOW_RESIZABLE)
' Dem Fenster-Layout wird eine Zeile angefügt
lmWindow.AddBottom(0)
lmWindow.sub[0,0].Panel("Title",, PANEL_GROUP) ' mit einem panel
lmWindow.sub[0,0].SetMargin(2,2)
lmWindow.sub[0,0].Inner(0,20).TextField() ' und einem text field drin
lmWindow.sub[0,0].FitToContents() ' die Zeile wird dem text field angepasst
' In eine neue Zeile...
lmWindow.AddBottom(0)
lmWindow.sub[0,1].Panel("Description",, PANEL_GROUP) ' ... kommt ein panel
lmWindow.sub[0,1].SetMargin(2,2)
lmWindow.sub[0,1].Inner(0,80).TextArea() ' mit einer text area
lmWindow.sub[0,1].FitToContents() ' und wird wieder an den inhalt angepasst
' Die unterste Zeile...
lmWindow.AddBottom(0)
lmWindow.sub[0,2].Split([80,0,80],[25],True) ' ... wird nochmal aufgespaltet
lmWindow.sub[0,2].sub[0,0].Button("OK",, BUTTON_OK) ' kriegt einen OK-
lmWindow.sub[0,2].sub[2,0].Button("Cancel",, BUTTON_CANCEL) ' und Cancel-button
lmWindow.sub[0,2].FitToContents()
' Das Fenster wird an die Grösse der Inhalte angepasst
lmWindow.FitToContents()
' Das Layout wird fixiert. Die 1 im zweiten Parameter bedeutet: Die Zeile mit index 1 wird beim
' Vergrössern des Fensters skaliert
lmWindow.LockLayout(0,1)
' Die unterste Zeile wird so fixiert, dass das mittlere, leere Feld skaliert wird
lmWindow.sub[0,2].LockLayout(1,0)

' Hauptschleife
Repeat
WaitEvent()
Print CurrentEvent.ToString()
' Typisches Gedöhns
Select EventID()
Case EVENT_WINDOWCLOSE
End
End Select
Forever


Ich hoffe, der ein oder andere von euch kann das auch gebrauchen.

Viel Vergnügen und freundliche Grüsse
Holzchopf

Update, 18.06.2011
Gab ein kleines Problem: Weil Split automatisch ein Panel erstellte (um Layout zu halten), funktionierten RadioButtons in sub-subs nicht mehr richtig. Wurde nun behoben.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group