- Offizieller Beitrag
Also das Layout mit VFL zu gestalten ist echt nicht mein Ding. Ich habe mir jetzt mal DSL näher angeschaut und muss sagen, dass dies (für mich) wesentlich verständlicher rüberkommt.
Hier mal ein kommentiertes Bsp. dazu:
EDIT: Ich hatte gerade einen Beitrag im nim Forum gelesen, mit der Empfehlung nur in Prozeduren zu arbeiten. Für ein einzelnes Skript sicher nicht mit allzu großer Relevanz, aber es geht hierbei um die Reduzierung Globaler Variablen (im Hauptprogramm sind Variablen außerhalb von Prozeduren Global) und somit der Entlastung des GC.
Deshalb habe ich das Programm jetzt in die Prozedur main verlagert. (Prozeduren können, wie zu sehen, in Prozeduren erstellt werden)
Code
import wnim/[wApp, wFrame, wPanel, wButton]
proc main() =
let app = App()
let frame = Frame(title="Test DSL")
let panel = Panel(frame)
# alle Button gleiche Höhe, gesamte Fensterhöhe ausnutzen (abzgl. Rand: 10)
# Zeile 1 - gesamte Breite ausfüllen
let button1 = Button(panel, label="1")
let button2 = Button(panel, label="2")
let button3 = Button(panel, label="3")
# Zeile 2 - mittig mit derselben Breite der Button aus #1
let button4 = Button(panel, label="4")
let button5 = Button(panel, label="5")
# Zeile 3 - wie Zeile 2
let button6 = Button(panel, label="6")
let button7 = Button(panel, label="7")
# Zeile 4 - wie Zeile 1
let button8 = Button(panel, label="8")
let button9 = Button(panel, label="9")
let button10 = Button(panel, label="10")
proc layout() =
panel.layout:
# Zeile 1
button1:
top = panel.top + 10
left = panel.left + 10
# oberer + unterer Rand + 3*Zwischenräume (5*10)
height = (panel.height - (5 * 10)) / 4 # 4 Zeilen
# linker + rechter Rand + 2*Zwischenräume (4*10)
width = (panel.width - (4 * 10)) / 3 # 3 Spalten
button2:
top = button1.top
left = button1.right + 10
height = button1.height
width = button1.width
button3:
top = button1.top
left = button2.right + 10
height = button1.height
width = button1.width
# Zeile 2
button4:
top = button1.bottom + 10
# links von Mitte 1/2 Abstand und Buttonbreite
left = (panel.width / 2) - (5 + button1.width)
height = button1.height
width = button1.width
button5:
top = button4.top
left = button4.right + 10
height = button1.height
width = button1.width
# Zeile 3
button6:
top = button4.bottom + 10
left = button4.left
height = button1.height
width = button1.width
button7:
top = button6.top
left = button6.right + 10
height = button1.height
width = button1.width
# Zeile 4
button8:
top = button6.bottom + 10
left = button1.left
height = button1.height
width = button1.width
button9:
top = button8.top
left = button8.right + 10
height = button1.height
width = button1.width
button10:
top = button8.top
left = button9.right + 10
height = button1.height
width = button1.width
frame.wIdExit do ():
frame.delete()
panel.wEvent_Size do ():
layout()
layout()
frame.center()
frame.show()
app.mainLoop()
main()
Alles anzeigen