j'ai wrapper les fonctions relatives aux gadgets pour permettre leur redimensionnement automatique lors d'un redimensionnement de la fenetre
(y'a pas tout les gadgets, mais vous verrez c'est tres simple d'en rajouter)
ça fonctionne aussi en SB
Code : Tout sélectionner
EnableExplicit
;############################################################################################################################
; Redimensionnement automatique des gadgets - pf shadoko - 2016
;
; fonctionnement:
; les instructions: OpenWindow, ButtonGadget, TextGadget, ... , CloseGadgetList
; doivent etre utilisées avec le suffixe 'R'
; les 2 parametres suplementaires : rx et ry correspondent au type de redimensionnement:
; rx/ry = 0 : pas de modification
; rx/ry = 1 : modification de la position x/y
; rx/ry = 2 : modification de la largeur/hauteur
; rx/ry = 3 : positionnement proportionnel
; (rx/ry = 4 : positionnement proportionnel d'un coté)
; (rx/ry = 5 : positionnement proportionnel de l'autre coté)
;
;############################################################################################################################
Structure GadgetInfo
g.i ;gadgetID
Map Glist.s() ;liste des gadgets contenus (pour les containers)
x.w: y.w ;position d'origine
dx.w: dy.w ;dimension d'origine
rx.b : ry.b ;type de redimensionnement
EndStructure
Global Dim GadgetCont.s(256), GadgetConti
Global NewMap GadgetList.GadgetInfo()
Procedure Redimensioner(c, nx, ny, ndx, ndy, t.s="G")
Protected.w ox1,oy1, ox2,oy2, x1,y1, x2,y2
Protected gi.GadgetInfo, o.GadgetInfo, adx,ady, r.f,d.w
Macro RedimensionerD(t, v1, V2, oV1, oV2, adV, ndV)
d = ndV - adV
r = ndV / adV
Select t
Case 0: v1 = oV1: V2 = oV2
Case 1: v1 = oV1 + d: V2 = oV2 + d
Case 2: v1 = oV1: V2 = oV2 + d
Case 3: v1 = oV1 * r: V2 = oV2 * r
Case 4: v1 = oV1: V2 = oV2 * r
Case 5: v1 = oV1 * r: V2 = oV2 + d
EndSelect
EndMacro
gi=GadgetList(t+Str(c))
adx = gi\dx
ady = gi\dy
ForEach gi\Glist():o=GadgetList(gi\Glist())
If (o\rx Or o\ry)
ox1 = o\x: ox2 = ox1 + o\dx: RedimensionerD (o\rx, x1, x2, ox1, ox2, adx, ndx)
oy1 = o\y: oy2 = oy1 + o\dy: RedimensionerD (o\ry, y1, y2, oy1, oy2, ady, ndy)
Redimensioner (o\g, x1, y1, x2 - x1, y2 - y1)
EndIf
Next
If t="G":ResizeGadget(c,nx, ny, ndx, ndy):EndIf
EndProcedure
Procedure GadgetInfo(na,n,x.w,y.w,dx.w,dy.w,rx.b,ry.b,iscontainer=0)
Protected gi.GadgetInfo, tg.s
With gi
If n=-1:\g=na:Else:\g=n:EndIf
\x=x: \dx=dx: \rx=rx
\y=y: \dy=dy: \ry=ry
If iscontainer=-1
tg="W"+Str(\g):GadgetConti=0
Else
tg="G"+Str(\g):GadgetList(GadgetCont(GadgetConti))\Glist(tg)=tg
EndIf
GadgetList(tg)=gi
If iscontainer:GadgetConti+1:GadgetCont(GadgetConti)=tg :EndIf
ProcedureReturn \g
EndWith
EndProcedure
;--------------------------------- gadgets
Procedure ButtonGadgetR(n,x,y,dx,dy,txt.s,f=0,rx=0,ry=0)
Protected na=ButtonGadget(n,x,y,dx,dy,txt,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
Procedure TextGadgetR(n,x,y,dx,dy,txt.s,f=0,rx=0,ry=0)
Protected na=TextGadget(n,x,y,dx,dy,txt,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
Procedure CheckBoxGadgetR(n,x,y,dx,dy,txt.s,f=0,rx=0,ry=0)
Protected na=CheckBoxGadget(n,x,y,dx,dy,txt,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
Procedure StringGadgetR(n,x,y,dx,dy,txt.s,f=0,rx=0,ry=0)
Protected na=StringGadget(n,x,y,dx,dy,txt,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
Procedure EditorGadgetR(n,x,y,dx,dy,f=0,rx=0,ry=0)
Protected na=EditorGadget(n,x,y,dx,dy,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
Procedure ButtonImageGadgetR(n,x,y,dx,dy,imageID,f=0,rx=0,ry=0)
Protected na=ButtonImageGadget(n,x,y,dx,dy,imageID,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry)
EndProcedure
;--------------------------------- containers
Procedure ContainerGadgetR(n,x,y,dx,dy,f=0,rx=0,ry=0)
Protected na=ContainerGadget(n,x,y,dx,dy,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry,1)
EndProcedure
Procedure PanelGadgetR(n,x,y,dx,dy,rx=0,ry=0)
Protected na=PanelGadget(n,x,y,dx,dy)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry,1)
EndProcedure
Procedure ScrollAreaGadgetR(n,x,y,dx,dy,scrolldx,scrolldy,scrollstep,f=0,rx=0,ry=0)
Protected na=ScrollAreaGadget(n,x,y,dx,dy,scrolldx,scrolldy,scrollstep,f)
ProcedureReturn GadgetInfo(na,n,x,y,dx,dy,rx,ry,1)
EndProcedure
;--------------------------------- window
Procedure WindowResizeEvent()
Protected n=EventWindow()
Redimensioner(n,0,0,WindowWidth(n), WindowHeight(n),"W")
EndProcedure
Procedure OpenWindowR(n,x,y,dx,dy,txt.s,f=#PB_Window_SystemMenu,pid=0)
Protected na=OpenWindow(n,x,y,dx,dy,txt,f,pid)
Protected nw=GadgetInfo(na,n,x,y,dx,dy,2,2,-1)
BindEvent(#PB_Event_SizeWindow,@WindowResizeEvent(), nw)
ProcedureReturn nw
EndProcedure
;---------------------------------
Procedure CloseGadgetListR()
CloseGadgetList()
GadgetConti-1
EndProcedure
;############################################################################################################################
; Exemple
;############################################################################################################################
CreateImage(0,200,60):StartDrawing(ImageOutput(0)):Define i:For i=0 To 200:Circle(100,30,200-i,(i+50)*$010101):Next:StopDrawing()
;OpenWindowr(0, 0, 0,512, 200, "Resize gadget", #PB_Window_Background)
OpenWindowR(0, 0, 0, 512, 200, "Resize gadget",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget)
;OpenWindowr(0, 0, 0, 512, 200, "Resize gadget", #PB_Window_Maximize | #PB_Window_SizeGadget| #PB_Window_MaximizeGadget)
TextGadgetR(1, 10, 10, 200, 50, "Redimentionnez la fenetre, les gadgets seront automatiquement redimentionnés",#PB_Text_Center)
ButtonImageGadgetR(3, 10, 70, 200, 60, ImageID(0),0,0,0)
EditorGadgetR(2, 10, 140, 200, 20, 0,0,2):SetGadgetText(2,"Editor")
ButtonGadgetR(4, 10, 170, 490, 20, "Button / toggle", #PB_Button_Toggle,2,1)
TextGadgetr(5,220,10,190,20,"Text",#PB_Text_Center,2,0):SetGadgetColor(5, #PB_Gadget_BackColor, $00FFFF)
ContainerGadgetR(6, 220, 30, 190, 100,#PB_Container_Single,2,2):SetGadgetColor(6, #PB_Gadget_BackColor, $cccccc)
EditorGadgetR(7, 10, 10, 170, 50, 0,2,2):SetGadgetText(7,"Editor")
ButtonGadgetR(8, 10, 70, 80, 20, "Button",0,4,1)
ButtonGadgetR(9, 100, 70, 80, 20, "Button",0,5,1)
CloseGadgetListR()
StringGadgetR(10, 220, 140, 190, 20, "String",0,2,1)
ButtonGadgetR(11, 420, 10, 80, 80, "Bouton",0,1,2)
CheckBoxGadgetR(12, 420, 90, 200, 20, "CheckBox",0,1,1)
CheckBoxGadgetR(13, 420, 110, 200, 20, "CheckBox",0,1,1)
CheckBoxGadgetR(14, 420, 130, 200, 20, "CheckBox",0,1,1)
CheckBoxGadgetR(15, 420, 150, 200, 20, "CheckBox",0,1,1)
ResizeWindow(0, #PB_Ignore , #PB_Ignore ,512,400):
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow