Bonjour,
je voudrais savoir si il y a la possibilité d'aligner automatiquement un gadget se trouvant dans un container quand on changer les dimensions de ce container comme on pouvait le faire dans RapidQbasic avec la méthode ALIGN (Align détermine comment le contrôle s'aligne sur son contrôle parent)
RapidQbasic , datant de 2000, fonctionne toujours même ous windows11
Alignement automatique d'un gadget dans un gadgetcontainer
Re: Alignemant automatique d'un gadget dans un gadgetcontainer
Je te propose ce code de shadoko qui montre pas mal d'exemples de redimensions
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[/code]
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Alignemant automatique d'un gadget dans un gadgetcontainer
Soit t'utilises le splittergadget ou un Dialog et c'est automatique, soit tu le fais à la main comme ça:
M.
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Window_0
Global Container_0, ExplorerList_0, Button_0
Declare ResizeGadgetsWindow_0()
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
Container_0 = ContainerGadget(#PB_Any, 0, 0, 600, 340)
ExplorerList_0 = ExplorerListGadget(#PB_Any, 0, 0, 600, 340, "")
CloseGadgetList()
Button_0 = ButtonGadget(#PB_Any, 480, 350, 100, 30, "OK")
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(Window_0)
FormWindowHeight = WindowHeight(Window_0)
ResizeGadget(Container_0, 0, 0, FormWindowWidth - 0, FormWindowHeight - 60)
ResizeGadget(ExplorerList_0, 0, 0, GadgetWidth(Container_0) - 0, GadgetHeight(Container_0) - 0)
ResizeGadget(Button_0, FormWindowWidth-GadgetWidth(Button_0)-20, FormWindowHeight-GadgetHeight(Button_0)-20, #PB_Ignore, #PB_Ignore)
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
event=WaitWindowEvent()
Until Window_0_Events(event) = #False
Re: Alignement automatique d'un gadget dans un gadgetcontainer
Bonjour,
Merci pour les infos. Je vais tester bientôt
Merci pour les infos. Je vais tester bientôt
Re: Alignement automatique d'un gadget dans un gadgetcontainer
Excellent ce code de shadoko ! 
(et celui de Mesa; certes différent)

(et celui de Mesa; certes différent)
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits