Code : Tout sélectionner
XIncludeFile "FORM\FORM.pbi"
; Variables of main object for window management
Global myForm.FORM::FORM
; Variables of layout object for layout management
Global.FORM::LAYOUT LY_main,LY_fields,LY_buttons,LY_City
; Variables of gadget object for gadget management
Global.FORM::GADGET name,address,code,city,country,
bt_validate,bt_chancel,bt_language,type
;Those variables are used for saving window size
Global W=400,H
; This procedure manages all events of the window
Procedure callback(form.FORM::FORM,gadget.FORM::GADGET)
Select Event()
Case #PB_Event_CloseWindow
form\Close()
End
Case #PB_Event_Gadget
Select gadget
;Click on language button, we change the current language
Case bt_language
Select gadget\Get_Data_Value()
Case 0
gadget\Set_Data_value(1)
myForm\Set_current_language(1)
Case 1
gadget\Set_Data_value(0)
myForm\Set_current_language(0)
EndSelect
myForm\Close()
myForm\Set_size(W,H)
myForm\Open()
name\Set_Active()
Case bt_validate
type\Set_Gadget_State(2)
EndSelect
Case #PB_Event_SizeWindow
; The window is resized, we save its size
w=myForm\Get_Window_Width()
h=myForm\Get_Window_Height()
EndSelect
EndProcedure
; create a window
myForm=NewForm("Teste EN"+Chr(10)+"Teste FR",@callback())
myForm\Set_size(W,H)
;Main layout
LY_main=myForm\Add_Vertical_Layout("item:1")
;fields layout into main loyout
LY_fields=LY_main\Add_Vertical_Layout()
;button layout into the main layout
LY_buttons=LY_main\Add_Horizontal_layout()
;Add fields into field layout
name=LY_fields\Add_String_Gadget("name"+Chr(10)+"nom")
address=LY_fields\Add_String_Gadget("address"+Chr(10)+"adresse")
;Grid layout for receive city data
LY_City=LY_fields\Add_Grid_Layout(2)
;Add city data into city layout
code=LY_City\Add_String_Gadget("postal code"+Chr(10)+"code postal")
city=LY_City\Add_String_Gadget("City"+Chr(10)+"localité")
country=LY_fields\Add_String_Gadget("country"+Chr(10)+"pays")
type=LY_fields\Add_Combobox_Gadget("Type"+Chr(10)+"Type")
type\Add_Gadget_Item("To determinate"+Chr(10)+"A déterminé")
type\Add_Gadget_Item("Customer"+Chr(10)+"Client",1)
type\Add_Gadget_Item("Provider"+Chr(10)+"Fournisseur",2)
type\Set_Gadget_State(0)
;Add button into button layout
bt_validate=LY_buttons\Add_Button_Gadget("validate"+Chr(10)+"valider")
bt_chancel=LY_buttons\Add_Button_Gadget("chancel"+Chr(10)+"annuler")
bt_language=LY_buttons\Add_Button_Gadget("EN"+Chr(10)+"FR")
bt_language\Set_Data_value(0)
; open window
If Not myForm\Open()
End
EndIf
;activate this gadget
name\Set_Active()
Repeat
WaitWindowEvent()
ForEver
Ceci n'est évidemment qu'un simple aperçu mais voila ce que cela pourrait donner en full POO.
La fenêtre a besoin de minimum un layout mais peut en avoir plusieurs. Chaque layout peut avoir des layouts qui peuvent eux-mêmes avoir des layouts etc.
Actuellement deux types de gadgets sont implémenté partiellement, le "string gadget" et le "Button gadget" l'idéal serait évidemment d'ajouté tous les gadgets supportés par Pb ainsi que d'autres personnalisés.
Lien Githb