Page 1 sur 2

Ouvrir et fermer combo gadget

Publié : jeu. 27/août/2020 22:42
par omega
Bonjour,

Existe t-il un moyen de pouvoir ouvrir et fermer un combo box gadget (Cela me permet d'afficher la liste des produits qui commence par le ou les caractères saisis par l'utilisateur.)

Merci

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 7:15
par Shadow
Salut, je pense que tu as dû oublier de dire des choses...
Car tu sais qu'il suffis de cliquer sur la flèche non ?

Je ne connais pas de moyen de l'ouvrir autrement.
Pourquoi tu veux l'ouvrir autrement ?

Tu peu choisir l'élément avec un SetGadgetState()
mais tous ça tu le sais déjà non ?

Tous ça c'est dans l'aide de PB mon cher :)

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 7:34
par Marc56
omega a écrit : Existe t-il un moyen de pouvoir ouvrir et fermer un combo box gadget (Cela me permet d'afficher la liste des produits qui commence par le ou les caractères saisis par l'utilisateur.)
Avec les fonctions PB seules, non. Peut-être avec les API ?

Avec PB tu peux par contre sélectionner l'élément affiché (SetGadgetState) et aussi utiliser le clavier pour accéder directement aux éléments (à condition que le focus soit dessus (SetActiveGadget) et que le combo ne soit pas en mode édition (pas #PB_ComboBox_Editable)

Code : Tout sélectionner

OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(0, 10, 10, 250, 21)

For a = 1 To 5
    AddGadgetItem(0, -1, Chr(65 + a) + " Elément " + Str(a))
Next

SetActiveGadget(0)
SetGadgetState(0, 2)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
:wink:

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 7:43
par Micoute
La meilleure méthode est d'utiliser HideGadget(#Cmb, 1) pour le cacher et HideGadget(#Cmb, 0) pour le montrer, on ne peut pas faire plus simple.

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 7:50
par kernadec
bjr
ou utiliser "DisableGadget(#Gadget, State)" :mrgreen:

Cordialement

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 7:53
par Marc56
Je pense que ce que omega souhaite, c'est afficher le combo déroulé et positionné sur le premier élément qui correspond au choix automatiquement ? :wink:

Un peu comme le troisième sur la copie écran de l'aide.
Image

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 15:25
par venom
Moi j'ai compris comme marc56






@++

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 15:39
par Shadow
Micoute a écrit :La meilleure méthode est d'utiliser HideGadget(#Cmb, 1) pour le cacher et HideGadget(#Cmb, 0) pour le montrer, on ne peut pas faire plus simple.
ou utiliser "DisableGadget(#Gadget, State)"
Complètement à coté de la plaque papy :mrgreen:

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 17:38
par Micoute
C'est pourtant comme ça que je pratique et ça fonctionne très bien.

Re: Ouvrir et fermer combo gadget

Publié : ven. 28/août/2020 21:53
par GallyHC
Bonjour,

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(0, 10, 10, 250, 21, #PB_ComboBox_Editable)
  For a = 1 To 5
    AddGadgetItem(0, -1,"Elément de liste déroulante " + Str(a))
  Next
 
  ; A mettre pour l'ouverture du combo.
  SendMessage_(GadgetID(0),#CB_SHOWDROPDOWN, 1, 0)
  ; A mettre pour la fermeture du combo.
  ;SendMessage_(GadgetID(0),#CB_SHOWDROPDOWN, 0, 0)

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Cordialement,
GallyHC

Re: Ouvrir et fermer combo gadget

Publié : sam. 29/août/2020 0:29
par omega
Salut et merci à tous

Dommage que la plupart d'entre vous sont hors sujet (A Part GallyHC dont le code proposé fonctionne parfaitement)
Je m'explique encore une fois plus clairement cette fois:
Je voudrais ouvrir le combobox en codant en pb et le refermer aussi en codant (sans utiliser la souris). Pour cela, je vais essayer d'utiliser le code de GallyHC qui semble être la solution que je cherche. Merci quand même à tous et surtout à GallyHC pour le partage.

@GallyHC
Puis-je connaître la signification de ces 2 variables (x et y)?

Code : Tout sélectionner

SendMessage_(GadgetID(0),#CB_SHOWDROPDOWN, x,y)
Merci encore

Bonne continuation à tous

Re: Ouvrir et fermer combo gadget

Publié : sam. 29/août/2020 6:10
par Naheulf
Bah c'est juste la transposition en Purebasic de la fonction SendMessage() de la WinApi. En l’occurrence "x" correspond au paramètre "wParam" et y à "lParam".
Pour connaître l'(in)utilité de ces deux paramètres il faut aller voir la doc de CB_SHOWDROPDOWN

Re: Ouvrir et fermer combo gadget

Publié : sam. 29/août/2020 8:57
par GallyHC
Bonjour,

Pour les questions "Naheulf" à répondu. Par contre si cela est pour une utilisation clavier, pour que le combo soit actif directement, il faut lui donner le Focus (Voir code).

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(0, 10, 10, 250, 21, #PB_ComboBox_Editable)
  For a = 1 To 5
    AddGadgetItem(0, -1,"Elément de liste déroulante " + Str(a))
  Next
  ComboBoxGadget(1, 10, 36, 250, 21, #PB_ComboBox_Editable)
  
  ; Mettre le focus sur le combo.
  SetActiveGadget(0)

  ; A mettre pour l'ouverture du combo.
  SendMessage_(GadgetID(0),#CB_SHOWDROPDOWN, 1, 0)
  ; A mettre pour la fermeture du combo.
  ;SendMessage_(GadgetID(0),#CB_SHOWDROPDOWN, 0, 0)

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Cordialement,
GallyHC

Re: Ouvrir et fermer combo gadget

Publié : sam. 29/août/2020 9:10
par Micoute
Moi ma solution état:

Code : Tout sélectionner

ComboBoxAffichee.L = #True

OpenWindow(0, 0, 0, 270, 190, "Afficher/Cacher ComboBox", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
ComboBoxGadget(0, 10, 40, 250, 20, #PB_ComboBox_Editable) 
ButtonGadget(1, 70, 10, 120, 20, "Cacher ComboBox")
    
For i = 1 To 9
  AddGadgetItem(0, -1, "Entrée " + Str(i))
Next i
  
SetGadgetState(0, 6)

ComboBoxHandle = GadgetID(0)
ComboBoxEditControlHandle = GetWindow_(ComboBoxHandle, #GW_CHILD)

Repeat
  WindowEvent = WaitWindowEvent()

  If WindowEvent = #PB_Event_Gadget
    If EventGadget() = 1
      If ComboBoxAffichee
        HideGadget(0, #True)
        SetGadgetText(1, "Afficher ComboBox")
        EnableWindow_(ComboBoxEditControlHandle, #True)
        ComboBoxAffichee = #False
      Else
        HideGadget(0, #False)
        SetGadgetText(1, "Cacher ComboBox")
        ComboBoxAffichee = #True
      EndIf
    EndIf
  EndIf
Until WindowEvent = #PB_Event_CloseWindow

Re: Ouvrir et fermer combo gadget

Publié : sam. 29/août/2020 9:48
par venom
Non Micoute,
omega souhaite dérouler le combo pas le masqué :wink:

@GallyHC
par contre chez moi ton code me renvoie un blue circle :D






@++