Page 1 sur 1

La VirtualTable des gadgets

Publié : dim. 31/juil./2005 10:58
par Anonyme2
Fred,

je fais des essais avec la virtualTable des gadgets

Plusieurs questions:

1) PB appelle les fonctions à l'aide du pointeur *VirtualTable.GadgetFunctions, mais comment fait PB pour les fonctions qui ne sont pas dans cette structure (GadgetFunctions) ? Je n'ai rien vu dans le fichier PureBasic library descriptor.txt

C'est directement à partir des librairies comme pour les lib utilisateur ? sans que cela soit tenu dans une table ?

2) D'après quelques essais, si une fonction de la virtualTable n'existe pas, sa valeur est à 0 , c'est toujours vrai ?

exemple pour explorerListGadget qui n'a pas de commande SetGadgetItemState

3) CustomData et CustomData2 sont parfois utilisés parfois non, quel type de valeur est stocké dans ces long ? il y a une règle ou ça dépend des gadgets ? Par exemple pour l'explorerlistgadget, les 2 valeurs sont utilisées mais CustomData n'est pas utilisé pour les listiconGadget

4) comment ajouter de nouveaux gadgets dans cette Virtualtable ?

Je pense qu'il serait bien d'ajouter à la fin de la structure GadgetStructure un élément indiquant le type de gadget car pour plusieurs gadgets, le nom de la classe est indentique et il n'est pas forcément simple de retrouver le type de gadget à partir de l'ID static (j'ai déjà discuté de ça avec toi il y a quelque temps)

Code : Tout sélectionner

Structure PB_GadgetStructure
	  Gadget.l    ; OS Gadget pointer (HWND)
	  *VirtualTable.GadgetFunctions
	  CustomData.l  ; Can be used to store extra infos on this gadget
	  CustomData2.l ; Can be used to store extra infos on this gadget
	  GadgetType.l   ; le type de gadget de la liste des gadgets
EndStructure

Code : Tout sélectionner

Enumeration
      #PB_ButtonGadget = 1
      #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
EndEnumeration

Publié : sam. 20/août/2005 9:38
par lionel_om
Bonjour
Je recherche un moyen d'obtenir le type d'un gadget (pour savoir si c'est un bouton, un radio, une checkbox, etc...)
Est-ce que qq peut m'aider ? :oops:

Publié : sam. 20/août/2005 10:35
par gnozal
lionel_om a écrit :Bonjour
Je recherche un moyen d'obtenir le type d'un gadget (pour savoir si c'est un bouton, un radio, une checkbox, etc...)
Est-ce que qq peut m'aider ? :oops:
Pour obtenir la classe du gadget, c'est facile. Par contre, la correspondance classe <-> gadget n'est pas toujours évidente (plusieurs types de gadgets peuvent avoir la même classe)...

Code : Tout sélectionner

Procedure.s GetGadgetClass(hGadget.l) 
  Protected Class.s
  Class = Space(255)
  GetClassName_(hGadget, @Class, 254) 
  ProcedureReturn Class
EndProcedure

Debug GetGadgetClass(GadgetID(#Gadget)) 

Publié : sam. 20/août/2005 11:14
par lionel_om
Merci Gnozal :D

Publié : sam. 20/août/2005 11:40
par Anonyme2
Je travaille sur une librairie qui permettra de retourner le type de gadget en fonction du #Gadget car j'en ai besoin dans une autre librairie.

Ca marche pour quelques gadgets, je vais essayer de le faire pour tous.
Bon, j'avance doucement :D

Publié : sam. 20/août/2005 12:35
par lionel_om
Bon courage.
C'est vrai que ça pourrait être utile !!! :D

Publié : lun. 22/août/2005 8:10
par gnozal
Denis a écrit :Je travaille sur une librairie qui permettra de retourner le type de gadget en fonction du #Gadget car j'en ai besoin dans une autre librairie.
PureCOLOR utilise ce genre de procédure pour identifier le gadget et donc la méthode de coloriage, mais il est difficile de distinguer les gadgets de même classe, comme les boutons, checkbox etc...
C'est possible en utilisant les styles (un bouton n'aura pas les mêmes styles qu'un checkbox), mais je ne sais pas si c'est fiable dans 100% des cas.

Exemple de PolyVector :

Code : Tout sélectionner

        If (Style&#BS_GROUPBOX=#BS_GROUPBOX) 
          Type=#SkinGroupBox 
        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 
            Type=#SkinButton 
          Else 
            Type=#SkinCheckbox 
          EndIf 
          
        ElseIf (Style&#BS_RADIOBUTTON=#BS_RADIOBUTTON Or Style&#BS_AUTORADIOBUTTON=#BS_AUTORADIOBUTTON) 
          Type=#SkinRadio 
        ElseIf (Style&#BS_PUSHBUTTON=#BS_PUSHBUTTON Or Style&#BS_DEFPUSHBUTTON=#BS_DEFPUSHBUTTON) 
          Type=#SkinButton 
        EndIf
Ce qui fait que j'utilise une commande spéciale pour les boutons (pour l'instant).

Publié : lun. 22/août/2005 9:21
par Anonyme2
J'utilise aussi la même méthode dans mes librairies mais j'espère pouvoir distinguer les différents gadgets (je cherche encore une autre solution), seuls certains sont plus difficiles à séparer.

Je sépare déjà les listicongadget des ExplorerListgadgets, je vais surement utiliser la même méthode pour séparer les treegadget et l'explorertreegadget