Page 1 sur 1

Comment savoir si un gadget est activé/désactivé ?

Publié : mar. 18/avr./2006 20:36
par Ulix
Bonjour a tous !

Tout est dans la question.

La commande DisableGadget() permet d'activé/désactivé un gadget !
Mais peut-on l'utilisé pour déterminé l'état du gadget ? Pas a ma connaissance ! Ai-je zappé une commande qui permet de le faire ?

J'ai pensé a : GetActiveGadget(), mais il ne renvoit que le Gadget qui a le 'focus', pas l'état d'un gadget !

Quel est la solution ? Une API ?

Réflexion faite, un GetDisableGadget(), qui renverait l'état (Activé/désactivé) du gadget serait utile !
Il faudrait alors renommé DisableGadget() en SetDisableGadget()
Qu'en pensez-vous ? :lol: C'a ferai la paire.

Pour mon problême, comment connaître l'état (Activé/désactivé) d'un gadget, si quelqu'un a une solution... Merci d'avance

Bs si

Publié : mar. 18/avr./2006 21:36
par meganet
Salut, GetActiveGadget() est la solution qu'il te faut. Il te renvois le gadget qui est activé justement. Après pour obtenir l'état d'un gadget, tout dépand de quel gadget. Tu à GetGadgetItemState() et GetGadgetState(). Regarde au niveau de ces 2 fonctions je pence que tu devrai y arriver avec ça.
Voilà @+++.

Publié : mer. 19/avr./2006 0:11
par Chris
Non, meganet.

