Bouton sélectionné (Avec un cadre autour)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Bouton sélectionné (Avec un cadre autour)

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

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