Interception de la touche <Entrée> et Form Designer

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

Interception de la touche <Entrée> et Form Designer

Message par François »

Bonjour,

J’utilise (en suivant les conseils délivrés sur ce forum) le « Form Designer » pour créer l’interface et cela fonctionne très bien sauf pour un détail.

Dans mon interface, j’ai un StringGadget pour saisir une chaîne de caractères et je veux lancer un traitement sur cette chaîne quand on appuie sur la touche Entrée.

Sur le forum, j’ai repéré et testé avec succès l’utilisation d’ « AddKeyboardShortcut » qui marche parfaitement si j’ajoute le code après coup dans le fichier « .PBF » mais les modifications disparaissent quand je bascule du mode « code » au mode « design ».

Quelqu’un connaitrait-il le super truc pour conserver les modifications dans le codes PBF ou pour intercepter l’action sur la touche Entrée dans le code du fichier « .PB » ?

Par avance merci,
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Interception de la touche <Entrée> et Form Designer

Message par Marc56 »

le « Form Designer » supprime à chaque bascule tout ce qu'il n'a pas généré lui-même.
C'est plus simple et rapide que de traiter tout ce que peut "inventer" l'utilisateur :mrgreen:

Seules les modification manuelles de contenu de chaine de caractères ou les valeurs numériques sont acceptées.

Pour ajouter un raccourci clavier (autre que pour les menus), tu mets la ligne
dans le code principal, après la commande OpenWindow_0()

Code : Tout sélectionner

XIncludeFile "... .pbf"
...
OpenWindow_0()
...
AddKeyboardShortcut(#Window_0, #PB_Shortcut_...
:wink:
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

Re: Interception de la touche <Entrée> et Form Designer

Message par François »

Merci Marc,

J'ai tenté ce que tu proposes mais je ne sais pas comment traiter l'interruption dans le code .PB.

J'ai fait de nombreux essais tous plus tordus les uns que les autres.

Cordialement.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Interception de la touche <Entrée> et Form Designer

Message par falsam »

Les explications de Marc sont pourtant claires.

Poste un code simple de ton formulaire pour qu'on puisse poster le code finale incluant l'interception de la touche entrée.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Interception de la touche <Entrée> et Form Designer

Message par Marc56 »

Le système est un peu bizarre à comprendre car il faut créer un menu même si on ne l'affiche pas 8)

Exemple

Test_Shortcut.pbf

Code : Tout sélectionner

;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;

Enumeration FormWindow
  #Window_0
EndEnumeration

Enumeration FormGadget
  #String_0
EndEnumeration


Procedure OpenWindow_0(x = 0, y = 0, width = 385, height = 65)
  OpenWindow(#Window_0, x, y, width, height, "Hello World", #PB_Window_SystemMenu)
  StringGadget(#String_0, 15, 20, 355, 25, "")
EndProcedure
Test_Shortcut.pb

Code : Tout sélectionner

XIncludeFile "Test_Shortcut.pbf"

Procedure OK()
     MessageRequester("Saisie", "Vous avez entré: " + #CRLF$ + GetGadgetText(#String_0))     
EndProcedure

OpenWindow_0()

CreateMenu(0, WindowID(0))
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15)

BindMenuEvent(0, 15, @OK())

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Enregistre ces deux fichiers dans le même répertoire
Lance le deuxième
Saisie du texte et valide l'entrée

:wink:
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Interception de la touche <Entrée> et Form Designer

Message par falsam »

Pas besoin de menu Marc. BindEvent(Event, @Callback() [, Window [, Object [, EventType]]])

Code : Tout sélectionner

...
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15)
BindEvent(#PB_Event_Menu, @OK(), 0, 15) ;0 : Constante de la fenetre 
...
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Interception de la touche <Entrée> et Form Designer

Message par Marc56 »

falsam a écrit :Pas besoin de menu Marc. BindEvent(Event, @Callback() [, Window [, Object [, EventType]]])
...
Super!
Merci falsam, je n'avais pas regardé de ce côté là 8)

@François
Variante si jamais tu utilises la méthode classique

Code : Tout sélectionner

XIncludeFile "Test_Shortcut.pbf"

OpenWindow_0()

CreateMenu(0, WindowID(0))
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15)

Repeat
     Select WaitWindowEvent()
               
          Case #PB_Event_CloseWindow
               Break
               
          Case #PB_Event_Menu
               Select EventMenu()
                    Case 15
                         MessageRequester("Saisie", 
                                          "Vous avez entré: " + 
                                          #CRLF$ + GetGadgetText(#String_0))   
               EndSelect
               
     EndSelect
ForEver
:wink:
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

Re: Interception de la touche <Entrée> et Form Designer

Message par François »

@Marc,

MERCI ! Cela fonctionne parfaitement comme je le souhaite.

J'avais tenté la création d'un menu dans le PB mais le truc du "BindMenuEvent", je n'y avais pas pensé.

La doc de PureBasic est particulièrement bien faite et j'admets que pour une question comme la mienne, il est difficile de l'anticiper. Donc vive les forums.

@falsam : cela fonctionne également et c'est plus simple et concis.

Encore merci, vous êtes des As.
Répondre