Inkey() et KeyboardInkey()
Inkey() et KeyboardInkey()
Bonjour à toutes et tous,
Je souhaite utiliser l'équivalent de la fonction Inkey() ou KeyboardInkey() mais uniquement avec une fenêtre Windows.
1) Inkey() ne fonctionne qu'en mode Console
2) KeyboardInkey() exige d'avoir une fenêtre OpenScreen() ou OpenWindowScreen()
Or je ne veux avoir qu'une fenêtre OpenWindow()
Comment saisir un caractère à la volée dans ce cas ?
Merci pour votre aide.
Je souhaite utiliser l'équivalent de la fonction Inkey() ou KeyboardInkey() mais uniquement avec une fenêtre Windows.
1) Inkey() ne fonctionne qu'en mode Console
2) KeyboardInkey() exige d'avoir une fenêtre OpenScreen() ou OpenWindowScreen()
Or je ne veux avoir qu'une fenêtre OpenWindow()
Comment saisir un caractère à la volée dans ce cas ?
Merci pour votre aide.
Re: Inkey() et KeyboardInkey()
Bonsoir jak64,
Soit tu réaffecte tout le clavier avec AddKeyboardShortcut() le temps de la saisie.
Soit tu analyse la dernière lettre saisie dans un gadget à chaque changement (#PB_EventType_Change) sur un gadget.
Soit tu réaffecte tout le clavier avec AddKeyboardShortcut() le temps de la saisie.
Soit tu analyse la dernière lettre saisie dans un gadget à chaque changement (#PB_EventType_Change) sur un gadget.
Re: Inkey() et KeyboardInkey()
Bonjour marc56,
Merci de ta réponse, cela me confirme donc qu'il n'y a pas d'équivalent Inkey() pour une fenêtre Windows.
Je vais donc me rabattre en créant une fenêtre OpenWindowedScreen(), ce sera le plus simple pour ce que je veux faire.
Bonne soirée
Merci de ta réponse, cela me confirme donc qu'il n'y a pas d'équivalent Inkey() pour une fenêtre Windows.
Je vais donc me rabattre en créant une fenêtre OpenWindowedScreen(), ce sera le plus simple pour ce que je veux faire.
Bonne soirée
Re: Inkey() et KeyboardInkey()
@jak64
Marc56, que je salue est fatigué : soit ci, soit ça.
Ça manque d'une tonalité ouverte, laissant libre l'esprit de quêter.
T'as d'autres méthodes : Dans ce topic, j'avais publié une API Windows. En une seule fonction, t'as tout le clavier, les boutons de souris compris. C'était il y a 14 ans. Avec la fascination d'avoir cherché sans imaginer être surpris par Flype qui connaissait cette API avec 4 ans d'avance.
Si tu veux être multi-plateforme (Windows+Linux), tu peux aussi créer un canvas d'un pixel : il y a tous les états de touches disponibles en temps réel, ceux de la souris y compris, la molette y compris. Comme ton canvas fait un pixel, ça ne bouffe pas de ressources.
J'adore le "screen" mais si tu as commencé un projet avec la GUI du bureau, et que tu intègres un screen fenêtré uniquement pour ça, ça perdra le bon sens de Purebasic : faire des exécutables légers avec le moins possible de fichiers dépendants. Ça peut démotiver.
Tu prends la doc et tu trouves les extraits suivant :KeyUp et KeyDown sont affiliés à un scancode clavier :Conclusion : soit canvas_key pour un scancode clavier (tu veux capter une ou plusieurs touches spécifiques);
Soit canvas_input pour une saisie clavier : la touche A te renvoie un A etc...
@marc56
Désolé d'être casse-grelot.
Marc56, que je salue est fatigué : soit ci, soit ça.
Ça manque d'une tonalité ouverte, laissant libre l'esprit de quêter.
T'as d'autres méthodes : Dans ce topic, j'avais publié une API Windows. En une seule fonction, t'as tout le clavier, les boutons de souris compris. C'était il y a 14 ans. Avec la fascination d'avoir cherché sans imaginer être surpris par Flype qui connaissait cette API avec 4 ans d'avance.
Si tu veux être multi-plateforme (Windows+Linux), tu peux aussi créer un canvas d'un pixel : il y a tous les états de touches disponibles en temps réel, ceux de la souris y compris, la molette y compris. Comme ton canvas fait un pixel, ça ne bouffe pas de ressources.
J'adore le "screen" mais si tu as commencé un projet avec la GUI du bureau, et que tu intègres un screen fenêtré uniquement pour ça, ça perdra le bon sens de Purebasic : faire des exécutables légers avec le moins possible de fichiers dépendants. Ça peut démotiver.
Tu prends la doc et tu trouves les extraits suivant :
Code : Tout sélectionner
#PB_EventType_Focus : Le gadget a obtenu le focus clavier
#PB_EventType_LostFocus : Le gadget a perdu le focus clavier
#PB_EventType_KeyDown(*) : Une touche clavier a été pressée
#PB_EventType_KeyUp(*) : Une touche clavier a été relâchée
#PB_EventType_Input(*) : Du texte a été entré dans le gadget
Code : Tout sélectionner
- #PB_Canvas_Key : Renvoie la touche du clavier qui a été enfoncée ou relâchée après un évènement #PB_EventType_KeyDown ou un évènement #PB_EventType_KeyUp et
la valeur retournée est l'une des constantes #PB_Shortcut_ ... qui sont utilisées par la fonction AddKeyboardShortcut().
Note: Cet attribut renvoie la première touche pressée.
Note: Pour obtenir un texte saisi au clavier dans le Canvasgadget, il est préférable d'utiliser l'évènement #PB_EventType_Input
avec l'attribut #PB_Canvas_Input, car il permet la saisie de texte à partir d'une combinaison de plusieurs touches telles
que la touche 'Shift' et autres touches muettes.
Soit canvas_input pour une saisie clavier : la touche A te renvoie un A etc...
@marc56
Désolé d'être casse-grelot.
Re: Inkey() et KeyboardInkey()
Bonjour Olivier,
Merci pour ton message mais comme je ne pratique Purebasic que depuis quelques mois, je n'ai pas compris.
J'ai copié le code de ton topic dans l'éditeur de Purebasic et, quand je le lance, il m'affiche une grille et rien ne se passe si j'appuie sur une touche.
Merci de me guider.
Cordialement,
Merci pour ton message mais comme je ne pratique Purebasic que depuis quelques mois, je n'ai pas compris.
J'ai copié le code de ton topic dans l'éditeur de Purebasic et, quand je le lance, il m'affiche une grille et rien ne se passe si j'appuie sur une touche.
Merci de me guider.
Cordialement,
Re: Inkey() et KeyboardInkey()
En fait, je voudrais détecter uniquement l'appui sur ces 4 touches :
m
q
Return
Esc
m
q
Return
Esc
Re: Inkey() et KeyboardInkey()
Regarde l'aide sur le canvas. J'ai mis le lien de la page. Le canvas est le plus souple et complet des objets de la GUI. Je me lève dans 4 heures donc je ne peux pas être productif maintenant...
Re: Inkey() et KeyboardInkey()
Bonsoir,
Juste pour te faire une idée.
cage
Code : Tout sélectionner
#WinApp=10
Enumeration Keys
#KeyEnter
#KeyM
#KeyQ
#KeyEscape
EndEnumeration
Flags = #PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SystemMenu
If OpenWindow(#WinApp, 100, 100, 500, 400, "Windows", Flags)
CanvasGadget(0, 0, 0, 500, 400, #PB_Canvas_Keyboard)
AddKeyboardShortcut(#WinApp, #PB_Shortcut_M , #KeyM)
AddKeyboardShortcut(#WinApp, #PB_Shortcut_Q , #KeyQ)
AddKeyboardShortcut(#WinApp, #PB_Shortcut_Return, #KeyEnter)
AddKeyboardShortcut(#WinApp, #PB_Shortcut_Escape, #KeyEscape)
Repeat
Event = WaitWindowEvent(20)
Select Event
Case #PB_Event_Menu
indexMenu = EventMenu()
Select indexMenu
Case #KeyM : Debug "M"
Case #KeyQ : Debug "Q"
Case #KeyEnter : Debug "Entée"
Case #KeyEscape : Debug "Escape"
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Inkey() et KeyboardInkey()
Bonjour cage,
Merci beaucoup, c'est exactement ce que je souhaitais et je pense que c'est plus rapide que d'être obligé d'avoir une fenêtre screen avec un test KeyboardInkey() dans la boucle.
Merci beaucoup, c'est exactement ce que je souhaitais et je pense que c'est plus rapide que d'être obligé d'avoir une fenêtre screen avec un test KeyboardInkey() dans la boucle.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Inkey() et KeyboardInkey()
l'exemple de Cage fonctionne aussi sans l'utilisation du canvas ^^
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Inkey() et KeyboardInkey()
Bonjour Falsam,
Effectivement, j'ai testé sans le canvas et ça fonctionne aussi.
merci.
Effectivement, j'ai testé sans le canvas et ça fonctionne aussi.
merci.
Re: Inkey() et KeyboardInkey()
Bonjour,
Petite question subsidiaire.
Comment définir ce qu'est un canvas ? Une zone de dessin ? l'équivalent d'une petite fenêtre ? une surface définie ? etc...
Autant je comprends ce que sont d'autres gadgets (bouton, zones de listes, calendrier, etc), autant j'ai du mal à appréhender "canvas".
La définition de l'aide Ce gadget offre une surface de dessin sans canal alpha et d'évènements pour la souris et le clavier dans le but de créer facilement des affichages personnalisées n'est pas très claire pour moi.
Merci de votre explication.
Petite question subsidiaire.
Comment définir ce qu'est un canvas ? Une zone de dessin ? l'équivalent d'une petite fenêtre ? une surface définie ? etc...
Autant je comprends ce que sont d'autres gadgets (bouton, zones de listes, calendrier, etc), autant j'ai du mal à appréhender "canvas".
La définition de l'aide Ce gadget offre une surface de dessin sans canal alpha et d'évènements pour la souris et le clavier dans le but de créer facilement des affichages personnalisées n'est pas très claire pour moi.
Merci de votre explication.
Re: Inkey() et KeyboardInkey()
Bonjour,
Le CanvasGadget est une surface de dessin qui peut-être interactive avec l'utilisateur en cours de programme, contrairement à l'ImageGadget où le contenu est créé uniquement par le programme.
Le Canvas a aussi beaucoup plus de fonctions, comme déterminer l'emplacement d'un clic de souris et le maintient enfoncé des boutons etc, là ou L'imageGadget ne peut déterminer que s'il est cliqué ou reçoit un élément par Drag-and-Drop.
L'exemple de la doc montre bien ce qu'on peut faire avec
https://www.purebasic.com/french/docume ... et.pb.html
Le CanvasGadget est une surface de dessin qui peut-être interactive avec l'utilisateur en cours de programme, contrairement à l'ImageGadget où le contenu est créé uniquement par le programme.
Le Canvas a aussi beaucoup plus de fonctions, comme déterminer l'emplacement d'un clic de souris et le maintient enfoncé des boutons etc, là ou L'imageGadget ne peut déterminer que s'il est cliqué ou reçoit un élément par Drag-and-Drop.
L'exemple de la doc montre bien ce qu'on peut faire avec
https://www.purebasic.com/french/docume ... et.pb.html
Re: Inkey() et KeyboardInkey()
Merci Marc,
Je pense avoir compris, par exemple, je peux dessiner dans cette zone avec ma souris même lorsque le programme s'exécute. C'est le mot lui-même (canvas) qui me troublait. C'est une "zone de dessin interactive", cette définition est plus claire pour moi.
Je pense avoir compris, par exemple, je peux dessiner dans cette zone avec ma souris même lorsque le programme s'exécute. C'est le mot lui-même (canvas) qui me troublait. C'est une "zone de dessin interactive", cette définition est plus claire pour moi.
Re: Inkey() et KeyboardInkey()
Bonjour,
Par contre, on ne peut pas utiliser de Sprites dans un canvas, c'est bien ça ?
Merci
Par contre, on ne peut pas utiliser de Sprites dans un canvas, c'est bien ça ?
Merci