Met GUICtrlSetResizing() bepaal je hoe knoppen, invoervelden en lijsten zich gedragen als een venster groter of kleiner wordt. Zonder die instelling blijft alles vaak op een rare plek staan.
Wat is het probleem?
Je maakt een venster, zet er een invoerveld en een paar knoppen in, en op het eerste gezicht ziet alles er goed uit. Maar zodra het venster breder wordt, blijft een knop op een vreemde plek staan of wordt een invoerveld niet mee groter. Dan voelt je GUI rommelig aan.
Wat doet GUICtrlSetResizing()?
Met deze functie vertel je per GUI-onderdeel wat er moet gebeuren tijdens het resizen van een venster. Denk aan een knop, lijst, tekstvak of invoerveld.
- vast aan links of rechts: handig voor elementen die mee breder moeten worden
- vast aan boven of onder: handig voor elementen die op hun plek moeten blijven
- meerdere randen tegelijk: handig als een onderdeel echt mee moet groeien
Stap voor stap
- maak eerst je venster
- maak daarna de GUI-onderdelen aan
- zet per onderdeel een resize-regel met
GUICtrlSetResizing() - start daarna pas je gewone GUI-lus
Voorbeeldcode
In dit voorbeeld wordt het invoerveld breder als het venster breder wordt. De lijst groeit mee in breedte en hoogte. De knoppen blijven netjes onderaan staan.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $hGUI = GUICreate("Resizen met GUICtrlSetResizing", 420, 280, -1, -1, _
BitOR($WS_SIZEBOX, $WS_SYSMENU, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX))
Global $idInput = GUICtrlCreateInput("Typ hier iets", 16, 16, 388, 24)
Global $idList = GUICtrlCreateList("", 16, 52, 388, 160)
Global $idBtnAdd = GUICtrlCreateButton("Toevoegen", 16, 224, 120, 28)
Global $idBtnClose = GUICtrlCreateButton("Sluiten", 284, 224, 120, 28)
GUICtrlSetResizing($idInput, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
GUICtrlSetResizing($idList, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
GUICtrlSetResizing($idBtnAdd, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
GUICtrlSetResizing($idBtnClose, $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtnAdd
Local $sText = GUICtrlRead($idInput)
If $sText <> "" Then
GUICtrlSetData($idList, $sText & "|")
EndIf
Case $idBtnClose
ExitLoop
EndSwitch
WEnd
GUIDelete($hGUI)
Klein overzicht
- element blijft op één plek: vastzetten aan één rand
- element wordt breder: links en rechts vastmaken
- element wordt hoger: boven en onder vastmaken
- element blijft onderaan: onder vastmaken
Let hier op
De functie verandert niet vanzelf je hele layout. Je moet per onderdeel kiezen wat logisch is. Een knop hoeft meestal niet breder te worden. Een invoerveld of lijst juist wel. Als je alles hetzelfde gedrag geeft, krijg je snel een lelijke GUI.
Bevers gedachte
Een GUI die netjes mee schuift voelt meteen professioneler. De bever houdt van knoppen die blijven waar ze horen.
