wxLua et wxWidgets:
Mode d'emploi.
 wxWidgets
Lua
Flèche gauche accueil wxWidgets lua notes Flèche droite
Description détaillée.

Classe: wxStaticBoxSizer().

Le fonctionnement de ce sizer est identique à celui de wx.wxBoxSizer(), mais à l'intérieur d'une boîte statique, avec un petit liséré encadrant le sizer, et un label de titre.

Mode d'emploi.

D'abord, un petit rappel:
Une "StaticBox" ou boîte statique en Français, est un rectangle dessiné pour désigner un regroupement logique d'objets. (boutons, TextCtrl et autres)

Le but de ce Sizer est de calculer à la place du programmeur la position adéquate de la staticBox en fonction de ce qu'elle contient.

Tous les objets internes n'ont pas forcément besoin de suivre le sens d'agrandissement de la StaticBox. Il suffit de modifier en conséquence le coefficient de ratio (param2) pour augmenter ou non, la taille des objets se trouvant à l'intérieur de la StaticBox.

Le schéma type de construction est toujours le même:

  1. Créer l'objet wxBoxSizer() avec une propriété verticale ou horizontale.
  2. Créer l'objet wx.wxStaticBoxSizer()
  3. Insérer les différents objets dans wx.wxStaticBoxSizer().(Add)
  4. Insérer wx.wxStaticBoxSizer dans wxBoxSizer().(Add)
  5. Affecter le wxBoxSizer() au panel, dialog ou frame.
Le constructeur.
staticBoxSizer = wx.wxStaticBoxSizer(wx.wxVERTICAL, 
                                     parent, "label")
	--(ou wx.wxHORIZONTAL, parent, "label")
	
staticBoxSizer:Add(param1, param2, param3, param4)	
				
  • param1 - nom de l'objet à mettre dans le sizer.
  • param2 - Définition du ratio de départ.(1)
  • param3 - Positionnement et extension du sizer.(2)
  • param4 - Espace en pixels entre les bords du sizer et de la fenêtre. (autrement appelé "padding"..)

(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 "+".

Les méthodes.

Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.

GetStaticBox()Retourne la boîte statique associé au Sizer.
Un premier exemple.

L'exemple suivant consiste à positionner dans une StaticBox 6 boutons sur 2 lignes et une barre de saisie pouvant se dilater dans le sens horizontal.

require("wx") -- inutile si on utilise wxluafreeze.exe

-- Création de la frame et de son panel.
local frame = wx.wxFrame(wx.NULL, -1, "wxStaticBoxSizer")
local panel = wx.wxPanel(frame, -1)

-- Centrage la frame au milieu de l'écran.
frame:Centre(wx.wxBOTH)

-- Création du Sizer principal.
local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)

-- Création de 2 StaticBoxSizers.
local staticBoxSizer = wx.wxStaticBoxSizer(wx.wxVERTICAL, 
                                           panel, "")
local staticBoxSizer2 = wx.wxStaticBoxSizer(wx.wxVERTICAL, 
                                            panel, "")

-- Création des 3 lignes qui recevront les boutons et 
-- la barre de saisie.
local line1 = wx.wxBoxSizer(wx.wxHORIZONTAL)
local line2 = wx.wxBoxSizer(wx.wxHORIZONTAL)
local line3 = wx.wxBoxSizer(wx.wxHORIZONTAL)

-- Création des boutons
local bouton1 = wx.wxButton(panel, -1, "Bouton 1")
local bouton2 = wx.wxButton(panel, -1, "Bouton 2")
local bouton3 = wx.wxButton(panel, -1, "Bouton 3")
local bouton4 = wx.wxButton(panel, -1, "Bouton 4")
local bouton5 = wx.wxButton(panel, -1, "Bouton 5")
local bouton6 = wx.wxButton(panel, -1, "Bouton 6")

-- Création de la barre de saisie.
local barreSaisie = wx.wxTextCtrl(panel, -1, 
                                 "Ceci est une barre de saisie")

-- On rajoute les boutons aux lignes 1 et 2 et la barre 
-- de saise à la ligne 3.
line1:Add(bouton1, 0, wx.wxALL, 10)
line1:Add(bouton2, 0, wx.wxALL, 10)
line1:Add(bouton3, 0, wx.wxALL, 10)
line2:Add(bouton4, 0, wx.wxALL, 10)
line2:Add(bouton5, 0, wx.wxALL, 10)
line2:Add(bouton6, 0, wx.wxALL, 10)
line3:Add(barreSaisie, 1, wx.wxGROW + wx.wxALL, 10)

-- On rajoute les lignes 1, 2 et 3 aux staticBoxSizer.
staticBoxSizer:Add(line1, 0, wx.wxALL, 0)
staticBoxSizer:Add(line2, 0, wx.wxALL, 0)
staticBoxSizer2:Add(line3, 1, wx.wxGROW + wx.wxALL, 0)

