saisie d'un nouveau texte dans StringGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pasbel
Messages : 38
Inscription : mer. 10/avr./2019 17:36

saisie d'un nouveau texte dans StringGadget

Message par pasbel »

Salutatous

J'utilise dans mon code un StringGadget sous la forme :

Code : Tout sélectionner

StringGadget(1, 0, 0, 50, 20, "ROUGE")
Quand je clique sur le champs, avec #PB_Event_Gadget et EventGadget(), je reçois bien l'index de mon gadget.

Quand je modifie le texte, comment puis-je valider le nouveau texte saisi afin de pouvoir le récupérer ensuite avec GetGadgetText(1) ?
J'ai un peu chercher sur le forum, pas trouvé ou passé à côté...
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: saisie d'un nouveau texte dans StringGadget

Message par Marc56 »

Créer un raccourci clavier sur la touche Entrée avec AddKeyboardShortcut() et #PB_Shortcut_Return
ou créer un bouton [ Valider ] qui lit le contenu du gadget GetGadgetText(1)
pasbel
Messages : 38
Inscription : mer. 10/avr./2019 17:36

Re: saisie d'un nouveau texte dans StringGadget

Message par pasbel »

Merci de ta réponse.
Aucune possibilité de retour "live" de la nouvelle chaine de caractères du coup, dommage.
Je vais tenter un truc... (houlaaa !)
pasbel
Messages : 38
Inscription : mer. 10/avr./2019 17:36

Re: saisie d'un nouveau texte dans StringGadget

Message par pasbel »

Du coup, ma solution, car, je n'ai pas forcément besoin de savoir de suite ce qui a été tapé, dès qu'il y a un nouvel événement EventGadget(), je déclenche la lecture de mon champs.
Merci pour ton aide ;-)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: saisie d'un nouveau texte dans StringGadget

Message par Ar-S »

De façon automatique en surveillant les "changements"

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 322, 205, "Les options de StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(1, 8,  10, 306, 30, "ROUGE")
    Repeat 
        
        Event = WaitWindowEvent(10)
        
        Select Event
            Case #PB_Event_Gadget
                Select EventGadget()
                    Case 1
                        If EventType() = #PB_EventType_Change
                            Debug GetGadgetText(1)
                        EndIf 
                EndSelect
        EndSelect
        
    Until event = #PB_Event_CloseWindow
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: saisie d'un nouveau texte dans StringGadget

Message par Ollivier »

Je trouve très bien la soluce d'ArS. Je l'ai utilisé pour contrôler EditorGadget() donc très bonne approche.

Mais, pour un stringGadget je préfère la méthode de marc56 : c'est standardisé, côté client, et c'est contrôlable, côté codeur :

Add taratata ()
Remove taratata ()

Il y a beaucoup d'autres techniques : on peut blender les deux méthodes. Sur 3 stringGadgets A, B et C et un bouton Ok,

si B est changé, A est validé;
si C est changé, A et B sont validés;
si Ok est cliqué, ou la touche [Enter] est pressée, A, B et C sont validés.
pasbel
Messages : 38
Inscription : mer. 10/avr./2019 17:36

Re: saisie d'un nouveau texte dans StringGadget

Message par pasbel »

C'est effectivement plus souple puisque les caractère sont même pris au fur et à mesure.
Je n'arrivais pas à utiliser #PB_EventType_Change, peut-être un truc dans mon code qui le bloquait ou mal utilisé.

Merci beaucoup, je vais ré-essayer ainsi
pasbel
Messages : 38
Inscription : mer. 10/avr./2019 17:36

Re: saisie d'un nouveau texte dans StringGadget

Message par pasbel »

Si je rajoute la ligne "Debug Event" (voir code modifié ci-dessous), la console m'affiche 2 fois la valeur, y a-t-il une explication à ça ?
J'ai fait une petite routine pour éviter ça mais je me pose quand même la question...

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 322, 205, "Les options de StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StringGadget(1, 8,  10, 306, 30, "ROUGE")
  Repeat        
    Event = WaitWindowEvent(10)
        
      Select Event
        Case #PB_Event_Gadget
          Debug Event
          Select EventGadget()
            Case 1
              If EventType() = #PB_EventType_Change
                Debug GetGadgetText(1)
              EndIf 
          EndSelect
      EndSelect
        
  Until event = #PB_Event_CloseWindow
EndIf
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: saisie d'un nouveau texte dans StringGadget

Message par Ollivier »

Elle peut même te l'afficher 3 fois si tu as plusieurs gadgets :
1 fois pour acquérir le focus
1 fois pour le changement (ajout/modification/suppression) d'un caractère du texte
1 fois pour quitter le focus

Regarde l'aide de stringGadget, et tu trouveras les 2 autres constantes de types d'évènement dans la page d'aide.
Répondre