Fonction GetGadgetType : retrouver le type du gadget

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Fonction GetGadgetType : retrouver le type du gadget

Message par Anonyme2 »

Voici une seule fonction qui permet de retrouver le type de gadget dont on lui passe l'identifiant


L'identifiant peut-être l'identifiant statique du gadget ou le handle du gadget

Le 2eme paramètre de la fonction indique quel type d'identifiant est passé en 1er paramètre

_ Soit #PB_staticID pour l'id statique

Soit #PB_DynamicID pour le handle

La fonction retourne -1 si l'id ne correpond pas à un gadget sinon une des constantes définie dans la liste

Pour arriver à ce résultat, il a fallu passer par :
- trouver la class du gadget

lorsque plusieurs gadget ont la même class, j'ai séparé à l'aide de l'existance ou non des adresses de certaines fonctions de ces gadgets (avec l'aide de la table virtuelle des gadgets) pour 5 gadgets et pour certains gadgets, cela ne suffisait pas, j'ai délimité à l'aide des styles.

Pour séparer le TextGadget de l'HyperlinkGadget, j'ai utilisé la valeur $20000 du style mais je ne sais pas à quoi ça correspond (j'ai testé toutes les constantes de style de la classe 'Static' mais sans résultat)


J'espère ne pas avoir oublié de gadget


Code : Tout sélectionner

; Auteur : Denis, Forum Français
; Date : Janvier 2006
; Purebasic Version : jusqu'à la 3.94

; Description
; GetGadgetType(id, IdType)
; IdType : #PB_staticID ou #PB_DynamicID
; La commande permet de tester des gadgets en passant l'identifiant à tester (id)
; L'identifiant peut être l'id statique (#gadget)
; ou le handle (GadgetID(#gadget)
; L'id est le 1er paramètre de la fonction
; Le second paramètre indique le type du 1er paramètre
; #PB_staticID --> le 1er paramètre est l'id statique du gadget
; #PB_DynamicID --> le 1er paramètre est le handle du gadget


Enumeration
      #PB_ButtonGadget = 1
      #PB_ButtonImageGadget ; 2
      #PB_CalendarGadget ; 3
      #PB_CheckBoxGadget ; 4
      #PB_ComboBoxGadget ; 5
      #PB_ContainerGadget ; 6
      #PB_DateGadget ; 7
      #PB_EditorGadget ; 8
      #PB_ExplorerComboGadget ; 9
      #PB_ExplorerListGadget ; 10
      #PB_ExplorerTreeGadget ; 11
      #PB_Frame3DGadget ; 12
      #PB_HyperLinkGadget ; 13
      #PB_ImageGadget ; 14
      #PB_IPAddressGadget ; 15
      #PB_ListIconGadget ; 16
      #PB_ListViewGadget ; 17
      #PB_MDIGadget ; 18
      #PB_OptionGadget ; 19
      #PB_PanelGadget ; 20
      #PB_ProgressBarGadget ; 21
      #PB_ScrollAreaGadget ; 22
      #PB_ScrollBarGadget ; 23
      #PB_SpinGadget ; 24
      #PB_SplitterGadget ; 25
      #PB_StringGadget ; 26
      #PB_TextGadget ; 27
      #PB_TrackBarGadget ; 28
      #PB_TreeGadget ; 29
      #PB_WebGadget ; 30
EndEnumeration


Structure Place_Pile
      ZonePile.b[256] ; permet d'utiliser une zone de la pile de 256 octets
      ; pour stocker une chaîne de caractères directement
      ; sans passer par les commandes PB ni l'API
EndStructure


Structure GadgetFunctions
      FreeGadget.l
      GetGadgetState.l
      SetGadgetState.l
      GetGadgetText.l
      SetGadgetText.l
      AddGadgetItem.l
      AddGadgetItem2.l
      RemoveGadgetItem.l
      ClearGadgetItemList.l
      ResizeGadget.l
      CountGadgetItems.l
      GetGadgetItemState.l
      SetGadgetItemState.l
      GetGadgetItemText.l
      SetGadgetItemText.l
      OpenGadgetList2.l
      GadgetX.l
      GadgetY.l
      GadgetWidth.l
      GadgetHeight.l
      HideGadget.l
EndStructure


; Les class des différents gadgets

#PB_ListIconGadget_Class = "SysListView32"
#PB_ExplorerListGadget_Class = "SysListView32"
#PB_TreeGadget_Class = "SysTreeView32"
#PB_ExplorerTreeGadget_Class = "SysTreeView32"
#PB_ButtonGadget_Class = "Button"
#PB_ButtonImageGadget_Class = "Button"
#PB_CalendarGadget_Class = "SysMonthCal32"
#PB_CheckBoxGadget_Class = "Button"
#PB_ComboBoxGadget_Class = "ComboBox"
#PB_ContainerGadget_Class = "PureContainer"
#PB_DateGadget_Class = "SysDateTimePick32"
#PB_EditorGadget_Class = "RichEdit20A"
#PB_ExplorerComboGadget_Class = "ComboBoxEx32"
#PB_Frame3DGadget_Class = "Button"
#PB_HyperLinkGadget_Class = "Static"
#PB_ImageGadget_Class = "Static"
#PB_IPAddressGadget_Class = "SysIPAddress32"
#PB_ListViewGadget_Class = "ListBox"
#PB_MDIGadget_Class = "MDIClient"
#PB_OptionGadget_Class = "Button"
#PB_PanelGadget_Class = "SysTabControl32"
#PB_ProgressBarGadget_Class = "msctls_progress32"
#PB_ScrollAreaGadget_Class = "PureScrollArea"
#PB_ScrollBarGadget_Class = "ScrollBar"
#PB_SpinGadget_Class = "Edit"
#PB_SplitterGadget_Class = "PureSplitter"
#PB_StringGadget_Class = "Edit"
#PB_TextGadget_Class = "Static"
#PB_TrackBarGadget_Class = "msctls_trackbar32"
#PB_WebGadget_Class = "AtlAxWin"
#PB_StatusBar_Class = "msctls_statusbar32"


#erreur = -1

#BS_PUSHLIKE = $1000

#PB_staticID  = 0 ; indique que c'est l'id statique comme 1er paramètre
#PB_DynamicID = 1 ; indique que c'est le handle comme 1er paramètre



Procedure GetGadgetType(id, idType)
      ; id est l'id statique passé à tester
      ; retourne -1 si le l'identifiant n'est pas un identifiant d'un Gadget reconnu
      ; sinon retourne une des constantes suivantes
      
      ; #PB_ButtonGadget            
      ; #PB_ButtonImageGadget       
      ; #PB_CalendarGadget          
      ; #PB_CheckBoxGadget          
      ; #PB_ComboBoxGadget          
      ; #PB_ContainerGadget         
      ; #PB_DateGadget              
      ; #PB_EditorGadget            
      ; #PB_ExplorerComboGadget     
      ; #PB_ExplorerListGadget      
      ; #PB_ExplorerTreeGadget      
      ; #PB_Frame3DGadget           
      ; #PB_HyperLinkGadget         
      ; #PB_ImageGadget             
      ; #PB_IPAddressGadget         
      ; #PB_ListIconGadget          
      ; #PB_ListViewGadget          
      ; #PB_MDIGadget               
      ; #PB_OptionGadget            
      ; #PB_PanelGadget             
      ; #PB_ProgressBar             
      ; #PB_ProgressBarGadget       
      ; #PB_ScrollAreaGadget        
      ; #PB_ScrollBarGadget         
      ; #PB_SpinGadget              
      ; #PB_SplitterGadget          
      ; #PB_StringGadget            
      ; #PB_TextGadget              
      ; #PB_TrackBarGadget          
      ; #PB_TreeGadget              
      ; #PB_WebGadget               
      
      
      Protected resultat.l, Memoire.Place_Pile, *Table.GadgetFunctions, classe.s
      
      resultat = #erreur
      
      If idType = #PB_DynamicID
            If IsWindow_(id)
                  id = GetDlgCtrlID_(id)
            EndIf
      ElseIf idType <> #PB_staticID
            ProcedureReturn resultat
      EndIf
      
      *Table = IsGadget(id)
      If *Table
            ; on teste la longueur de la chaîne de la classe du gagdet
            Nb_Char = GetClassName_(GadgetID(id), Memoire, 256)
            If Nb_Char
                  classe = PeekS(Memoire)
                  
                  Select Nb_Char
                              
                        Case 4
                              ; comparaison avec "Edit"  pour SpinGadget ou StringGadget
                              If classe = "Edit"
                                    ; il n'y a pas de fonction GetGadgetState pour StringGadget
                                    ; la valeur stocké dans la table virtuelle des gadgets est 0 pour StringGadget
                                    *Table = PeekL(*Table + 4)
                                    If *Table\GetGadgetState
                                          resultat = #PB_SpinGadget
                                    Else
                                          resultat = #PB_StringGadget
                                    EndIf
                              EndIf
                              
                        Case 6
                              ; comparaison avec "Static" pour TextGadget ou ImageGadget ou HyperLinkGadget
                              If classe = "Static"
                                    ; il n'y a pas de fonction SetGadgetState pour TextGadget et HyperLinkGadget
                                    ; la valeur stocké dans la table virtuelle des gadgets est <> 0 pour ImageGadget
                                    *Table = PeekL(*Table + 4)
                                    If *Table\SetGadgetState
                                          resultat = #PB_ImageGadget
                                    ElseIf GetWindowLong_(GadgetID(id), #GWL_STYLE) & $20000
                                          resultat = #PB_TextGadget
                                    Else
                                          resultat = #PB_HyperLinkGadget
                                    EndIf
                                    ; comparaison avec "Button" pour ButtonGadget ou ButtonImageGadget
                                    ; ou CheckBoxGadget ou OptionGadget ou Frame3DGadget
                              ElseIf classe = "Button"
                                    *Table = PeekL(*Table + 4)
                                    ; avec la table virtuelle et les fonctions, on ne peut séparer
                                    ; que le ButtonImageGadget avec SetGadgetState()
                                    If *Table\SetGadgetState And * Table\GetGadgetState = 0
                                          resultat = #PB_ButtonImageGadget
                                    Else
                                          ; on différencie le reste avec les styles
                                          ; voir les posts ici mais j'ai modifié pour optiongadget
                                          ; http://forums.purebasic.com/english/viewtopic.php?t=14082
                                          ; http://forums.purebasic.com/english/viewtopic.php?t=11173
                                          
                                          Style = GetWindowLong_(GadgetID(id), #GWL_STYLE)
                                          If Style & #BS_GROUPBOX = #BS_GROUPBOX
                                                resultat = #PB_Frame3DGadget
                                          ElseIf Style & #BS_CHECKBOX = #BS_CHECKBOX Or Style & #BS_AUTOCHECKBOX = #BS_AUTOCHECKBOX Or Style & #BS_3STATE = #BS_3STATE Or Style & #BS_AUTO3STATE = #BS_AUTO3STATE
                                                If Style & #BS_PUSHLIKE = #BS_PUSHLIKE
                                                      resultat = #PB_ButtonGadget
                                                Else
                                                      resultat = #PB_CheckBoxGadget
                                                EndIf
                                          ElseIf Style & #BS_RADIOBUTTON = #BS_RADIOBUTTON Or Style & #BS_AUTORADIOBUTTON = #BS_AUTORADIOBUTTON
                                                If Style & #BS_PUSHLIKE = #BS_PUSHLIKE
                                                      resultat = #PB_ButtonGadget
                                                Else
                                                      resultat = #PB_OptionGadget
                                                EndIf
                                          ElseIf Style & #BS_PUSHBUTTON = #BS_PUSHBUTTON Or Style & #BS_DEFPUSHBUTTON = #BS_DEFPUSHBUTTON
                                                resultat = #PB_ButtonGadget
                                          EndIf
                                    EndIf
                              EndIf
                              
                        Case 7
                              ; comparaison avec "ListBox"  pour le ListViewGadget
                              If classe = #PB_ListViewGadget_Class
                                    resultat = #PB_ListViewGadget
                              EndIf
                              
                        Case 8
                              ; comparaison avec "ComboBox"  pour le ComboBoxGadget
                              If classe = #PB_ComboBoxGadget_Class
                                    resultat = #PB_ComboBoxGadget
                                    ; comparaison avec "AtlAxWin"   pour le WebGadget
                              ElseIf classe = #PB_WebGadget_Class
                                    resultat = #PB_WebGadget
                              EndIf
                              
                        Case 9
                              ; comparaison avec "MDIClient"  pour MDIGadget
                              If classe = #PB_MDIGadget_Class
                                    resultat = #PB_MDIGadget
                                    ; comparaison avec "ScrollBar"  pour le ScrollBarGadget
                              ElseIf classe = #PB_ScrollBarGadget_Class
                                    resultat = #PB_ScrollBarGadget
                              EndIf
                              
                        Case 11
                              ; comparaison "RichEdit20A" pour l'EditorGadget
                              If classe = #PB_EditorGadget_Class
                                    resultat = #PB_EditorGadget
                              EndIf
                              
                        Case 12
                              ; comparaison "ComboBoxEx32" pour le ExplorerComboGadget
                              If classe = #PB_ExplorerComboGadget_Class
                                    resultat = #PB_ExplorerComboGadget
                                    ; comparaison avec "PureSplitter"  pour le "SplitterGadget
                              ElseIf classe = #PB_SplitterGadget_Class
                                    resultat = #PB_SplitterGadget
                              EndIf
                              
                        Case 13
                              ; comparaison "SysMonthCal32" pour le calendargadget
                              If classe = #PB_CalendarGadget_Class
                                    resultat = #PB_CalendarGadget
                                    ; comparaison "PureContainer" pour le ContainerGadget
                              ElseIf classe = #PB_ContainerGadget_Class
                                    resultat = #PB_ContainerGadget
                                    ; comparaison "SysListView32" pour la ListIconGadget ou l'ExplorerListGadget
                              ElseIf classe = "SysListView32"
                                    ; il n'y a pas de fonction SetGadgetItemState pour l'ExplorerListGadget
                                    ; la valeur stocké dans la table virtuelle des gadgets est 0 pour l'ExplorerListGadget
                                    *Table = PeekL(*Table + 4)
                                    If *Table\SetGadgetItemState
                                          resultat = #PB_ListIconGadget
                                    Else
                                          resultat = #PB_ExplorerListGadget
                                    EndIf
                                    ; comparaison "SysTreeView32" pour le TreeGadget ou l'ExplorerTreeGadget
                              ElseIf classe = "SysTreeView32"
                                    ; il n'y a pas de fonction SetGadgetItemState pour l'ExplorerTreeGadget
                                    ; la valeur stocké dans la table virtuelle des gadgets est 0 pour l'ExplorerTreeGadget
                                    *Table = PeekL(*Table + 4)
                                    If *Table\SetGadgetItemState
                                          resultat = #PB_TreeGadget
                                    Else
                                          resultat = #PB_ExplorerTreeGadget
                                    EndIf
                              EndIf
                              
                        Case 14
                              ; comparaison "SysIPAddress32" pour l'IPAddressGadget
                              If classe = #PB_IPAddressGadget_Class
                                    resultat = #PB_IPAddressGadget
                                    ; comparaison avec "PureScrollArea"  pour le ScrollAreaGadget
                              ElseIf classe = #PB_ScrollAreaGadget_Class
                                    resultat = #PB_ScrollAreaGadget
                              EndIf
                              
                        Case 15
                              ; comparaison avec "SysTabControl32"   pour le PanelGadget
                              If classe = #PB_PanelGadget_Class
                                    resultat = #PB_PanelGadget
                              EndIf
                              
                        Case 17
                              ; comparaison "SysDateTimePick32" pour le DateGadget
                              If classe = #PB_DateGadget_Class
                                    resultat = #PB_DateGadget
                                    ; comparaison avec "msctls_progress32" pour la progressbar
                              ElseIf classe = #PB_ProgressBarGadget_Class
                                    resultat = #PB_ProgressBarGadget
                                    ; comparaison avec "msctls_trackbar32"   pour le TrackbarGadget
                              ElseIf classe = #PB_TrackBarGadget_Class
                                    resultat = #PB_TrackBarGadget
                              EndIf
                  EndSelect
            EndIf
      EndIf
      
      ProcedureReturn resultat
EndProcedure

un code d'essais avec tous les gadgets sauf le MDIgadget (je l'ai testé à part)
Il y a plusieurs lignes de debug en commentaires, il suffit de supprimer le ; devant ligne pour obtenir le résultat

Code : Tout sélectionner

; exemple

Enumeration
      #Window
      #Explorer
      #_ButtonGadget = 11
      #_ButtonImageGadget
      #_CalendarGadget
      #_CheckBoxGadget
      #_ComboBoxGadget
      #_ContainerGadget
      #_DateGadget
      #_EditorGadget
      #_ExplorerComboGadget ; 19
      #_ExplorerListGadget
      #_ExplorerTreeGadget
      #_Frame3DGadget
      #_HyperLinkGadget
      #_ImageGadget
      #_IPAddressGadget
      #_ListIconGadget
      #_ListViewGadget ; 27
      #_MDIGadget
      #_OptionGadget
      #_PanelGadget ; 30
      #_ProgressBarGadget
      #_ScrollAreaGadget
      #_ScrollBarGadget
      #_SpinGadget
      #_SplitterGadget
      #_StringGadget
      #_TextGadget ; 37
      #_TrackBarGadget
      #_TreeGadget
      #_WebGadget
EndEnumeration


If OpenWindow(#Window, 00, 00, 760, 650, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "")
      If CreateGadgetList(WindowID())
            CalendarGadget(#_CalendarGadget, 5, 130, 200, 200, 180)
            CreateImage(200, 24, 24)
            ButtonGadget(#_ButtonGadget, 10, 10, 100, 25, "Essai")
            ButtonImageGadget(#_ButtonImageGadget, 10, 40, 100, 25, UseImage(200))
            ExplorerListGadget(#_ExplorerListGadget, 120, 10, 200, 100, "C:\", #PB_Explorer_AutoSort | #PB_Explorer_NoDriveRequester | #PB_Explorer_MultiSelect | #PB_Explorer_FullRowSelect)
            ListIconGadget(#_ListIconGadget, 212, 130, 155, 100, "Nom", 140, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect)
            AddGadgetItem(#_ListIconGadget, -1, "ListIconGadget")
            ExplorerTreeGadget(#_ExplorerTreeGadget, 350, 10, 200, 100, "C:\", #PB_Explorer_AutoSort | #PB_Explorer_NoDriveRequester | #PB_Explorer_MultiSelect | #PB_Explorer_FullRowSelect)
            ExplorerComboGadget(#_ExplorerComboGadget, 570, 80, 150, 60, "C:\")
            TreeGadget(#_TreeGadget, 380, 130, 160, 100)
            AddGadgetItem(#_TreeGadget, -1, "TreeGadget")
            IPAddressGadget(#_IPAddressGadget, 10, 350, 155, 20)
            SetGadgetState(#_IPAddressGadget, MakeIPAddress(127, 0, 0, 1))
            ListViewGadget(#_ListViewGadget, 212, 243, 155, 90)
            AddGadgetItem(#_ListViewGadget, -1, "ListViewGadget")
            PanelGadget(#_PanelGadget, 380, 243, 160, 90)
                  AddGadgetItem(#_PanelGadget, 14, "PanelGadget")
            CloseGadgetList()
            ProgressBarGadget(#_ProgressBarGadget, 212, 343, 325, 30, 0, 100)
            SetGadgetState(#_ProgressBarGadget, 75)
            TrackBarGadget(#_TrackBarGadget, 10, 390, 200, 30, 0, 100)
            WebGadget(#_WebGadget, 10, 430, 740, 160, "C:\")
            DateGadget(#_DateGadget, 10, 600, 180, 25, "Date: %mm/%dd/%yyyy Time: %hh:%ii")
            EditorGadget(#_EditorGadget, 200, 600, 306, 33)
            
            StringGadget(#_StringGadget, 570, 10, 180, 20, "StrinGadget")
            ScrollAreaGadget(#_ScrollAreaGadget, 570, 140, 180, 60, 0, 100, 10)
            CloseGadgetList()
            ScrollBarGadget(#_ScrollBarGadget, 10, 70, 100, 25, 0, 100, 10 )
            
            ButtonGadget(110, 10, 10, 100, 25, "Bt1 SplitterGadget")
            ButtonGadget(111, 10, 40, 100, 25, "Bt2 SplitterGadget")
            SplitterGadget(#_SplitterGadget, 570, 220, 180, 80, 110, 111, #PB_Splitter_Separator)
            
            ContainerGadget(#_ContainerGadget, 570, 320, 180, 100, #PB_Container_Raised)
                  ButtonGadget(120, 10, 10, 130, 25, "Bt1 ContainerGadget")
                  ButtonGadget(121, 10, 40, 130, 25, "Bt2 ContainerGadget")
            CloseGadgetList()
            
            ImageGadget(#_ImageGadget, 310, 385, 30, 30, UseImage(200) )
            HyperLinkGadget(#_HyperLinkGadget, 225, 390, 50, 30, "HyperLink", 255)
            TextGadget(#_TextGadget, 480, 390, 70, 30, "TextGadget")
            
            Frame3DGadget(#_Frame3DGadget, 360, 390, 100, 125, "Frame3D")
            CheckBoxGadget(#_CheckBoxGadget, 10, 110, 50, 15, "Check")
            OptionGadget(#_OptionGadget, 80, 110, 50, 15, "Option")
            
            ComboBoxGadget(#_ComboBoxGadget, 570, 20, 180, 20)
            SpinGadget(#_SpinGadget, 570, 50, 180, 20, 1, 50)
            SetGadgetState (#_SpinGadget, 5) : SetGadgetText(#_SpinGadget, "5")
            
            ; Debug GetGadgetType(#_CalendarGadget, #PB_staticID)
             Debug GetGadgetType(#_HyperlinkGadget, #PB_staticID)
             Debug GetGadgetType(#_TextGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ListIconGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ExplorerListGadget, #PB_staticID)
            ; Debug GetGadgetType(#_TreeGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ExplorerTreeGadget, #PB_staticID)
            ; Debug GetGadgetType(#_IPAddressGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ListViewGadget, #PB_staticID)
            ; Debug GetGadgetType(#_PanelGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ProgressBarGadget, #PB_staticID)
            ; Debug GetGadgetType(#_TrackBarGadget, #PB_staticID)
            ; Debug GetGadgetType(#_WebGadget, #PB_staticID)
            ; Debug GetGadgetType(#_WebGadget, #PB_staticID)
            ; Debug GetGadgetType(#_StringGadget, #PB_staticID)
            ; Debug GetGadgetType(#_SpinGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ScrollAreaGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ScrollBarGadget, #PB_staticID)
            ; Debug GetGadgetType(#_SplitterGadget, #PB_staticID)
            ; Debug GetGadgetType(#_ContainerGadget, #PB_staticID)
            Repeat
                  event = WaitWindowEvent()
                  If event = #PB_EventCloseWindow
                        quit + 1
                  ElseIf event = #PB_EventGadget
                        If EventGadgetID() = #_SpinGadget
                              SetGadgetText(#_SpinGadget, Str(GetGadgetState(#_SpinGadget)))
                              WindowEvent()
                        EndIf
                        
                  EndIf
            Until quit
            
      EndIf
EndIf
End

Les limites :

Dans le cas des gadgets dont j'utilise les styles, il se pourrait lorsque l'on skin certains gadgets, de ne pas obtenir le bon résultat mais c'est même pas sur.
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message par CameleonTH »

Bon travail méme si je ne voit pas quand quelle K sa peut servir. :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

CameleonTH a écrit :Bon travail méme si je ne voit pas quand quelle K sa peut servir. :D
A faire parler :D

Je pense que certains seront interessés (utilisation dans les callback de librairies pour déterminer le type de gadget passé en paramètre, c'est pour ça que je l'ai écrite)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Si moi je m'en suis déjà servit (le code de Denis n'était alors pas complet).
Ca parmet par exemple de faire des librairie plus sûre sur la gestion des gadgets.

Par exemple j'avais fais des codes pour bien placer les trackbars où on avait exactement cliqué (ce que les commandes Windows ne font pas par défaut). ET avant d'effectuer des opérations quelconques qui aurait pu occasionner un plantage, je vérifiais que le gadget était bien une trackbar...

Cool ton code Denis, j'le pompe sur ma clé USB... :lol:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'ai pris une petite partie du code sur le forum anglais et j'ai modifié (pour cetains bouttons) et je me suis rendu compte que le test suivant n'est pas tout à fait juste et j'ai oublié de modifier

Code : Tout sélectionner

ElseIf Style & #BS_PUSHBUTTON = #BS_PUSHBUTTON Or Style & #BS_DEFPUSHBUTTON = #BS_DEFPUSHBUTTON
                                                resultat = #PB_ButtonGadget 
Style & #BS_PUSHBUTTON = #BS_PUSHBUTTON sera toujours vrai car #BS_PUSHBUTTON vaut 0 donc le et logique avec style vaut toujours 0 et forcément, c'est égal à #BS_PUSHBUTTON

Il faut changer comme ceci je pense

Code : Tout sélectionner

ElseIf Style = #BS_PUSHBUTTON Or Style & #BS_DEFPUSHBUTTON = #BS_DEFPUSHBUTTON
                                                resultat = #PB_ButtonGadget 
Comme il n'y a pas d'autre choix et que l'on est bien dans un gadget, ceci devrait fonctionner

Code : Tout sélectionner

Else
    resultat = #PB_ButtonGadget 
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

j'avais besoin d'un code similaire, mais plus court :?
j'ai pris 3 , 4 lignes d'un code fait par Chris appelé "gadget sous curseur"

Code : Tout sélectionner

GetCursorPos_(CurPos.POINT)
Handle = WindowFromPoint_(CurPos\x, CurPos\y)
hParent = GetParent_(Handle)
NameParent$ = Space(256)
GetClassName_(hParent, @NameParent$, 256)
inclure le code dans un case #wm_mousemove ou #WM_LBUTTONUP

c'est le NameParent$ qui est intéressant, car il renvoie :
PureContainer, PureScrollAreaChild....

pat
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chacun prend ce qui l'intéresse :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

@Patrick88
Je n'obtient pas le même résultat... Je parie que tu tournes sous XP <_<

La méthode de Denis est la meilleure pour le moment... L'idéal ce serait d'avoir ca en natif... (Qui sait, peut être même de nouveaux gadgets avec PB4 =)

Dri
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

Dr. Dri a écrit :@Patrick88
Je n'obtient pas le même résultat... Je parie que tu tournes sous XP <_<

La méthode de Denis est la meilleure pour le moment... L'idéal ce serait d'avoir ca en natif... (Qui sait, peut être même de nouveaux gadgets avec PB4 =)

Dri
mais exact, ce serait bien d'avoir une fonction intégrée ...

beuh ! moi ce qui m'interesse c'est de savoir si sous mon curseur j'ai un scrollarea ou autre chose, donc ce bout de code me convient...

ça marche avec 2000 et Xp ( thème win2000 )

patrick
Répondre