Code : Tout sélectionner
; Codé par Patrick88 modifié par ArticFox pour y inserer un ScrollArea
Enumeration
#FEN_MAIN
EndEnumeration
Enumeration 1
#GDT_PgnG
#GDT_PgnD
#GDT_PgnH
#GDT_PgnB
#GadgetArea ;<==== Add by KCC
#GDT_USER_GADGET
#GDT_DEMO1
#GDT_DEMO2
#GDT_DEMO3
#GDT_DEMO4
#GDT_LAST_USER_GADGET
EndEnumeration
#GDT_PoigneeTaille = 10
#GDT_PoigneeCouleur = $0000ff
#GDT_PoigneeCache = 1
#GDT_PoigneeMontre = 0
Global mx.w, my.w, deltax.w , deltay.w , gdt_x.w,gdt_y.w, gdt_id.l, gdt_pgn_id.l
Global Pas_Grille.b = 10
Global mpgn.POINT
Global Dim DemoRect.RECT(#PB_Compiler_EnumerationValue)
;...Load cursors
cursorNS = LoadCursor_(0, #IDC_SIZENS)
cursorWE = LoadCursor_(0, #IDC_SIZEWE)
cursorSIZE = LoadCursor_(0, #IDC_SIZEALL)
Procedure Poignee_cache(etat.b,gdt_id.l)
Protected x, y
HideGadget(#GDT_PgnG,etat)
HideGadget(#GDT_PgnD,etat)
HideGadget(#GDT_PgnH,etat)
HideGadget(#GDT_PgnB,etat)
If gdt_id > 0
ResizeGadget(#GDT_PgnG,GadgetX(gdt_id)-#GDT_PoigneeTaille/2 + x,GadgetY(gdt_id)-#GDT_PoigneeTaille/2+GadgetHeight(gdt_id)/2 + y, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnD,GadgetX(gdt_id)+GadgetWidth(gdt_id)-#GDT_PoigneeTaille/2 + x,GadgetY(gdt_id)-#GDT_PoigneeTaille/2+GadgetHeight(gdt_id)/2 + y, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnH,GadgetX(gdt_id)+GadgetWidth(gdt_id)/2-#GDT_PoigneeTaille/2 + x,GadgetY(gdt_id)-#GDT_PoigneeTaille/2 + y, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnB,GadgetX(gdt_id)+GadgetWidth(gdt_id)/2-#GDT_PoigneeTaille/2 + x,GadgetY(gdt_id)+GadgetHeight(gdt_id)-#GDT_PoigneeTaille/2 + y, #PB_Ignore, #PB_Ignore)
GetWindowRect_(GadgetID(#GDT_PgnG), @DemoRect(#GDT_PgnG))
GetWindowRect_(GadgetID(#GDT_PgnD), @DemoRect(#GDT_PgnD))
GetWindowRect_(GadgetID(#GDT_PgnH), @DemoRect(#GDT_PgnH))
GetWindowRect_(GadgetID(#GDT_PgnB), @DemoRect(#GDT_PgnB))
EndIf
EndProcedure
If OpenWindow(#FEN_MAIN, 0, 0, 500, 500, "Visual PB Zoub", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ScrollAreaGadget(#GadgetArea, 0, 0, WindowWidth(#FEN_MAIN), WindowHeight(#FEN_MAIN), 10000, 10000) ;<==== Add by KCC
OpenGadgetList(#GadgetArea) ;<==== Add by KCC
TextGadget(#GDT_PgnG,-100,0,#GDT_PoigneeTaille,#GDT_PoigneeTaille,""):SetGadgetColor(#GDT_PgnG,#PB_Gadget_BackColor,#GDT_PoigneeCouleur)
TextGadget(#GDT_PgnD,-100,0,#GDT_PoigneeTaille,#GDT_PoigneeTaille,""):SetGadgetColor(#GDT_PgnD,#PB_Gadget_BackColor,#GDT_PoigneeCouleur)
TextGadget(#GDT_PgnH,-100,0,#GDT_PoigneeTaille,#GDT_PoigneeTaille,""):SetGadgetColor(#GDT_PgnH,#PB_Gadget_BackColor,#GDT_PoigneeCouleur)
TextGadget(#GDT_PgnB,-100,0,#GDT_PoigneeTaille,#GDT_PoigneeTaille,""):SetGadgetColor(#GDT_PgnB,#PB_Gadget_BackColor,#GDT_PoigneeCouleur)
TextGadget(#GDT_DEMO2,5,4,80,16,"Déplace moi")
StringGadget(#GDT_DEMO3,90,2,100,20,"Déplace moi")
CloseGadgetList()
ListIconGadget(#GDT_DEMO4,150,10,100,100,"Déplace moi",100)
GetWindowRect_(GadgetID(#GDT_DEMO2), @DemoRect(#GDT_DEMO2))
GetWindowRect_(GadgetID(#GDT_DEMO3), @DemoRect(#GDT_DEMO3))
GetWindowRect_(GadgetID(#GDT_DEMO4), @DemoRect(#GDT_DEMO4))
GetWindowRect_(GadgetID(#GDT_PgnG), @DemoRect(#GDT_PgnG))
GetWindowRect_(GadgetID(#GDT_PgnD), @DemoRect(#GDT_PgnD))
GetWindowRect_(GadgetID(#GDT_PgnH), @DemoRect(#GDT_PgnH))
GetWindowRect_(GadgetID(#GDT_PgnB), @DemoRect(#GDT_PgnB))
deltax = -2: deltay = -2
Repeat
event = WaitWindowEvent()
;
Select event
Case #WM_LBUTTONUP
gdt_id = 0
Poignee_cache(#GDT_PoigneeMontre,0)
deltax = -2: deltay = -2
Case #WM_MOUSEMOVE
mx = WindowMouseX(#FEN_MAIN) ; coordonnées curseur souris
my = WindowMouseY(#FEN_MAIN)
If GetAsyncKeyState_(#VK_LBUTTON)
If gdt_id > #GDT_USER_GADGET And gdt_id < #GDT_LAST_USER_GADGET And gdt_id = gdt_pgn_id
Poignee_cache(#GDT_PoigneeCache,gdt_id)
; sauvegarde la distance coin haut gauche gadget aux coordonnées curseur souris
If deltax < -1 And deltay < -1
deltax = mx-GadgetX(gdt_id)
deltay = my-GadgetY(gdt_id)
EndIf
gdt_x = mx-deltax
gdt_y = my-deltay
If Pas_Grille>0
gdt_x = (gdt_x / Pas_Grille)*Pas_Grille
gdt_y = (gdt_y / Pas_Grille)*Pas_Grille
EndIf
ResizeGadget(gdt_id, gdt_x, gdt_y, #PB_Ignore, #PB_Ignore)
Else
If Pas_Grille>0
mx = (mx / Pas_Grille)*Pas_Grille
my = (my / Pas_Grille)*Pas_Grille
EndIf
If gdt_pgn_id = #GDT_PgnG
ResizeGadget(#GDT_PgnG,mx,#PB_Ignore, #PB_Ignore, #PB_Ignore)
largeur_gadget.w = GadgetWidth(gdt_id)+(GadgetX(gdt_id)-mx)
ResizeGadget(gdt_id, mx, #PB_Ignore, largeur_gadget, #PB_Ignore)
Else
If gdt_pgn_id = #GDT_PgnD
ResizeGadget(#GDT_PgnD,mx-#GDT_PoigneeTaille,#PB_Ignore, #PB_Ignore, #PB_Ignore)
largeur_gadget.w = mx-GadgetX(gdt_id)
ResizeGadget(gdt_id, #PB_Ignore, #PB_Ignore, largeur_gadget, #PB_Ignore)
Else
If gdt_pgn_id = #GDT_PgnH
ResizeGadget(#GDT_PgnH,#PB_Ignore,my, #PB_Ignore, #PB_Ignore)
hauteur_gadget.w = GadgetHeight(gdt_id)+(GadgetY(gdt_id)-GadgetY(#GDT_PgnH))
ResizeGadget(gdt_id, #PB_Ignore, GadgetY(#GDT_PgnH), #PB_Ignore, hauteur_gadget)
Else
If gdt_pgn_id = #GDT_PgnB
ResizeGadget(#GDT_PgnB,#PB_Ignore,my-#GDT_PoigneeTaille, #PB_Ignore, #PB_Ignore)
hauteur_gadget.w = my-GadgetY(gdt_id)
ResizeGadget(gdt_id, #PB_Ignore, #PB_Ignore, #PB_Ignore, hauteur_gadget)
EndIf
EndIf
EndIf
EndIf
EndIf
If gdt_id > #GDT_USER_GADGET And gdt_id < #GDT_LAST_USER_GADGET
GetWindowRect_(GadgetID(#GDT_DEMO2), @DemoRect(#GDT_DEMO2))
GetWindowRect_(GadgetID(#GDT_DEMO3), @DemoRect(#GDT_DEMO3))
GetWindowRect_(GadgetID(#GDT_DEMO4), @DemoRect(#GDT_DEMO4))
EndIf
Else
GetCursorPos_(@mpgn)
gdt_pgn_id = -1
If PtInRect_(@DemoRect(#GDT_DEMO4), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_DEMO4 : EndIf
If PtInRect_(@DemoRect(#GDT_DEMO1), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_DEMO1 : EndIf
If PtInRect_(@DemoRect(#GDT_DEMO2), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_DEMO2 : EndIf
If PtInRect_(@DemoRect(#GDT_DEMO3), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_DEMO3 : EndIf
If PtInRect_(@DemoRect(#GDT_PgnG), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_PgnG : EndIf
If PtInRect_(@DemoRect(#GDT_PgnD), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_PgnD : EndIf
If PtInRect_(@DemoRect(#GDT_PgnH), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_PgnH : EndIf
If PtInRect_(@DemoRect(#GDT_PgnB), mpgn\y << 32 + mpgn\x) : gdt_pgn_id = #GDT_PgnB : EndIf
Select gdt_pgn_id
Case #GDT_DEMO1 To #GDT_DEMO4
gdt_id = gdt_pgn_id
Poignee_cache(#GDT_PoigneeMontre,gdt_id)
SetCursor_(cursorSIZE)
Case #GDT_PgnG, #GDT_PgnD
SetCursor_(cursorWE)
Case #GDT_PgnH, #GDT_PgnB
SetCursor_(cursorNS)
Default
Poignee_cache(#GDT_PoigneeCache,0)
EndSelect
;Debug "gdt_id: "+Str(gdt_id)+" - gdt_pgn_id: "+Str(gdt_pgn_id)
EndIf
Case #PB_Event_Gadget
If EventGadget() > #GDT_USER_GADGET And EventGadget() < #GDT_LAST_USER_GADGET
gdt_id = EventGadget()
EndIf
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
End; EPB