Detect flying over gadget in a ScrollAreaGadget [Resolved]

Just starting out? Need help? Post your questions and find answers here.
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Detect flying over gadget in a ScrollAreaGadget [Resolved]

Post 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
Last edited by Kwai chang caine on Wed Dec 30, 2009 2:34 pm, edited 1 time in total.
ImageThe happiness is a road...
Not a destination
User avatar
Arctic Fox
Enthusiast
Enthusiast
Posts: 609
Joined: Sun Dec 21, 2008 5:02 pm
Location: Aarhus, Denmark

Re: Detect flying over gadget in a ScrollAreaGadget

Post 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)))
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Detect flying over gadget in a ScrollAreaGadget

Post 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:
ImageThe happiness is a road...
Not a destination
User avatar
Arctic Fox
Enthusiast
Enthusiast
Posts: 609
Joined: Sun Dec 21, 2008 5:02 pm
Location: Aarhus, Denmark

Re: Detect flying over gadget in a ScrollAreaGadget

Post 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
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Detect flying over gadget in a ScrollAreaGadget

Post 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
ImageThe happiness is a road...
Not a destination
User avatar
Arctic Fox
Enthusiast
Enthusiast
Posts: 609
Joined: Sun Dec 21, 2008 5:02 pm
Location: Aarhus, Denmark

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

Post 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).
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

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

Post 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
ImageThe happiness is a road...
Not a destination
User avatar
Arctic Fox
Enthusiast
Enthusiast
Posts: 609
Joined: Sun Dec 21, 2008 5:02 pm
Location: Aarhus, Denmark

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

Post 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:)
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

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

Post 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:
ImageThe happiness is a road...
Not a destination
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

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

Post 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
ImageThe happiness is a road...
Not a destination
User avatar
Arctic Fox
Enthusiast
Enthusiast
Posts: 609
Joined: Sun Dec 21, 2008 5:02 pm
Location: Aarhus, Denmark

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

Post 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()
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

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

Post 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:
ImageThe happiness is a road...
Not a destination
Post Reply