La VirtualTable des gadgets

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

La VirtualTable des gadgets

Message 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
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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)) 
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Merci Gnozal :D
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 »

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
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Bon courage.
C'est vrai que ça pourrait être utile !!! :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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).
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Répondre