;; http://www.purebasic.fr/english/viewtop ... wfrompoint
;; code de Sparkie
ce code ne fonctionne pas avec des "groupes"
containergadget / panelgadget....
Code : Tout sélectionner
Enumeration
#FEN_MAIN
EndEnumeration
Enumeration 1
#GDT_PgnG
#GDT_PgnD
#GDT_PgnH
#GDT_PgnB
#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
; ;...Our main image
; CreateImage(2, 300, 300)
; StartDrawing(ImageOutput(2))
; Circle(150, 150, 150, #Yellow)
; StopDrawing()
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 traces.s
;...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)
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,GadgetY(gdt_id)-#GDT_PoigneeTaille/2+GadgetHeight(gdt_id)/2, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnD,GadgetX(gdt_id)+GadgetWidth(gdt_id)-#GDT_PoigneeTaille/2,GadgetY(gdt_id)-#GDT_PoigneeTaille/2+GadgetHeight(gdt_id)/2, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnH,GadgetX(gdt_id)+GadgetWidth(gdt_id)/2-#GDT_PoigneeTaille/2,GadgetY(gdt_id)-#GDT_PoigneeTaille/2, #PB_Ignore, #PB_Ignore)
ResizeGadget(#GDT_PgnB,GadgetX(gdt_id)+GadgetWidth(gdt_id)/2-#GDT_PoigneeTaille/2,GadgetY(gdt_id)+GadgetHeight(gdt_id)-#GDT_PoigneeTaille/2, #PB_Ignore, #PB_Ignore)
EndIf
EndProcedure
If OpenWindow(#FEN_MAIN, 0, 0, 300, 300, "Visual PB Zoub", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
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)
ContainerGadget(#GDT_DEMO1,10,10,200,25,#PB_Container_Single)
TextGadget(#GDT_DEMO2,5,4,80,16,"Déplace moi")
StringGadget(#GDT_DEMO3,90,2,100,20,"Déplace moi")
CloseGadgetList()
;ButtonGadget(#GDT_DEMO1,10,10,100,25,"Déplace moi")
;TextGadget(#GDT_DEMO2,10,30,100,25,"Déplace moi")
;StringGadget(#GDT_DEMO3,10,50,100,25,"Déplace moi")
ListIconGadget(#GDT_DEMO4,150,10,100,100,"Déplace moi",100)
;Poignee_cache(#GDT_PoigneeMontre)
deltax = -2: deltay = -2
gdt_id = #GDT_USER_GADGET+1
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
Else
gdt_pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(WindowID(#FEN_MAIN), WindowMouseX(#FEN_MAIN)| (WindowMouseY(#FEN_MAIN)<<32))) ; modifié après intervention de kwandjeen
If gdt_pgn_id > #GDT_USER_GADGET And gdt_pgn_id < #GDT_LAST_USER_GADGET
gdt_id = gdt_pgn_id
Poignee_cache(#GDT_PoigneeMontre,gdt_id)
SetCursor_(cursorSIZE)
Else
Select gdt_pgn_id
Case #GDT_PgnG, #GDT_PgnD
SetCursor_(cursorWE)
Case #GDT_PgnH, #GDT_PgnB
SetCursor_(cursorNS)
EndSelect
EndIf
;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
; IDE Options = PureBasic 4.30 Beta 4 (Windows - x86)