Classe: wxBoxSizer().
Ce sizer positionne ses enfants verticalement, ou horizontalement, en fonction du paramètre spécifié dans son constructeur.
Quand la position verticale est utilisée, chaque enfant peut être centré ou aligné à droite ou à gauche.
Dans la position horizontale, chaque enfant peut être centré ou aligné en bas ou en haut.
Le facteur d'agrandissement s'applique seulement dans la direction principale du sizer, c'est-à-dire que pour un sizer horizontal il déterminera l'agrandissement d'un élément dans le sens horizontale et pour un sizer vertical, il déterminera l'agrandissement d'un élément dans le sens vertical.
mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- ou wx.wxHORIZONTAL mainSizer:Add(param1, param2, param3, param4)
(1)
zéro ou 1, indique que les objets insérés au sizer, conserveront leur dimension original dans le sens defini. (vertical ou horizontal).
(2)
wx.wxGROW (ou wx.wxEXPAND), force la fenêtre à grandir avec le sizer.
wx.wxSHAPED indique à la fenêtre de changer de dimension tout en préservant le ratio original.
Quand le flag wx.wxGROW n'est pas utilisé, l'élément peut être aligné dans l'espace disponible en fonction des indication suivantes:
wx.wxALIGN_LEFT, wx.wxALIGN_TOP, wx.wxALIGN_RIGHT, wx.wxALIGN_BOTTOM,
wx.wxALIGN_CENTER_HORIZONTAL et wx.wxALIGN_CENTER_VERTICAL.
wx.wxALIGN_CENTER précise un alignement Vertical et horizontal.
Par défaut, l'allignement est wx.wxALIGN_TOP + wx.wxALIGN_LEFT.(en haut à gauche)
Une fenêtre appartenant à un sizer peut avoir une bordure, dont les cotés affichés peuvent être spécifiés.
Utilisez wx.wxTOP, wx.wxLEFT, wx.wxRIGHT et wx.wxBOTTOM ou wx.wxALL pour les 4 cotés.
Ces bordures sont invisibles, mais indispensable pour pouvoir créer une marge interne ou "padding".
Pour additionner différents "flags" dans le param3, utilisez le signe "+".
Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.
SetAutoLayout(true)* | Détermine si la fonction de mise en page sera appelée automatiquement lorsque la fenêtre sera redimensionnée. |
SetSizer(mainSizer) | Définit la fenêtre (frame, panel, dialog...) qui supportera le Sizer. |
SetSizeHints(frame)** | Cette méthode appelle en premier Fit() puis wxTopLevelWindow:SetSizeHints() sur la fenêtre qui lui est passée. |
Fit(frame) | Redimensionne la fenêtre de telle sorte que sa zone cliente corresponde à la taille minimale du sizer (ComputeFittingClientSize() est appelée pour le déterminer). |
GetOrientation() | Retourne l'orientation du sizer, soit wxVERTICAL ou wxHORIZONTAL. |
* Cette méthode étant appelée implicitement par SetSizer() n'est donc pas nécessaire, sauf dans le cas ou vous auriez utilisé SetConstraints()
** Cette méthode n'a de sens que si la fenêtre est une "topLevel" comme wxFrame ou wxDialog et n'a aucun effet sur les autres classes.
require("wx") -- inutile si on utilise wxluafreeze.exe -- Création d'une frame et de son panel. local frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "wxBoxSizer") local panel = wx.wxPanel(frame, -1) -- Centrage de la frame au milieu de l'écran. frame:Centre() -- Création de l'objet sizer avec une propriété verticale. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- Création de deux contrôles, dont le parent est le panel -- et non le sizer. local textEntry = wx.wxTextCtrl (panel, -1, "Texte de contrôle") local button = wx.wxButton (panel, -1, "Bouton de test") -- On additionne dans le sizer les objets textEntry et button. mainSizer:Add(textEntry, 1, wx.wxGROW + wx.wxALL, 6) mainSizer:Add(button, 1, wx.wxGROW + wx.wxALL, 6) -- On affecte le mainSizer au panel. panel:SetAutoLayout(true) panel:SetSizer(mainSizer) -- Optionnel, mais ceci fixe une taille minimale initiale, -- juste assez pour voir les différents contrôles. -- (surtout utile pour les boîtes de dialogues.) mainSizer:SetSizeHints(frame) mainSizer:Fit(frame) -- Démarrage de l'application. wx.wxGetApp():SetTopWindow(frame) frame:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat.