Connaitre le gadget présent sous la souris

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Connaitre le gadget présent sous la souris

Message par Progi1984 »

Bonjour,

Comment pourrais je savoir quel est le gadget présent sous la souris ? Peu importe le GadgetID ou l'ID Gadget...

Merci !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour

C'est déjà abordé dans le forum :

http://purebasic.hmt-forum.com/viewtopic.php?t=5753

Bonne journée :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

y'avait ce code là,

mais je me rappel qu'un membre du forum ( denis ? chris ? comtois ? ) avait posté un code qui renvoyait le type de gadget survolé ou cliqué ...

Code : Tout sélectionner

; Auteur : Chris
; Version de PB : 4
; 
; Explication du programme :
; Pour connaître toutes les informations concernant l'objet sous la souris

;- Enumérations
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Btn_Ok
  #String_0
  #IP_0
  #Combo_0
  #List_0
  #Btn_Img_0
  #Progress_0
  #Track_0
  #Btn_Quit
  #Btn_Cancel
EndEnumeration

; Appels de Structures. <-- Je sais pas si on dit ça, mais je me comprends.
CurPos.POINT
R.RECT
Parent.RECT
FP.RECT

;- Procédures
Procedure Open()
  If OpenWindow(#Window_0, 300, 200, 400, 360, "Détection des objets", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, 0)
    hWnd = WindowID(#Window_0)
    SetWindowPos_(hWnd, #HWND_TOPMOST, WindowX(#Window_0), WindowY(#Window_0), WindowWidth(#Window_0), WindowHeight(#Window_0) + 32, #SWP_SHOWWINDOW)
    If CreateGadgetList(hWnd)
      EditorGadget(#String_0, 5, 5, 385, 320)
      For i = 0 To 22
        AddGadgetItem(#String_0, -1, " ")
      Next
      ButtonGadget(#Btn_Quit, 150, 330, 100, 25, "Quit")
      ProcedureReturn hWnd
    EndIf
  EndIf
EndProcedure

Procedure SetText(Handle, x, y, w, h, hParent, h_hParent, xP, yP, wP, hP, IDWindow, Name$, NameParent$)
  If hParent = 0 : NameParent$ = "Aucun" : EndIf
  SetGadgetItemText(#String_0, 0, "--------- Références de l'objet pointé", 0)
  SetGadgetItemText(#String_0, 2, "Handle de l'objet= " + Str(Handle), 0)
  SetGadgetItemText(#String_0, 3, "Position X = " + Str(x), 0)
  SetGadgetItemText(#String_0, 4, "Position Y = " + Str(y), 0)
  SetGadgetItemText(#String_0, 5, "Largeur = " + Str(w), 0)
  SetGadgetItemText(#String_0, 6, "Hauteur = " + Str(h), 0)
  SetGadgetItemText(#String_0, 7, "ID de l'objet = " + Str(IDWindow), 0)
  SetGadgetItemText(#String_0, 8, "Nom de classe = " + Name$, 0)
  SetGadgetItemText(#String_0, 10, "--------- Références du parent direct", 0)
  SetGadgetItemText(#String_0, 12, "Handle du Parent = " + Str(hParent), 0)
  SetGadgetItemText(#String_0, 13, "Position X du Parent = " + Str(xP), 0)
  SetGadgetItemText(#String_0, 14, "Position Y du Parent = " + Str(yP), 0)
  SetGadgetItemText(#String_0, 15, "Largeur du Parent = " + Str(wP), 0)
  SetGadgetItemText(#String_0, 16, "Hauteur du Parent = " + Str(hP), 0)
  SetGadgetItemText(#String_0, 17, "Nom de classe = " + NameParent$, 0)
  SetGadgetItemText(#String_0, 19, "--------- Références de la première fenêtre", 0)
  SetGadgetItemText(#String_0, 21, "Handle fenêtre Mère = " + Str(h_hParent), 0)
EndProcedure

;- Programme
hWnd = Open()
SetTimer_(hWnd, 1, 50, 0)

Repeat
  GetCursorPos_(CurPos) ; Position du curseur
  ; / Relatif à la Zone survolée
  Handle = WindowFromPoint_(CurPos\x, CurPos\y) ; Handle de la zone survolée
  GetWindowRect_(Handle, R) ; Dimensions de la zone survolée
  hParent = GetParent_(Handle)
  If hParent <> 0 ; Si "Handle" à un parent
    tmp = hParent ; stockage temporaire du handle du parent
    Repeat
      hTemp = GetParent_(tmp) ; Recherche du parent
      If hTemp = 0 ; Si la recherche donne 0, le handle précédent est celui
        h_hParent = tmp ; de la fenêtre mère
        GetWindowRect_(h_hParent, FP)
        Break
      Else
        tmp = hTemp
      EndIf
    Until hTemp = 0
  EndIf
  
  x = R\Left : y = R\Top : x2 = R\right : y2 = R\bottom : w = x2 - x : h = y2 - y
  xP = FP\Left : yP = FP\Top : x2P = FP\right : y2P = FP\bottom : wP = x2P - xP : hP = y2P - yP
  x - xP : y - yP
  
  IDWindow = GetWindowLong_(Handle, #GWL_ID)
  Name$ = Space(256)
  GetClassName_(Handle, @Name$, 256)
  NameParent$ = Space(256)
  GetClassName_(hParent, @NameParent$, 256)
  
  Select WaitWindowEvent()
    Case #WM_TIMER
      SetText(Handle, x, y, w, h, hParent, h_hParent, xP, yP, wP, hP, IDWindow, Name$, NameParent$)
      
    Case #PB_Event_CloseWindow : Quit = 1
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Quit : Quit = 1
      EndSelect
  EndSelect
Until Quit = 1 : End
Répondre