-- On ajoute les deux staticBoxSizers au sizer principal.
mainSizer:Add(staticBoxSizer, 0, wx.wxLEFT + wx.wxRIGHT 
              + wx.wxBOTTOM, 20)
mainSizer:Add(staticBoxSizer2, 0, wx.wxGROW + wx.wxLEFT 
              + wx.wxRIGHT + wx.wxBOTTOM, 20)

--Et on affecte le sizer principal au Panel
panel:SetSizer(mainSizer);

-- Démarrage de l'application.
wx.wxGetApp():SetTopWindow(frame)
frame:Show(true)
wx.wxGetApp():MainLoop()

				

Ce qui donne comme résultat avec un étirement de la "barre de saisie" mais pas des boutons:

image01

Un deuxième exemple.

Dans l'exemple suivant, nous utiliserons une boîte de dialogue.

Il nous faudra positionner des TextCtrl, des boutons sur 3 lignes et deux boutons en dehors de la staticBox.

require("wx") -- inutile si on utilise wxluafreeze.exe

ID_ABOUT_BUTTON = 9
ID_CLOSE_BUTTON = 10

-- Création d'une boîte de dialogue et de son panel
local dialog = wx.wxDialog(wx.NULL, wx.wxID_ANY, 
                           "Boîte de dialogue",
                           wx.wxDefaultPosition, 
                           wx.wxDefaultSize)
local panel = wx.wxPanel(dialog, wx.wxID_ANY)

-- Centre l'objet dialog au centre de l'écran.
dialog:Centre()

-- Création d'un Sizer principal pour l'agencement des boutons.
local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)

-- Création d'un StaticBoxSizer. (cette fois-ci en deux étapes)
local staticBox = wx.wxStaticBox(panel, wx.wxID_ANY,
                                 "Texte d'exemple 1")
local staticBoxSizer = wx.wxStaticBoxSizer(staticBox, 
                                           wx.wxVERTICAL)

-- Création de 3 lignes
local line1 = wx.wxBoxSizer(wx.wxHORIZONTAL)
local line2 = wx.wxBoxSizer(wx.wxHORIZONTAL)
local line3 = wx.wxBoxSizer(wx.wxHORIZONTAL)

-- Création de 3 TextCtrl.
local text1 = wx.wxTextCtrl(panel, -1, "ABCD")
local text2 = wx.wxTextCtrl(panel, -1, "EFGH")
local text3 = wx.wxTextCtrl(panel, -1, "ABCD-EFGH")

-- Création des Boutons qui vont avec les text1 et 2.
local btText1 = wx.wxButton( panel, -1, "Bouton Texte1")
local btText2 = wx.wxButton( panel, -1, "Bouton Texte2")

-- Mise en place de la première ligne
line1	:Add( text1, 0, wx.wxALL, 5)
line1	:Add( btText1, 0, wx.wxALL, 5)

-- Mise en place de la deuxième ligne
line2	:Add( text2, 0, wx.wxALL, 5)
line2	:Add( btText2, 0, wx.wxALL, 5)

-- Mise en place de la troisième ligne
line3	:Add( text3, 1, wx.wxALL, 5)

-- On range les lignes dans le  StaticBoxSizer
staticBoxSizer:Add( line1, 0, wx.wxALL, 5)
staticBoxSizer:Add( line2, 0, wx.wxALL, 5)
staticBoxSizer:Add( line3, 1, wx.wxGROW + wx.wxALL, 5)

-- Et on met le tout dans le Sizer principal
mainSizer:Add( staticBoxSizer, 1, wx.wxGROW+wx.wxALIGN_CENTER
               + wx.wxALL, 5 )

-- Création des 2 derniers boutons
local buttonSizer = wx.wxBoxSizer( wx.wxHORIZONTAL )
local aboutButton = wx.wxButton(panel, ID_ABOUT_BUTTON, "&About")
local closeButton = wx.wxButton(panel, ID_CLOSE_BUTTON, "E&xit")

--Addition des boutons aux Sizers
buttonSizer	:Add(aboutButton, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 )
buttonSizer	:Add(closeButton, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 )
mainSizer	:Add(buttonSizer, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 )

-- Affectation du sizer principal au Panel.
panel:SetSizer( mainSizer )
mainSizer:SetSizeHints( dialog )

-- Démarrage de l'application.
dialog:Show(true)
wx.wxGetApp():MainLoop()
				
				

Ce qui donne comme résultat:

image02

logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 28 octobre 2012.
Valid XHTML 1.0 Transitional

wxStaticBoxSizer
Revenir en Haut
Connexion à la base de données impossible