Comme le dit Ulix, la commande GetActiveGadget() renvoie le gadget qui a le focus. (Il n'y a d'ailleurs pas de paramètre qu'on puisse passer pour tester l'état d'un gadget en particulier).

Pour tester l'état d'un gadget (Actif / Inactif), il faut passer par l'api avec la fonction IsWindowEnabled_(GadgetID(#Gadget))

Un exemple

Code : Tout sélectionner

#Win = 0
Enumeration
  #Btn_0
  #Btn_1
  #Str_0
  #Str_1
  #Rad_0
  #Rad_1
  #IPA_0
  #IPA_1
  #Chk_0
  #Chk_1
  #Cmb_0
  #Cmb_1
  
  #Pnl_0
EndEnumeration

If OpenWindow(#Win, 332, 309, 250, 226, "Disable/enable buttons...",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
  
  If CreateGadgetList(WindowID(#Win))
    ButtonGadget(#Btn_0, 5, 5, 230, 20, "Bouton 0") : DisableGadget(#Btn_0, 1)
    ButtonGadget(#Btn_1, 5, 25, 230, 20, "Bouton 1")
    StringGadget(#Str_0, 5, 50, 230, 20, "StringGadget 0") : DisableGadget(#Str_0, 1)
    StringGadget(#Str_1, 5, 75, 230, 20, "StringGadget 1")
    PanelGadget(#Pnl_0, 5, 100, 240, 115)
    AddGadgetItem(#Pnl_0, 1, "Tab 1")
    OptionGadget(#Rad_0, 8, 13, 80, 20, "Radio 0") : DisableGadget(#Rad_0, 1)
    OptionGadget(#Rad_1, 8, 38, 80, 20, "Radio 1")
    IPAddressGadget(#IPA_0, 8, 63, 105, 20) : DisableGadget(#IPA_0, 1)
    IPAddressGadget(#IPA_1, 123, 63, 105, 20)
    CheckBoxGadget(#Chk_0, 113, 13, 115, 20, "Check 0") : DisableGadget(#Chk_0, 1)
    CheckBoxGadget(#Chk_1, 113, 38, 115, 15, "Check 1")
    AddGadgetItem(#Pnl_0, 2, "Tab 2")
    ComboBoxGadget(#Cmb_0, 8, 8, 220, 20) : DisableGadget(#Cmb_0, 1)
    ComboBoxGadget(#Cmb_1, 8, 33, 220, 20)
    CloseGadgetList()
  EndIf
  
  AddGadgetItem(#Cmb_0, -1, "Combo 0") : SetGadgetState(#Cmb_0, 0)
  AddGadgetItem(#Cmb_1, -1, "Combo 1") : SetGadgetState(#Cmb_1, 0)
  SetGadgetState(#IPA_0, MakeIPAddress(0, 0, 0, 0)) 
  SetGadgetState(#IPA_1, MakeIPAddress(1, 1, 1, 1)) 
  
  If IsWindowEnabled_(GadgetID(#Btn_0)) : Msg1$  = "Bouton 0 Actif"  : Else : Msg1$  = "Bouton 0 Inactif" : EndIf
  If IsWindowEnabled_(GadgetID(#Btn_1)) : Msg2$  = "Bouton 1 Actif"  : Else : Msg2$  = "Bouton 1 Inactif" : EndIf
  If IsWindowEnabled_(GadgetID(#Str_0)) : Msg3$  = "String 0 Actif"  : Else : Msg3$  = "String 0 Inactif" : EndIf
  If IsWindowEnabled_(GadgetID(#Str_1)) : Msg4$  = "String 1 Actif"  : Else : Msg4$  = "String 1 Inactif" : EndIf
  If IsWindowEnabled_(GadgetID(#Rad_0)) : Msg5$  = "Radio 0 Actif"   : Else : Msg5$  = "Radio 0 Inactif"  : EndIf
  If IsWindowEnabled_(GadgetID(#Rad_1)) : Msg6$  = "Radio 1 Actif"   : Else : Msg6$  = "Radio 1 Inactif"  : EndIf
  If IsWindowEnabled_(GadgetID(#IPA_0)) : Msg7$  = "IP 0 Actif"      : Else : Msg7$  = "IP 0 Inactif"     : EndIf
  If IsWindowEnabled_(GadgetID(#IPA_1)) : Msg8$  = "IP 1 Actif"      : Else : Msg8$  = "IP 1 Inactif"     : EndIf
  If IsWindowEnabled_(GadgetID(#Chk_0)) : Msg9$  = "Check 0 Actif"   : Else : Msg9$  = "Check 0 Inactif"  : EndIf
  If IsWindowEnabled_(GadgetID(#Chk_1)) : Msg10$ = "Check 1 Actif"   : Else : Msg10$ = "Check 1 Inactif"  : EndIf
  If IsWindowEnabled_(GadgetID(#Cmb_0)) : Msg11$ = "Combo 0 Actif"   : Else : Msg11$ = "Combo 0 Inactif"  : EndIf
  If IsWindowEnabled_(GadgetID(#Cmb_1)) : Msg12$ = "Combo 1 Actif"   : Else : Msg12$ = "Combo 1 Inactif"  : EndIf
  
  MessageRequester("Etat des Gadgets", Msg1$+#lf$+Msg2$+#lf$+Msg3$+#lf$+Msg4$+#lf$+Msg5$+#lf$+Msg6$+#lf$+Msg7$+#lf$+Msg8$+#lf$+Msg9$+#lf$+Msg10$+#lf$+Msg11$+#lf$+Msg12$)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Publié : mer. 19/avr./2006 21:38
par Ulix
Merci Chris :lol:

Tu a tout a fait compris mon problême !

Merci pour la démo.

Pourrait-on faire une demande (ou une suggestion) pour que Fred nous developpe une nouvelle commande qui renverait l'état (Activé/désactivé) d'un gadget. Je pense que cela serait bien utile.

J'ai écrit précedement :
Réflexion faite, un GetDisableGadget(), qui renverait l'état (Activé/désactivé) du gadget serait utile !
Il faudrait alors renommé DisableGadget() en SetDisableGadget()
Je pense même que l'on pourrait applique cela aussi a la commande HideGadget()
Un GetHideGadget(), qui renverait l'état (Caché/Non caché) d'un gadget.
Et renommé HideGadget() en SetHideGadget ()

Fred si tu lis ces lignes dit moi ce que tu en pense. :idea:
Merci d'avance de me répondre !

Merci encore a toi Chris :lol:

Publié : mer. 19/avr./2006 22:06
par Chris
Ou simplement par GetGadgetState() qui pourrait renvoyer une ou plusieurs constantes dans le genre:
#Pb_Gadget_Active
#Pb_Gadget_Inactive
#Pb_Gadget_Enabled
#Pb_Gadget_Disabled

Publié : mer. 19/avr./2006 22:06
par Flype
en attendant avec les macros c'est largement faisable :

Code : Tout sélectionner

Macro SetHideGadget(gadget,state)
  HideGadget(gadget,state)
EndMacro
Macro GetHideGadget(gadget)
  (#True-IsWindowVisible_(GadgetID(gadget)))
EndMacro
Macro SetDisableGadget(gadget,state)
  DisableGadget(gadget,state)
EndMacro
Macro GetDisableGadget(gadget)
  (#True-IsWindowEnabled_(GadgetID(gadget)))
EndMacro

Publié : mer. 19/avr./2006 22:07
par Flype
Chris a écrit :Ou simplement par GetGadgetState() qui pourrait renvoyer une ou plusieurs constantes dans le genre:
#Pb_Gadget_Active
#Pb_Gadget_Inactive
#Pb_Gadget_Enabled
#Pb_Gadget_Disabled
Ou plutot GetGadgetAttribute() :wink:

Publié : mer. 19/avr./2006 22:13
par Chris
Tu met des macros partout toi!

Tu serais pas un peu poissonnier, à l'origine :lol:

Publié : mer. 19/avr./2006 22:17
par Ulix
L'une ou l'autre des solutions me conviennent.

Bien que j'ai un faible pour :
Ou simplement par GetGadgetState() qui pourrait renvoyer une ou plusieurs constantes dans le genre:
#Pb_Gadget_Active
#Pb_Gadget_Inactive
#Pb_Gadget_Enabled
#Pb_Gadget_Disabled
Je ne suis pas trop familiarisé avec les macros, je préfére donc les commande plus traditionnelles.
Ce que je voudrais maintenant c'est que Fred en es connaissance et qu'il puis nous dire s'il peut nous faire ça, ou au moins qu'il y songe !!

Publié : mer. 19/avr./2006 22:30
par Flype
Chris a écrit :Tu met des macros partout toi!

Tu serais pas un peu poissonnier, à l'origine :lol:
arrêtes je déteste le poisson en plus - surtout l'odeur - pouark :D

@Ulix
Je t'assure les macros c hyper-simple.
voici le fichier resident à mettre dans purebasic/resident/ : GadgetEx.res
en 2 secondes c'est fait : ouvre une console, et tapes :
>C:\Purebasic4\Compilers\PBCompiler.exe /RESIDENT "C:\Purebasic4\Residents\GadgetEx.res" "C:\GadgetEx.res.pb"

mais bon j'insiste pas - c'est vrai que la proposition de chris est intéressante.

Publié : mer. 19/avr./2006 23:03
par Ulix
Flype a écrit
mais bon j'insiste pas - c'est vrai que la proposition de chris est intéressante.
Si, si insiste... C'est vrai que je devrais m'y mettre, je devrais y consacré un peu de temps... (Où j'ai mis ma machine a trouvé du temps) :lol:
en 2 secondes c'est fait : ouvre une console, et tapes :
>C:\Purebasic4\Compilers\PBCompiler.exe /RESIDENT "C:\Purebasic4\Residents\GadgetEx.res" "C:\GadgetEx.res.pb"
A quoi serve ces instruction ? A crée un résidents ?
C'est un moyen d'ajouté des commandes au PB ?
Explique voir un peu ! :oops: Je suis largué !

Publié : mer. 19/avr./2006 23:32
par Ulix
@Flype

Je crois avoir compris ! Peut-être pas tous, mais je avance... (dans l'inconnu) :mad:

J'ai copier les 4 macros que tu a faite, enregistrer sous : "GadgetEx.res.pb"

Je suis passé en ligne de commande sous XP, et après avoir changé les chemins,

C:\Basic\Compilers>PBCompiler.exe /RESIDENT "C:\basic\Residents\GadgetEx.res" "C
:\basic\GadgetEx.res.pb"


Apparement la commande lance la compilateur avec option /RESIDENT,
le nom du fichier en sortie, et le nom du fichier en entrée.

J'ai obtenu ces lignes, et donc je pense que le résident a bien été créer

******************************************
PureBasic v4.00 - Beta 11 (Windows - x86)
******************************************

Compiling C:\basic\GadgetEx.res.pb
Loading external libraries...
Starting compilation...

Resident 'C:\basic\Residents\GadgetEx.res' created.

C:\Basic\Compilers>PBCompiler.exe /RESIDENT "C:\basic\Residents\GadgetEx.res" "C
:\basic\GadgetEx.res.pb"
Maintenant il me reste a comprendre comment les utilisées.
Je te tiendrais au courant de mes progrés...

Merci Flype :P

Publié : jeu. 20/avr./2006 0:46
par Flype
oui c'est bien çà ulix t'as tout compris.
maintenant place le fichier .res généré dans le dossier purebasic/resident/ et redémarre le compilateur. maintenant les commandes sont reconnues dans pure. mais attention cette fonctionnalité forte intéressante ne fonctionne qu'avec des sources n'ayant que des structures / énumérations / macros dedans. pas de procédures. car pour les procédures c'est une toute autre histoire ( dll, userlib, tailbite, ... ). bref, on ne place dans un resident que des données pouvant être précompilées.

:wink: