Page 1 of 1

Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Tue Dec 29, 2009 7:26 pm
by Kwai chang caine
Hello at all

I have found this great code of PATRICK88 based on a code of SPARKIE
This code can resize and move gadget in live.

It works perfectly, but i have put all the gadget in a ScrollAreaGadget
Apparently after modification by me, this line return always the ID of the ScrolArea :(

Code: Select all

 Pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(WindowID(#FEN_MAIN), WindowMouseX(#FEN_MAIN)|(WindowMouseY(#FEN_MAIN)<<32)))
I have try numerous way, but i can't return the ID like the original code :(
If somebody can help me 8)

Thanks and good day

Code: Select all

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

; ;...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)
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)
      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

Re: Detect flying over gadget in a ScrollAreaGadget

Posted: Tue Dec 29, 2009 8:38 pm
by Arctic Fox
Try this (and remember to reposition the four red textgadgets :wink:)

Code: Select all

gdt_pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(GadgetID(#GDT_DEMO1), (WindowMouseX(#FEN_MAIN) - GadgetX(#GDT_DEMO1)) | ((WindowMouseY(#FEN_MAIN) - GadgetY(#GDT_DEMO1))<<32)))

Re: Detect flying over gadget in a ScrollAreaGadget

Posted: Tue Dec 29, 2009 10:06 pm
by Kwai chang caine
Thanks a lot ARTIC FOX 8)
It's much better now :D

i see the four red square and i can move the gadget #GDT_DEMO1 8)
But how can i do for the other gadget ???

Are they a way for catch the ID of all the gadget in the ScrollGadget or must i create a line by gadget ?? :roll:
I have write this...that works, but is it the good way ???

Code: Select all

For i = 1 To 4
     Select i
      Case 1
       Pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(GadgetID(#DEMO1), (WindowMouseX(#FEN_MAIN) - GadgetX(#DEMO1))|((WindowMouseY(#FEN_MAIN) - GadgetY(#DEMO1))<<32)))
      Case 2
       Pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(GadgetID(#DEMO2), (WindowMouseX(#FEN_MAIN) - GadgetX(#DEMO2))|((WindowMouseY(#FEN_MAIN) - GadgetY(#DEMO2))<<32)))
      Case 3
       Pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(GadgetID(#DEMO3), (WindowMouseX(#FEN_MAIN) - GadgetX(#DEMO3))|((WindowMouseY(#FEN_MAIN) - GadgetY(#DEMO3))<<32)))
      Case 4 
       Pgn_id = GetDlgCtrlID_(ChildWindowFromPoint_(GadgetID(#DEMO4), (WindowMouseX(#FEN_MAIN) - GadgetX(#DEMO4))|((WindowMouseY(#FEN_MAIN) - GadgetY(#DEMO4))<<32)))
     EndSelect
     
     If Pgn_id <> 0
      Break
     EndIf
      
    Next
Again thanks, you help me already too much :wink:

Re: Detect flying over gadget in a ScrollAreaGadget

Posted: Wed Dec 30, 2009 1:42 pm
by Arctic Fox
Does this work for you?

I have slightly modified your source code; added the PtInRect_() and GetWindowRect_() functions and specified an x- and y-offset for the gadgets inside the ContainerGadget.

Code: Select all

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

; ;...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

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 = #GDT_DEMO2 Or gdt_id = #GDT_DEMO3
   x = GadgetX(#GDT_DEMO1)
   y = GadgetY(#GDT_DEMO1)
   EndIf
   
   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, 300, 300, "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)
      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)

   GetWindowRect_(GadgetID(#GDT_DEMO1), @DemoRect(#GDT_DEMO1))
   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
   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           
           
           If gdt_id > #GDT_USER_GADGET And gdt_id < #GDT_LAST_USER_GADGET
              GetWindowRect_(GadgetID(#GDT_DEMO1), @DemoRect(#GDT_DEMO1))
              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

Re: Detect flying over gadget in a ScrollAreaGadget

Posted: Wed Dec 30, 2009 2:33 pm
by Kwai chang caine
Yeeeesss !!! it's perfect !!! 8)

Me too i have works all the morning on this code...and the only things that i have go out ...it's water in my eyes :(
In the end of my works ...nothing works :oops:

When i have see your code...a dribble go down from my mouth ..
Image

Very very thanks for your present ARTIC... 8)
I wish you a very very good DAY

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Dec 30, 2009 4:17 pm
by Arctic Fox
You are very welcome, KCC :D
There might be some issues with my code when using the ScrollAreaGadget (when placing the other gadgets outside the 'visible' area).

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Dec 30, 2009 11:05 pm
by Kwai chang caine
I cross my fingers, for the time that's works 8)
I have works on this code, because i want create a simple flowchart.
Because, i have search, but they are nearly no flowchart freeware :(
Perhaps the programmer is rich :lol:

Before i use DIA, it is a freeware, but i found it a little bit complicated, to use and also to install with his GTK :(

In my little FlowChart, each gadget is a condition, and i have add image with arrow inside, i save the position of gadget, and make link on each gadget with a text or picture :D

For replace picture of arrow, i have thinking at lines directly draw on the windows, for linking each gadget ..
I believe they are a code for draw lines between two gadget, i go to search tomorrow, because after 12 hours, at create bugs, i'm tired :lol:

Again thanks for your precious help, without you, my project is dead 8)
Good night

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Dec 30, 2009 11:20 pm
by Arctic Fox
You say, you need a flowchart application?
Well, you can try Diagram Designer http://logicnet.dk/DiagramDesigner/ (if you give up with your project :wink:)

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Thu Dec 31, 2009 4:25 pm
by Kwai chang caine
Thanks, ThanksThanksThanksThanksThanksThanks !!!
I don't know it 8)

For give you a present ... i make to you a big french kiss :D

Image

I wish you a very very good day and also a night, with not too much alcohol :lol:

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Jan 06, 2010 4:41 pm
by Kwai chang caine
I have a new problem :(
I don't know why, but i can't move the gadget, if i scroll the Y AND the X area together

First try
1/ Run the code
2/ Move the scrollYBar for go up the texte at the top
3/ Go down the textgadget that's works 8)

Second try
1/ Run the code
2/ Move the scrollYBar for go up the texte at the top
3/ Move the ScrollBarX to the right
4/ Now you can't go down the textgadget :(

ARTIC FOX say to me perhaps in the futur, i have a problem with that :roll:
He have right..i have now a problem :(

If somebody know why ??

Code: Select all

Enumeration

	#FEN_MAIN
	#GadgetArea
	#GDT_USER_GADGET
	#GDT_DEMO3
	#GDT_LAST_USER_GADGET

EndEnumeration

Global mx.w, my.w, deltax.w , deltay.w , gdt_x.w,gdt_y.w, gdt_id.l, gdt_pgn_id.l
Global mpgn.POINT
Global Dim DemoRect.RECT(#PB_Compiler_EnumerationValue)

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) 
OpenGadgetList(#GadgetArea)
 StringGadget(#GDT_DEMO3,400,450,100,20,"Déplace moi")
CloseGadgetList()

GetWindowRect_(GadgetID(#GDT_DEMO3), @DemoRect(#GDT_DEMO3))
deltax = -2
deltay = -2

Repeat

	event = WaitWindowEvent()
	
	Select event

		Case #WM_LBUTTONUP
		
			gdt_id = 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

					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
					ResizeGadget(gdt_id, gdt_x, gdt_y, #PB_Ignore, #PB_Ignore)

				EndIf

			If gdt_id = #GDT_DEMO3
				GetWindowRect_(GadgetID(#GDT_DEMO3), @DemoRect(#GDT_DEMO3))
			EndIf

		Else

			GetCursorPos_(@mpgn)
			gdt_pgn_id = -1

			If PtInRect_(@DemoRect(#GDT_DEMO3), mpgn\y << 32 + mpgn\x)
				gdt_pgn_id = #GDT_DEMO3
			EndIf

			If gdt_pgn_id = #GDT_DEMO3
				gdt_id = gdt_pgn_id
  	EndIf

 	EndIf

	 Case #PB_Event_Gadget

		 If EventGadget() = #GDT_DEMO3
		 	gdt_id = EventGadget()
		 EndIf

 EndSelect

Until event = #PB_Event_CloseWindow

End

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Jan 06, 2010 5:12 pm
by Arctic Fox
You can try something like this

Code: Select all

Procedure ScrollAreaMouseX()
    ProcedureReturn WindowMouseX(#FEN_MAIN) - GadgetX(#GadgetArea) + GetGadgetAttribute(#GadgetArea, #PB_ScrollArea_X)
EndProcedure

Procedure ScrollAreaMouseY()
    ProcedureReturn WindowMouseY(#FEN_MAIN) - GadgetY(#GadgetArea) + GetGadgetAttribute(#GadgetArea, #PB_ScrollArea_Y)
EndProcedure

...

mx = ScrollAreaMouseX() ; coordonnées curseur souris
my = ScrollAreaMouseY()

Re: Detect flying over gadget in a ScrollAreaGadget [Resolved]

Posted: Wed Jan 06, 2010 6:06 pm
by Kwai chang caine
Yeahh !!! always right !!! :D

In sometime..i must create for you a statue 8)
Apparently that works too

Thanks again, and this time...perhaps, i not disturb you, another time, for today :oops: