[Windows] MouseEvent

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

[Windows] MouseEvent

Message par Atomo »

Salut :)

Je vous propose un petit fichier à inclure dans vos projets, il permet d'intercepter les événements de la souris sur des gadgets.

Voici la liste des événements pris en charge :
  • - #MouseEvent_EventType_Click
    - #MouseEvent_EventType_DoubleClick
    - #MouseEvent_EventType_Push
    - #MouseEvent_EventType_Release
    - #MouseEvent_EventType_Hover
    - #MouseEvent_EventType_Leave
    - #MouseEvent_EventType_Drag
    - #MouseEvent_EventType_DragStart
    - #MouseEvent_EventType_DragStop
    - #MouseEvent_EventType_Move
    - #MouseEvent_EventType_WheelUp
    - #MouseEvent_EventType_WheelDown
Le fichier include :

Code : Tout sélectionner

Enumeration
  #MouseEvent_EventType_Click
  #MouseEvent_EventType_DoubleClick
  #MouseEvent_EventType_Push
  #MouseEvent_EventType_Release
  #MouseEvent_EventType_Hover
  #MouseEvent_EventType_Leave
  #MouseEvent_EventType_Drag
  #MouseEvent_EventType_DragStart
  #MouseEvent_EventType_DragStop
  #MouseEvent_EventType_Move
  #MouseEvent_EventType_WheelUp
  #MouseEvent_EventType_WheelDown
EndEnumeration

Structure MouseEvent_MouseButton
  Button.b
  Key.i
  isPushed.b
  isDragged.b
  Timestamp.i
EndStructure

Structure MouseEvent_Gadget
  Gadget.i
  GadgetID.i
  MouseHover.b
  List MouseButton.MouseEvent_MouseButton()
EndStructure

Structure MouseEvent_EventStack
  Gadget.i
  EventType.b
  Button.b
EndStructure

Threaded NewList MouseEvent_Gadget.MouseEvent_Gadget()
Threaded NewList MouseEvent_EventStack.MouseEvent_EventStack()

Threaded MouseEvent_MouseX, MouseEvent_MouseY
Threaded MouseEventGadget, MouseEventType, MouseEventButton

Procedure isMouseButton(Button)
  If GetAsyncKeyState_(Button) & 32768
    ProcedureReturn #True
  EndIf
EndProcedure

Procedure SendMouseEvent(Gadget, EventType, Button)
  LastElement(MouseEvent_EventStack())
  AddElement(MouseEvent_EventStack())
  MouseEvent_EventStack()\Gadget = Gadget
  MouseEvent_EventStack()\EventType = EventType
  MouseEvent_EventStack()\Button = Button
EndProcedure

Procedure MouseEvent(WindowEvent)
  If DesktopMouseX() <> MouseEvent_MouseX Or DesktopMouseY() <> MouseEvent_MouseY
    MouseEvent_MouseX = DesktopMouseX() : MouseEvent_MouseY = DesktopMouseY()
    isMouseMoved = #True
  EndIf
  Window = WindowFromPoint_(MouseEvent_MouseY<<32|MouseEvent_MouseX)
  
  ForEach MouseEvent_Gadget()
    ;{ MouseHover
    If MouseEvent_Gadget()\GadgetID = Window
      If MouseEvent_Gadget()\MouseHover = #False
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Hover, 0)
        MouseEvent_Gadget()\MouseHover = #True
        ForEach MouseEvent_Gadget()\MouseButton()
          If MouseEvent_Gadget()\MouseButton()\isPushed = #False
            MouseEvent_Gadget()\MouseButton()\isPushed = -1
          EndIf
        Next
      EndIf
    Else
      If MouseEvent_Gadget()\MouseHover = #True
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Leave, 0)
        MouseEvent_Gadget()\MouseHover = #False
      EndIf
    EndIf
    ;}
    ;{ MouseButton
    ForEach MouseEvent_Gadget()\MouseButton()
      If isMouseButton(MouseEvent_Gadget()\MouseButton()\Key) = #True
        If MouseEvent_Gadget()\MouseHover = #True
          If MouseEvent_Gadget()\MouseButton()\isPushed = #False
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Push, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isPushed = #True
          EndIf
        EndIf
      Else
        If MouseEvent_Gadget()\MouseButton()\isPushed = #True
          If MouseEvent_Gadget()\MouseButton()\isDragged = #False
            If MouseEvent_Gadget()\MouseHover = #True
              If ElapsedMilliseconds()-MouseEvent_Gadget()\MouseButton()\Timestamp <= 500
                SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DoubleClick, MouseEvent_Gadget()\MouseButton()\Button)
                MouseEvent_Gadget()\MouseButton()\Timestamp = 0
              Else
                SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Click, MouseEvent_Gadget()\MouseButton()\Button)
                MouseEvent_Gadget()\MouseButton()\Timestamp = ElapsedMilliseconds()
              EndIf
            EndIf
          Else
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DragStop, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isDragged = #False
          EndIf
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Release, MouseEvent_Gadget()\MouseButton()\Button)
        EndIf
        MouseEvent_Gadget()\MouseButton()\isPushed = #False
      EndIf
    Next
    ;}
    ;{ MouseWheel
    If WindowEvent = #WM_MOUSEWHEEL
      If MouseEvent_Gadget()\MouseHover = #True
        If EventwParam() > 0
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_WheelUp, 0)
        Else
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_WheelDown, 0)
        EndIf
      EndIf
    EndIf
    ;}
    ;{ MouseMovement
    If isMouseMoved = #True
      ForEach MouseEvent_Gadget()\MouseButton()
        If MouseEvent_Gadget()\MouseButton()\isPushed = #True
          If MouseEvent_Gadget()\MouseButton()\isDragged = #False
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DragStart, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isDragged = #True
          EndIf
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Drag, MouseEvent_Gadget()\MouseButton()\Button)
        EndIf
      Next
      If MouseEvent_Gadget()\MouseHover = #True
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Move, 0)
      EndIf
    EndIf
    ;}
  Next
  
  ;Return Event
  If ListSize(MouseEvent_EventStack())
    FirstElement(MouseEvent_EventStack())
    MouseEventGadget = MouseEvent_EventStack()\Gadget
    MouseEventType = MouseEvent_EventStack()\EventType
    MouseEventButton = MouseEvent_EventStack()\Button
    DeleteElement(MouseEvent_EventStack())
    ProcedureReturn #True
  EndIf
EndProcedure

Procedure MouseEventGadget()
  ProcedureReturn MouseEventGadget
EndProcedure

Procedure MouseEventType()
  ProcedureReturn MouseEventType
EndProcedure

Procedure MouseEventButton()
  ProcedureReturn MouseEventButton
EndProcedure

Procedure isMouseEventGadget(Gadget)
  ForEach MouseEvent_Gadget()
    If MouseEvent_Gadget()\Gadget = Gadget
      ProcedureReturn #True
    EndIf
  Next
EndProcedure

Macro MouseEvent_AddMouseButton(_Button, _Key)
  AddElement(MouseEvent_Gadget()\MouseButton())
  MouseEvent_Gadget()\MouseButton()\Button = _Button
  MouseEvent_Gadget()\MouseButton()\Key = _Key
EndMacro

Procedure AddMouseEventGadget(Gadget)
  If isMouseEventGadget(Gadget) = #False
    AddElement(MouseEvent_Gadget())
    MouseEvent_Gadget()\Gadget = Gadget
    MouseEvent_Gadget()\GadgetID = GadgetID(Gadget)
    MouseEvent_AddMouseButton(#PB_MouseButton_Left, #VK_LBUTTON)
    MouseEvent_AddMouseButton(#PB_MouseButton_Middle, #VK_MBUTTON)
    MouseEvent_AddMouseButton(#PB_MouseButton_Right, #VK_RBUTTON)
  EndIf
EndProcedure

Procedure RemoveMouseEventGadget(Gadget)
  ForEach MouseEvent_Gadget()
    If MouseEvent_Gadget()\Gadget = Gadget
      DeleteElement(MouseEvent_Gadget())
      Break
    EndIf
  Next
EndProcedure
Un exemple :

Code : Tout sélectionner

IncludeFile "MouseEvent.pbi"

Window = OpenWindow(#PB_Any, 0, 0, 200, 200, "Window", #PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If Window
  
  ContainerGadget = ContainerGadget(#PB_Any, 50, 50, 100, 100, #PB_Container_Flat)
    SetGadgetColor(ContainerGadget, #PB_Gadget_BackColor, #White)
    AddMouseEventGadget(ContainerGadget)
  CloseGadgetList()

  Repeat
    Event = WaitWindowEvent(1)
    If MouseEvent(Event)
      Select MouseEventGadget()
        Case ContainerGadget
          Select MouseEventType()
            Case #MouseEvent_EventType_Click
              Debug "Click : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_DoubleClick
              Debug "DoubleClick : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_Push
              Debug "Push : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_Release
              Debug "Release : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_Hover
              Debug "Hover"
            Case #MouseEvent_EventType_Leave
              Debug "Leave"
            Case #MouseEvent_EventType_Drag
              Debug "Drag : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_DragStart
              Debug "DragStart : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_DragStop
              Debug "DragStop : B"+Str(MouseEventButton())
            Case #MouseEvent_EventType_Move
              Debug "Move"
            Case #MouseEvent_EventType_WheelUp
              Debug "WheelUp"
            Case #MouseEvent_EventType_WheelDown
              Debug "WheelDown"
          EndSelect
      EndSelect
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Dernière modification par Atomo le lun. 28/mars/2011 18:08, modifié 4 fois.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: [Windows] MouseEvent

Message par Warkering »

J'en connais qui seront content! :mrgreen:
Merci beaucoup! :wink:
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [Windows] MouseEvent

Message par Patrick88 »

soyons tatillon, ne gère pas le clic du milieu, ni le défilement

à part ça, très bien.

à essayer sur mac

pat
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: [Windows] MouseEvent

Message par dayvid »

Salut !

J'ai pris ce code et quand je pourais, oui car la peut pas, PC MORT enfin disque dur
et ba je verais si je peut l'améliorer (déjà comprendre comment sa marche :mrgreen: )
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: [Windows] MouseEvent

Message par Atomo »

J'ai prit en compte vos suggestions, de nouveaux événements sont désormais disponibles :
- #MouseEvent_EventType_MiddleClick
- #MouseEvent_EventType_MiddleDoubleClick
- #MouseEvent_EventType_MiddleButtonPushed
- #MouseEvent_EventType_MiddleButtonReleased
- #MouseEvent_EventType_WheelUp
- #MouseEvent_EventType_WheelDown
Dernière modification par Atomo le dim. 27/mars/2011 0:08, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: [Windows] MouseEvent

Message par Kwai chang caine »

Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

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

Re: [Windows] MouseEvent

Message par Patrick88 »

merci pour l'ajout..

pat
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: [Windows] MouseEvent

Message par Atomo »

- Ajout des événements #MouseEvent_EventType_DragStart et #MouseEvent_EventType_DragStop.
- Le drag&Drop fonctionne avec tous les boutons de la souris maintenant.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: [Windows] MouseEvent

Message par dayvid »

J'ai repris les codes et testerais sa plus tard :)
mais frenchement, c'est pas mal du tous :D
merci beaucoup a toi Atomo :D
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: [Windows] MouseEvent

Message par flaith »

Merci pour le code Atomo :D
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [Windows] MouseEvent

Message par Patrick88 »

ne fonctionne pas sur mac, en cause les appels spécifique à l'api windows,

Code : Tout sélectionner

GetAsyncKeyState_(Button) & 32768
Window = WindowFromPoint_(MouseEvent_MouseY<<32|MouseEvent_MouseX)
snif

pat
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: [Windows] MouseEvent

Message par dayvid »

Salut :)

Heu j'ai un méga problème ici:

Attention, ce code fait complètement ramer l'ordi au bout d'un moment (quelques minutes)
et je ne comprends pas pourquoi 8O

je ne comprend pas pourquoi il mange constamment de la mémoire aussi :?

MouseEvent:

Code : Tout sélectionner

Enumeration
  #MouseEvent_EventType_Click
  #MouseEvent_EventType_DoubleClick
  #MouseEvent_EventType_Push
  #MouseEvent_EventType_Release
  #MouseEvent_EventType_Hover
  #MouseEvent_EventType_Leave
  #MouseEvent_EventType_Drag
  #MouseEvent_EventType_DragStart
  #MouseEvent_EventType_DragStop
  #MouseEvent_EventType_Move
  #MouseEvent_EventType_WheelUp
  #MouseEvent_EventType_WheelDown
EndEnumeration

Structure MouseEvent_MouseButton
  Button.b
  Key.i
  isPushed.b
  isDragged.b
  Timestamp.i
EndStructure

Structure MouseEvent_Gadget
  Gadget.i
  GadgetID.i
  MouseHover.b
  List MouseButton.MouseEvent_MouseButton()
EndStructure

Structure MouseEvent_EventStack
  Gadget.i
  EventType.b
  Button.b
EndStructure

Threaded NewList MouseEvent_Gadget.MouseEvent_Gadget()
Threaded NewList MouseEvent_EventStack.MouseEvent_EventStack()

Threaded MouseEvent_MouseX, MouseEvent_MouseY
Threaded MouseEventGadget, MouseEventType, MouseEventButton

Procedure isMouseButton(Button)
  If GetAsyncKeyState_(Button) & 32768
    ProcedureReturn #True
  EndIf
EndProcedure

Procedure SendMouseEvent(Gadget, EventType, Button)
  LastElement(MouseEvent_EventStack())
  AddElement(MouseEvent_EventStack())
  MouseEvent_EventStack()\Gadget = Gadget
  MouseEvent_EventStack()\EventType = EventType
  MouseEvent_EventStack()\Button = Button
EndProcedure

Procedure MouseEvent(WindowEvent)
  If DesktopMouseX() <> MouseEvent_MouseX Or DesktopMouseY() <> MouseEvent_MouseY
    MouseEvent_MouseX = DesktopMouseX() : MouseEvent_MouseY = DesktopMouseY()
    isMouseMoved = #True
  EndIf
  Window = WindowFromPoint_(MouseEvent_MouseY<<32|MouseEvent_MouseX)
  
  ForEach MouseEvent_Gadget()
    ;{ MouseHover
    If MouseEvent_Gadget()\GadgetID = Window
      If MouseEvent_Gadget()\MouseHover = #False
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Hover, 0)
        MouseEvent_Gadget()\MouseHover = #True
        ForEach MouseEvent_Gadget()\MouseButton()
          If MouseEvent_Gadget()\MouseButton()\isPushed = #False
            MouseEvent_Gadget()\MouseButton()\isPushed = -1
          EndIf
        Next
      EndIf
    Else
      If MouseEvent_Gadget()\MouseHover = #True
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Leave, 0)
        MouseEvent_Gadget()\MouseHover = #False
      EndIf
    EndIf
    ;}
    ;{ MouseButton
    ForEach MouseEvent_Gadget()\MouseButton()
      If isMouseButton(MouseEvent_Gadget()\MouseButton()\Key) = #True
        If MouseEvent_Gadget()\MouseHover = #True
          If MouseEvent_Gadget()\MouseButton()\isPushed = #False
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Push, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isPushed = #True
          EndIf
        EndIf
      Else
        If MouseEvent_Gadget()\MouseButton()\isPushed = #True
          If MouseEvent_Gadget()\MouseButton()\isDragged = #False
            If MouseEvent_Gadget()\MouseHover = #True
              If ElapsedMilliseconds()-MouseEvent_Gadget()\MouseButton()\Timestamp <= 500
                SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DoubleClick, MouseEvent_Gadget()\MouseButton()\Button)
                MouseEvent_Gadget()\MouseButton()\Timestamp = 0
              Else
                SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Click, MouseEvent_Gadget()\MouseButton()\Button)
                MouseEvent_Gadget()\MouseButton()\Timestamp = ElapsedMilliseconds()
              EndIf
            EndIf
          Else
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DragStop, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isDragged = #False
          EndIf
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Release, MouseEvent_Gadget()\MouseButton()\Button)
        EndIf
        MouseEvent_Gadget()\MouseButton()\isPushed = #False
      EndIf
    Next
    ;}
    ;{ MouseWheel
    If WindowEvent = #WM_MOUSEWHEEL
      If MouseEvent_Gadget()\MouseHover = #True
        If EventwParam() > 0
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_WheelUp, 0)
        Else
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_WheelDown, 0)
        EndIf
      EndIf
    EndIf
    ;}
    ;{ MouseMovement
    If isMouseMoved = #True
      ForEach MouseEvent_Gadget()\MouseButton()
        If MouseEvent_Gadget()\MouseButton()\isPushed = #True
          If MouseEvent_Gadget()\MouseButton()\isDragged = #False
            SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_DragStart, MouseEvent_Gadget()\MouseButton()\Button)
            MouseEvent_Gadget()\MouseButton()\isDragged = #True
          EndIf
          SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Drag, MouseEvent_Gadget()\MouseButton()\Button)
        EndIf
      Next
      If MouseEvent_Gadget()\MouseHover = #True
        SendMouseEvent(MouseEvent_Gadget()\Gadget, #MouseEvent_EventType_Move, 0)
      EndIf
    EndIf
    ;}
  Next
  
  ;Return Event
  If ListSize(MouseEvent_EventStack())
    FirstElement(MouseEvent_EventStack())
    MouseEventGadget = MouseEvent_EventStack()\Gadget
    MouseEventType = MouseEvent_EventStack()\EventType
    MouseEventButton = MouseEvent_EventStack()\Button
    DeleteElement(MouseEvent_EventStack())
    ProcedureReturn #True
  EndIf
EndProcedure

Procedure MouseEventGadget()
  ProcedureReturn MouseEventGadget
EndProcedure

Procedure MouseEventType()
  ProcedureReturn MouseEventType
EndProcedure

Procedure MouseEventButton()
  ProcedureReturn MouseEventButton
EndProcedure

Procedure isMouseEventGadget(Gadget)
  ForEach MouseEvent_Gadget()
    If MouseEvent_Gadget()\Gadget = Gadget
      ProcedureReturn #True
    EndIf
  Next
EndProcedure

Macro MouseEvent_AddMouseButton(_Button, _Key)
  AddElement(MouseEvent_Gadget()\MouseButton())
  MouseEvent_Gadget()\MouseButton()\Button = _Button
  MouseEvent_Gadget()\MouseButton()\Key = _Key
EndMacro

Procedure AddMouseEventGadget(Gadget)
  If IsGadget(Gadget)
  If isMouseEventGadget(Gadget) = #False
    AddElement(MouseEvent_Gadget())
    MouseEvent_Gadget()\Gadget = Gadget
    MouseEvent_Gadget()\GadgetID = GadgetID(Gadget)
    MouseEvent_AddMouseButton(#PB_MouseButton_Left, #VK_LBUTTON)
    MouseEvent_AddMouseButton(#PB_MouseButton_Middle, #VK_MBUTTON)
    MouseEvent_AddMouseButton(#PB_MouseButton_Right, #VK_RBUTTON)
  EndIf
  EndIf
EndProcedure

Procedure RemoveMouseEventGadget(Gadget)
  ForEach MouseEvent_Gadget()
    If MouseEvent_Gadget()\Gadget = Gadget
      DeleteElement(MouseEvent_Gadget())
      Break
    EndIf
  Next
EndProcedure
 
; jaPBe Version=3.10.9.849
; Build=0
; Language=0x0000 Language Neutral
; FirstLine=140
; CursorPosition=182
; EnableXP
; EnableOnError
; ExecutableFormat=Windows
; DontSaveDeclare
; EOF
et mon code:

Code : Tout sélectionner

    
    IncludeFile "MouseEvent.pbi"
    
    Global Ma_fenetre = 1
    Global Option_Ma_fenetre = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered
    Global Titre_Ma_fenetre$ = "Ma fenêtre"
    Global Position_X_Ma_fenetre = 351, Position_Y_Ma_fenetre = 299
    Global Largeur_Ma_fenetre = 500, Hauteur_Ma_fenetre = 300
    Global Delay = 1
    
    Global Mon_bouton_1 = 2
    Global Option_Mon_bouton_1 = 0
    Global Texte_Mon_bouton_1$ = "Bouton 1"
    Global Position_X_Mon_bouton_1 = 25, Position_Y_Mon_bouton_1 = 25
    Global Largeur_Mon_bouton_1 = 100, Hauteur_Mon_bouton_1 = 25
    
    Global Ma_liste_icon = 3
    Global Option_Ma_liste_icon = 0
    Global Titre_Ma_liste_icon$ = "Liste icon 1"
    Global Largeur_colonne_Ma_liste_icon = 100
    Global Position_X_Ma_liste_icon = 150, Position_Y_Ma_liste_icon = 25
    Global Largeur_Ma_liste_icon = 300, Hauteur_Ma_liste_icon = 200
    
    Global Mon_bouton_image_1 = 4
    Global Option_Mon_bouton_image_1 = 0
    Global Image_Mon_bouton_image_1 = 0
    Global Position_X_Mon_bouton_image_1 = 25, Position_Y_Mon_bouton_image_1 = 55
    Global Largeur_Mon_bouton_image_1 = 100, Hauteur_Mon_bouton_image_1 = 25
    
    Global EventGadget, EventGadget$, WindowID, EventTimer, GadgetID, EventType , EventType$, WindowOutput, IsWindow, WindowX, WindowY, WindowHeight
    Global WindowWidth, GetWindowState, GetWindowColor, WindowID, WindowTitle$, WindowMouseX, WindowMouseY, GadgetType
    
    Global Delay = 1
    
    Global NewList ListeGadget()
    Global NewList LargeurColonne.s()
    
    AddElement(ListeGadget())
    ListeGadget() = Mon_bouton_1
    AddElement(ListeGadget())
    ListeGadget() = Mon_bouton_image_1
    AddElement(ListeGadget())
    ListeGadget() = Ma_liste_icon
    
      Procedure OnMouseGadgetType(Gadget)
        If IsGadget(Gadget)
          GadgetType = GadgetType(Gadget)
          ProcedureReturn GadgetType
        EndIf
      EndProcedure
      
      Procedure.l IsMouseOverGadget() ; gestion du passge de la souris sur le gadget
        ForEach ListeGadget()
          If IsGadget(ListeGadget())
          GetWindowRect_(GadgetID(ListeGadget()),GadgetRect.RECT) 
          GetCursorPos_(mouse.POINT) 
          If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom
            ProcedureReturn ListeGadget()
          Else
            
          EndIf 
          EndIf
        Next ListeGadget()
      EndProcedure 
       
      Procedure.s GadgetTypeString(TypeGadget)
        
        If TypeGadget = #PB_GadgetType_Button
          TypeGadget$ = "Button"
        ElseIf TypeGadget = #PB_GadgetType_ButtonImage
          TypeGadget$ = "ButtonImage"
        ElseIf TypeGadget = #PB_GadgetType_Calendar
          TypeGadget$ = "Calendar"
        ElseIf TypeGadget = #PB_GadgetType_CheckBox 
          TypeGadget$ = "CheckBox"
        ElseIf TypeGadget = #PB_GadgetType_ComboBox
          TypeGadget$ = "ComboBox"
        ElseIf TypeGadget = #PB_GadgetType_Container
          TypeGadget$ = "Container"
        ElseIf TypeGadget = #PB_GadgetType_Date 
          TypeGadget$ = "Date"
        ElseIf TypeGadget = #PB_GadgetType_Editor
          TypeGadget$ = "Editor"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerCombo
          TypeGadget$ = "ExplorerCombo"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerList
          TypeGadget$ = "ExplorerList"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerTree
          TypeGadget$ = "ExplorerTree"
        ElseIf TypeGadget = #PB_GadgetType_Frame3D
          TypeGadget$ = "Frame3D"
        ElseIf TypeGadget = #PB_GadgetType_HyperLink 
          TypeGadget$ = "HyperLink"
        ElseIf TypeGadget = #PB_GadgetType_Image
          TypeGadget$ = "Image"
        ElseIf TypeGadget = #PB_GadgetType_IPAddress
          TypeGadget$ = "IPAddress"
        ElseIf TypeGadget = #PB_GadgetType_ListIcon
          TypeGadget$ = "ListIcon"
        ElseIf TypeGadget = #PB_GadgetType_ListView 
          TypeGadget$ = "ListView "
        ElseIf TypeGadget = #PB_GadgetType_MDI
          TypeGadget$ = "MDI"
        ElseIf TypeGadget = #PB_GadgetType_Option
          TypeGadget$ = "Option"
        ElseIf TypeGadget = #PB_GadgetType_Panel
          TypeGadget$ = "Panel"
        ElseIf TypeGadget = #PB_GadgetType_ProgressBar 
          TypeGadget$ = "ProgressBar"
        ElseIf TypeGadget = #PB_GadgetType_Scintilla
          TypeGadget$ = "Scintilla"
        ElseIf TypeGadget = #PB_GadgetType_ScrollArea
          TypeGadget$ = "ScrollArea"
        ElseIf TypeGadget = #PB_GadgetType_ScrollBar
          TypeGadget$ = "ScrollBar"
        ElseIf TypeGadget = #PB_GadgetType_Spin
          TypeGadget$ = "Spin"
        ElseIf TypeGadget = #PB_GadgetType_Splitter
          TypeGadget$ = "Splitter"
        ElseIf TypeGadget = #PB_GadgetType_String
          TypeGadget$ = "String"
        ElseIf TypeGadget = #PB_GadgetType_Text
          TypeGadget$ = "Text"
        ElseIf TypeGadget = #PB_GadgetType_TrackBar
          TypeGadget$ = "TrackBar"
        ElseIf TypeGadget = #PB_GadgetType_Tree
          TypeGadget$ = "Tree"
        ElseIf TypeGadget = #PB_GadgetType_Web 
          TypeGadget$ = "Web"
        ElseIf TypeGadget = #PB_GadgetType_Unknown
          TypeGadget$ = "Unknown"
        EndIf
        
        ProcedureReturn TypeGadget$ 
      EndProcedure
      
      Procedure.s ResultMouseEventGadget(MouseEvent, MouseEventGadget, MouseEventType, MouseEventButton, NumMouseOverGadget, GadgetTypestring$)
        
        If MouseEvent
          
          If  MouseEventGadget = NumMouseOverGadget
            
            If MouseEventType = #MouseEvent_EventType_Click
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "clique gauche souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "clique droit souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "clique centre souris sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_DoubleClick
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "double clique gauche souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "double clique droit souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "double clique centre souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Push
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "clique gauche souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "clique droit souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "clique centre souris apuiyer sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Release
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "clique gauche souris relacher sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "clique droit souris relacher sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "clique centre souris relacher sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Hover
              ResultMouseEventGadget$ =  "La souris est entrer sur le gadget [" + GadgetTypestring$ + "]"
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Leave
              ResultMouseEventGadget$ =  "La souris est sortie du gadget [" + GadgetTypestring$ + "]"
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Drag
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "drag bouton gauche souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "drag bouton droit souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "drag bouton centre souris sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_DragStart
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "début du Drag bouton gauche souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "début du Drag bouton droit souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "début du Drag bouton centre souris sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_DragStop
              If  MouseEventButton = 1
                ResultMouseEventGadget$ =  "fin du Drag bouton gauche souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 2
                ResultMouseEventGadget$ =  "fin du Drag bouton droit souris sur le Gadget [" + GadgetTypestring$ + "]"
              ElseIf  MouseEventButton = 3
                ResultMouseEventGadget$ =  "fin du Drag bouton centre souris sur le Gadget [" + GadgetTypestring$ + "]"
              Else
                
              EndIf
              
            ElseIf MouseEventType =  #MouseEvent_EventType_Move
              ResultMouseEventGadget$ =  "la souris bouge sur le Gadget [" + GadgetTypestring$ + "]"
              
            ElseIf MouseEventType =  #MouseEvent_EventType_WheelUp
              ResultMouseEventGadget$ =  "Molette souris haut sur le Gadget [" + GadgetTypestring$ + "]"
              
            ElseIf MouseEventType =  #MouseEvent_EventType_WheelDown
              ResultMouseEventGadget$ =  "Molette souris bas sur le Gadget [" + GadgetTypestring$ + "]"
              
            EndIf
            
          EndIf
          
        EndIf
        ProcedureReturn ResultMouseEventGadget$
      EndProcedure
      
      Procedure.s GetGadgetTypeAttribute(Gadget, GadgetType)
        If GadgetType = #PB_GadgetType_Button
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ButtonImage
          Attribus$ = "Image affichée par le bouton = " + Str(GetGadgetAttribute(Gadget, #PB_Button_Image))
          Attribus$ + ", Image affichée par le bouton lorsqu'il est enfoncé = " + Str(GetGadgetAttribute(Gadget, #PB_Button_PressedImage))
          
        ElseIf GadgetType = #PB_GadgetType_Calendar
          Attribus$ = "Date minimale que l'utilisateur peut choisir = " + Str(GetGadgetAttribute(Gadget, #PB_Calendar_Minimum))
          Attribus$ + ", Date maximale que l'utilisateur peut choisir = " + Str(GetGadgetAttribute(Gadget, #PB_Calendar_Maximum))
          
        ElseIf GadgetType = #PB_GadgetType_CheckBox 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ComboBox
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Container
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Date 
          Attribus$ = "Date minimale que l'utilisateur peut choisir = " + Str(GetGadgetAttribute(Gadget, #PB_Calendar_Minimum))
          Attribus$ + ", Date maximale que l'utilisateur peut choisir = " + Str(GetGadgetAttribute(Gadget, #PB_Calendar_Maximum))
          
        ElseIf GadgetType = #PB_GadgetType_Editor
          If GetGadgetAttribute(Gadget, #PB_Editor_ReadOnly) = 1
            Attribus$ = "Editable"
          Else
            Attribus$ = "Non editable"
          EndIf
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerCombo
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerList
          If GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_LargeIcon
            Attribus$ = "Mode grandes icônes"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_SmallIcon
            Attribus$ = "Mode petites icônes"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_List
            Attribus$ = "Mode Liste"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_Report
            Attribus$ = "Mode détails"
          EndIf
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerTree
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Frame3D
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_HyperLink 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Image
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_IPAddress
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ListIcon
          If GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_LargeIcon
            Attribus$ = "Mode grandes icônes"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_SmallIcon
            Attribus$ = "Mode petites icônes"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_List
            Attribus$ = "Mode Liste"
          ElseIf GetGadgetAttribute(Gadget, #PB_Explorer_DisplayMode) = #PB_Explorer_Report
            Attribus$ = "Mode détails"
          EndIf
          
        ElseIf GadgetType = #PB_GadgetType_ListView 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_MDI
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Option
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Panel
          Attribus$ = "Largeur du panel = " + Str(GetGadgetAttribute(Gadget, #PB_Panel_ItemWidth))
          Attribus$ + ", Hauteur du panel = " + Str(GetGadgetAttribute(Gadget, #PB_Panel_ItemHeight))
          Attribus$ + ", Hauteur des onglets du panel = " + Str(GetGadgetAttribute(Gadget, #PB_Panel_TabHeight))
          
        ElseIf GadgetType = #PB_GadgetType_ProgressBar 
          Attribus$ = "Valeur minimale = " + Str(GetGadgetAttribute(Gadget, #PB_ProgressBar_Minimum))
          Attribus$ + ", Valeur maximale = " + Str(GetGadgetAttribute(Gadget, #PB_ProgressBar_Maximum))
          
        ElseIf GadgetType = #PB_GadgetType_Scintilla
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ScrollArea
          Attribus$ = "Position horizontale en pixels actuelle de la bars = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollArea_X))
          Attribus$ + ", Position verticale en pixels actuelle de la bars = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollArea_Y))
          Attribus$ + ", Largeur en pixels de la zone interne du Gadget = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollArea_InnerWidth))
          Attribus$ + ", Hauteur en pixels de la zone interne du Gadget = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollArea_InnerHeight))
          
        ElseIf GadgetType = #PB_GadgetType_ScrollBar
          Attribus$ = "Position minimale de la bars = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollBar_Minimum))
          Attribus$ + ", Position maximale de la bars = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollBar_Maximum))
          Attribus$ + ", Longueur de la page = " + Str(GetGadgetAttribute(Gadget, #PB_ScrollBar_PageLength))
          
        ElseIf GadgetType = #PB_GadgetType_Spin
          Attribus$ = "Valeur minimale = " + Str(GetGadgetAttribute(Gadget, #PB_Spin_Minimum))
          Attribus$ + ", Valeur maximale = " + Str(GetGadgetAttribute(Gadget, #PB_Spin_Maximum))
          
        ElseIf GadgetType = #PB_GadgetType_Splitter
          Attribus$ = "Taille minimale en pixels que le premier Gadget associé peut avoir = " + Str(GetGadgetAttribute(Gadget, #PB_Splitter_FirstMinimumSize))
          Attribus$ + ", Taille minimale en pixels que le deuxième Gadget associé peut avoir = " + Str(GetGadgetAttribute(Gadget, #PB_Splitter_SecondMinimumSize))
          Attribus$ + ", Numéro du premier Gadget = " + Str(GetGadgetAttribute(Gadget, #PB_Splitter_FirstGadget))
          Attribus$ + ", Numéro du deuxième Gadget = " + Str(GetGadgetAttribute(Gadget, #PB_Splitter_SecondGadget))
          
        ElseIf GadgetType = #PB_GadgetType_String
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Text
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_TrackBar
          Attribus$ = "Valeur minimale = " + Str(GetGadgetAttribute(Gadget, #PB_TrackBar_Minimum))
          Attribus$ + ", Valeur maximale = " + Str(GetGadgetAttribute(Gadget, #PB_TrackBar_Maximum))
          
        ElseIf GadgetType = #PB_GadgetType_Tree
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Web 
          Attribus$ = "Position de la barre de défilement horizontale = " + Str(GetGadgetAttribute(Gadget, #PB_Web_ScrollX))
          Attribus$ + ", Position de la barre de défilement verticale = " + Str(GetGadgetAttribute(Gadget, #PB_Web_ScrollY))
          Attribus$ + ", Etas chargement de la page = " + Str(GetGadgetAttribute(Gadget, #PB_Web_Busy))
          Attribus$ + ", Progression actuelle = " + Str(GetGadgetAttribute(Gadget, #PB_Web_Progress))
          Attribus$ + ", Progression actuelle maximum = " + Str(GetGadgetAttribute(Gadget, #PB_Web_ProgressMax))
          Attribus$ + ", Paleur actuelle de l'attribut de blocage des fenêtres popup = " + Str(GetGadgetAttribute(Gadget, #PB_Web_BlockPopups))
          Attribus$ + ", Valeur actuelle de l'attribut de blocage du menu popup = " + Str(GetGadgetAttribute(Gadget, #PB_Web_BlockPopupMenu))
          Attribus$ + ", Valeur actuelle de la callback = " + Str(GetGadgetAttribute(Gadget, #PB_Web_NavigationCallback))
          
        ElseIf GadgetType = #PB_GadgetType_Unknown
          Attribus$ = "Inconnue"
          
        EndIf
        ProcedureReturn Attribus$
      EndProcedure
      
      Procedure.s GetGadgetItemTypeAttribute(Gadget, GadgetType)
        
        If GadgetType = #PB_GadgetType_Button
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ButtonImage
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Calendar
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_CheckBox 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ComboBox
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Container
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Date 
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Editor
          ItemAttribus$ = "Aucun"
          
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerCombo
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerList
          ItemAttribus$ = "Largeur de la Colonne = " + Str(GetGadgetItemAttribute(Gadget, Igniorer, #PB_Explorer_ColumnWidth , Colonne))
          
        ElseIf GadgetType = #PB_GadgetType_ExplorerTree
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Frame3D
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_HyperLink 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Image
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_IPAddress
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ListIcon
          ItemAttribus$ = "Largeur de la Colonne = " + Str(GetGadgetItemAttribute(Gadget, Igniorer, #PB_ListIcon_ColumnWidth , Colonne))
          
        ElseIf GadgetType = #PB_GadgetType_ListView 
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_MDI
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Option
          Attribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Panel
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ProgressBar 
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Scintilla
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ScrollArea
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_ScrollBar
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Spin
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Splitter
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_String
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Text
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_TrackBar
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Tree
          ItemAttribus$ = "Niveau actuel de l'élément dans l'arbre = " + Str(GetGadgetItemAttribute(Gadget, GetGadgetState(Gadget), #PB_Tree_SubLevel , Igniorer))
          
          
        ElseIf GadgetType = #PB_GadgetType_Web 
          ItemAttribus$ = "Aucun"
          
        ElseIf GadgetType = #PB_GadgetType_Unknown
          ItemAttribus$ = "Inconnue"
          
        EndIf
      EndProcedure
      
      Procedure GetSelectionColonne(Gadget, ColumnNomber)
        
        ClearList(LargeurColonne()) 
        Caracteristique_LargeurColonne$ = ""
        
        x = 0
        
        For Colonne = 0 To Nombre_colonne - 1
          
          AddElement(LargeurColonne())
          
          LargeurColonne() = "X = " + Str(x) + ", Largeur = " + Str(GetGadgetItemAttribute(Gadget, 0, #PB_ListIcon_ColumnWidth, Colonne))
          Caracteristique_LargeurColonne$ + LargeurColonne()
          
          x + GetGadgetItemAttribute(Gadget, 0, #PB_ListIcon_ColumnWidth, Colonne)
          
        Next
        
      EndProcedure
      
      Procedure.l GetColumnCount(Gadget)
        Colonne.LV_COLUMN\mask = #LVCF_WIDTH  
        Repeat  
          ColumnCount + 1
          Resulta = SendMessage_(GadgetID(Gadget),#LVM_GETCOLUMN,ColumnCount,@Colonne)  
        Until Resulta = 0 
        GetSelectionColonne(Gadget, ColumnCount)
        ProcedureReturn ColumnCount 
      EndProcedure  
      
      Procedure.l GetMouseColumnPosition(Windows)
        
        If WindowMouseY > GadgetY And WindowMouseY < (GadgetY + GadgetHeight) And WindowMouseX > GadgetX And WindowMouseX < (GadgetX  + GadgetWidth)
          
          Position_element = 0
          
          
          ForEach LargeurColonne()
            
            Position_element + 1
            
            Minimum$ = Mid(LargeurColonne(), 4, 4)
            RemoveString(Minimum$, ",", 0, 1)
            
            Maximum$ = Mid(LargeurColonne(), FindString(LargeurColonne(), "Largeur = ", 1) + 10)
            
            Minimum$ = RTrim(Minimum$)
            Maximum$ = RTrim(Maximum$)
            
            Minimum = Val(Minimum$)
            Maximum = Val(Maximum$)
            
            Maximum + Minimum
            
            If WindowMouseX(Windows) > GadgetX + Minimum + 2 And WindowMouseX(Windows) < GadgetX + Maximum + 2
              ProcedureReturn Position_element
            EndIf
            
          Next LargeurColonne()
          
        EndIf
        
      EndProcedure
      
      Procedure Ma_fenetre()
        OpenWindow(Ma_fenetre, Position_X_Ma_fenetre, Position_Y_Ma_fenetre, Largeur_Ma_fenetre, Hauteur_Ma_fenetre, Titre_Ma_fenetre$, Option_Ma_fenetre)
        ButtonGadget(Mon_bouton_1, Position_X_Mon_bouton_1, Position_Y_Mon_bouton_1, Largeur_Mon_bouton_1, Hauteur_Mon_bouton_1, Texte_Mon_bouton_1$, Option_Mon_bouton_1) 
        ButtonImageGadget(Mon_bouton_image_1, Position_X_Mon_bouton_image_1, Position_Y_Mon_bouton_image_1, Largeur_Mon_bouton_image_1, Hauteur_Mon_bouton_image_1, Image_Mon_bouton_image_1, Option_Mon_bouton_image_1) 
        ListIconGadget(Ma_liste_icon, Position_X_Ma_liste_icon, Position_Y_Ma_liste_icon, Largeur_Ma_liste_icon, Hauteur_Ma_liste_icon, Titre_Ma_liste_icon$, Largeur_colonne_Ma_liste_icon, Option_Ma_liste_icon)
        
        AddMouseEventGadget(Mon_bouton_1)
        AddMouseEventGadget(Mon_bouton_image_1)
        AddMouseEventGadget(Ma_liste_icon)
        
        Repeat
          
          Event = WaitWindowEvent(Delay)
          MouseEvent = MouseEvent(Event)
          MouseEventButton = MouseEventButton()
          MouseEventGadget = MouseEventGadget()
          MouseEventType = MouseEventType()
          WindowID = WindowID(Ma_fenetre)
          EventWindow = EventWindow()
          EventTimer = EventTimer()
          EventGadget = EventGadget()
          EventType = EventType()
          WindowOutput = WindowOutput(Ma_fenetre)
          IsWindow = IsWindow(Ma_fenetre)
          WindowX = WindowX(Ma_fenetre)
          WindowY = WindowY(Ma_fenetre) 
          WindowHeight = WindowHeight(Ma_fenetre)
          WindowWidth = WindowWidth(Ma_fenetre) 
          GetWindowState = GetWindowState(Ma_fenetre)
          GetWindowColor = GetWindowColor(Ma_fenetre)
          WindowTitle$ = GetWindowTitle(Ma_fenetre) 
          WindowMouseX = WindowMouseX(Ma_fenetre) 
          WindowMouseY = WindowMouseY(Ma_fenetre) 
          NumMouseOverGadget = IsMouseOverGadget()
          GadgetTypeLong = OnMouseGadgetType(NumMouseOverGadget)
          GadgetTypestring$ = GadgetTypeString(GadgetType)
          ResultMouseEventGadget$ = ResultMouseEventGadget(MouseEvent, MouseEventGadget, MouseEventType, MouseEventButton, NumMouseOverGadget, GadgetTypestring$)
          IsGadget = IsGadget(NumMouseOverGadget)
          
          If IsGadget
            GadgetID = GadgetID(NumMouseOverGadget)
            GadgetX = GadgetX(NumMouseOverGadget)
            GadgetY = GadgetY(NumMouseOverGadget)
            GadgetHeight = GadgetHeight(NumMouseOverGadget)
            GadgetWidth = GadgetWidth(NumMouseOverGadget)
            GadgetData = GetGadgetData(NumMouseOverGadget)
            GadgetItemData = GetGadgetItemData(NumMouseOverGadget, GetGadgetState(NumMouseOverGadget))
            CountGadgetItems = CountGadgetItems(NumMouseOverGadget)
            CountColumn = GetColumnCount(NumMouseOverGadget) 
            ColumnPosition = GetMouseColumnPosition(Ma_fenetre)
            GadgetAttribute$ = GetGadgetTypeAttribute(NumMouseOverGadget, GadgetTypeLong)
            GadgetItemAttribute$ = GetGadgetItemTypeAttribute(NumMouseOverGadget, GadgetTypeLong)
            GadgetFont = GetGadgetFont(NumMouseOverGadget)
            
          EndIf
          
          
          
          If ResultMouseEventGadget$ > ""
            Debug ResultMouseEventGadget$
          EndIf
          
          
        Until Event = #PB_Event_CloseWindow
      EndProcedure
          
      Ma_fenetre()
      
      
      
      
      
      
      
       
; jaPBe Version=3.10.9.849
; FoldLines=002C003100410086008800F000F20180018201E701E901FB01FD020502070227
; FoldLines=02290269
; Build=0
; Language=0x0000 Language Neutral
; FirstLine=21
; CursorPosition=59
; EnableXP
; EnableOnError
; ExecutableFormat=Windows
; DontSaveDeclare
; EOF
De plus quand je passe la souris sur le gadget, il le signiale mais pas quand j'en sort
sauf pour le premier bouton, pourquoi ? :?
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: [Windows] MouseEvent

Message par Atomo »

Pour ton problème de performance, c'est sûrement dû au nombre important de fonctions que tu appels en permanence dans ta boucle principale.
Concernant ton second problème, supprime la ligne 141 et ça devrait fonctionner.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: [Windows] MouseEvent

Message par dayvid »

Oki merci :D

Pourais tu m'aider stp pour améliorer mon code car je ne peut pas continuer :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: [Windows] MouseEvent

Message par Atomo »

Quel est le but de ton programme ?
Répondre