Classe: wxFlexGridSizer()
Ce sizer est lui aussi bidimensionnel et dérivé de wxGridSizer.
Ici, la largeur de chaque colonne et la hauteur de chaque ligne est calculée individuellement pour chacune en retenant l'enfant le plus large/haut de la ligne/colonne. De plus, les colonnes et les lignes peuvent s'agrandir, comme si elles étaient des éléments individuels, avec un facteur d'agrandissement égal à 1.
Ce contrôleur permet donc de positionner en deux dimensions des éléments dont les colonnes auront toutes la même largeur et les lignes la même hauteur. Le plus grand impose la taille des autres. Ce composant est idéal pour réaliser des boîtes de dialogue demandant des informations.
flexGridSizer = wx.wxFlexGridSizer(lignes, colonnes,
espaceV, espaceH)
-- lignes - Nombre de lignes.
-- colonnes - Nombre de colonnes.
-- espaceV - Espace Vertical. (en pixels)
-- espaceH - Espace Horizontal. (en pixels)
flexGridSizer: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'alignement 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.
| AddGrowableCol(x) | Indique que la colonne N°x pourra varier.(à partir de zéro) |
| AddGrowableRow(y) | Indique que la ligne N°y pourra varier.(à partir de zéro) |
| GetFlexibleDirection() | Retourne une valeur wxOrientation qui spécifie si le sizer redimensionne ses colonnes, lignes, ou les deux (par défaut). |
| GetNonFlexibleGrowMode() | Retourne la valeur qui spécifie comment le sizer doit croître dans la direction "non-extensible", si il ya une. |
| RemoveGrowableCol(idx) | Spécifie que la colonne indexée par idx n'est plus "growable". |
| RemoveGrowableRow(idx) | Spécifie que la ligne indexée par idx n'est plus "growable" |
| SetFlexibleDirection(direction) | Spécifie si le sizer doit redimensionner ses colonnes, lignes ou les deux. |
| SetNonFlexibleGrowMode() | Spécifie comment le sizer doit croître dans le sens "non-extensible". (SetFlexibleDirection() doit avoir été appelé précédemment). |
Le constructeur répond aux mêmes exigences que wxGridSizer, à savoir:
nomObjet = wx.wxGridSizer(nb lignes, nb colonnes, espace entre les lignes, espace entre les colonnes)
require("wx") -- inutile si on utilise wxluafreeze.exe
-- Création d'une frame et son panel.
local frame = wx.wxFrame(wx.NULL, -1, "wxFlexGridSizer")
local panel = wx.wxPanel(frame, -1)
-- Centrage la frame au milieu de l'écran.
frame:Centre()
-- Création de l'objet sizer avec une propiété verticale.
local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)
-- Soit 3 lignes et 3 colonnes avec 10px entre les colonnes
-- et 5px entre les lignes.
-- Construction de l'objet flexGridSizer.
local flexGridSizer = wx.wxFlexGridSizer(3, 3, 10, 5)
-- Création de la première ligne.
flexGridSizer:Add(wx.wxStaticText(panel, -1, "Nom"),
1, wx.wxLEFT + wx.wxTOP + wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxStaticText(panel, -1, ":"),
1, wx.wxTOP + wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxTextCtrl(panel, -1),
1, wx.wxRIGHT + wx.wxTOP + wx.wxEXPAND, 10)
-- Création de la deuxième ligne.
flexGridSizer:Add(wx.wxStaticText(panel, -1, "Prénom"),
1, wx.wxLEFT + wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxStaticText(panel, -1, ":"),
1, wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxTextCtrl(panel, -1),
1, wx.wxRIGHT + wx.wxEXPAND, 10)
-- Création de la troisième ligne.
flexGridSizer:Add(wx.wxStaticText(panel, -1, "Age"),
1, wx.wxLEFT + wx.wxBOTTOM + wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxStaticText(panel, -1, ":"),
1, wx.wxBOTTOM + wx.wxEXPAND, 10)
flexGridSizer:Add(wx.wxTextCtrl(panel, -1),
1, wx.wxRIGHT + wx.wxBOTTOM + wx.wxEXPAND, 10)
-- On indique ci-dessous que les lignes et
-- les colonnes peuvent varier.
-- on indique que la colonne 0 peut varier.
flexGridSizer:AddGrowableCol(0);
-- on indique que la colonne 2 peut varier.
flexGridSizer:AddGrowableCol(2);
-- même chose pour la ligne 1.
flexGridSizer:AddGrowableRow(0);
-- même chose pour la ligne 2.
flexGridSizer:AddGrowableRow(1);
-- même chose pour la ligne 3.
flexGridSizer:AddGrowableRow(2);
-- On ajoute le fleGridSizer dans le mainSizer
mainSizer:Add(flexGridSizer, 0, wx.wxGROW, 0)
-- On affecte le mainSizer au panel.
panel:SetSizer(mainSizer);
-- On fixe une taille minimale de la frame au démarrage.
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, avec une fenêtre extensible.
