Page 1 sur 1

Bouton sélectionné (Avec un cadre autour)

Publié : ven. 22/avr./2005 11:11
par Le Soldat Inconnu
Salut

un petit exemple pour sélectionner un bouton (mettre un cadre autour)
Comme le bouton par défaut dans les messagerequester par exemple :wink:

Donc le code montre comment faire un bouton directement sélectionné et comment changer son état par la suite.
Ca marche avec les ButtonGadget et les ButtonImageGadget

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.93
;
; Explication du programme :
; Bouton sélectionné (Avec un cadre autour pour mettre le bouton en surbrillance)


; Création de la fenêtre principale
OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test")
CreateGadgetList(WindowID())

ButtonGadget(0, 10, 10, 200, 25, "Bouton 1", #BS_DEFPUSHBUTTON) ; Bouton sélectionné (avec un cadre autour)
Bouton0_Etat = 1

ButtonGadget(1, 10, 40, 200, 25, "Bouton 2")
Bouton1_Etat = 0

ButtonImageGadget(2, 10, 70, 200, 48, LoadIcon_(0, #IDI_APPLICATION))
Bouton2_Etat = 0

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_EventGadget
      Select EventGadgetID()
        Case 0 ; Bouton normal
          If Bouton0_Etat
            SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) & ~#BS_DEFPUSHBUTTON)
            ; Le bouton n'est plus sélectionné
            Bouton0_Etat = 0
          Else
            SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) | #BS_DEFPUSHBUTTON)
            ; Le bouton devient sélectionné
            Bouton0_Etat = 1
          EndIf
        Case 1
          If Bouton1_Etat
            SetWindowLong_(GadgetID(1), #GWL_STYLE, GetWindowLong_(GadgetID(1), #GWL_STYLE) & ~#BS_DEFPUSHBUTTON)
            Bouton1_Etat = 0
          Else
            SetWindowLong_(GadgetID(1), #GWL_STYLE, GetWindowLong_(GadgetID(1), #GWL_STYLE) | #BS_DEFPUSHBUTTON)
            Bouton1_Etat = 1
          EndIf
        Case 2 ; Bouton avec image
          If Bouton2_Etat
            SetWindowLong_(GadgetID(2), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE) & ~#BS_DEFPUSHBUTTON)
            Bouton2_Etat = 0
          Else
            SetWindowLong_(GadgetID(2), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE) | #BS_DEFPUSHBUTTON)
            Bouton2_Etat = 1
          EndIf
      EndSelect
      
  EndSelect
  
Until Event = #PB_EventCloseWindow

Publié : ven. 22/avr./2005 16:57
par Anonyme2
J'ai utilisé exactement le même code dans le truc que je code depuis plusieurs mois, mais j'ai du rafraichir les boutons car avec XP, le pourtour bleu ne s'effaçait pas tout de suite sur les boutons (car il ne sont pas activé à la souris).

En clair, j'ai plusieurs boutons et chaque fois que je clique sur un bouton je met le pourtour en bleu (ce qui permet de savoir ce qui a été choisi) et je supprime ce pourtour bleu de tous les boutons même si un seul était en fait le bouton par défaut (ce qui m'évite de tenir une variable à jour sur le bouton par défaut). Mais Ca n'était pas pris en compte tout de suite et j'ai utilisé RedrawWindow_() pour le faire (j'ai 27 boutons dont les ID sont stockés dans un tableau)

Code : Tout sélectionner

 For ty = 0 To 27
             If Event =  BoutonCst(ty)
                    SetWindowLong_(GadgetID(BoutonCst(ty)), #GWL_STYLE, GetWindowLong_(GadgetID(BoutonCst(ty)), #GWL_STYLE)|#PB_Button_Default)

             Else
                     SetWindowLong_(GadgetID(BoutonCst(ty)), #GWL_STYLE, GetWindowLong_(GadgetID(BoutonCst(ty)), #GWL_STYLE) &~#PB_Button_Default)
                                                                                          
                     RedrawWindow_(GadgetID(BoutonCst(ty)),0,0,7)
            EndIf
        Next ty