Page 1 sur 2
Le keyboard sans OpenScreen
Publié : dim. 10/mai/2020 13:38
par SPH
Hi
Je bosse sur un code pour faire un client et un serveur. Je fais un tchat pour etre plus précis.
J'ai fais un bouton ENVOYER :
....mais je préférerais envoyer le message par l'appuie de la touche return.
J'ai bien tenté le ExamineKeyboard() mais il faut ouvrir un OpenScreen. Moi, j'utilise un OpenWindow.
Code : Tout sélectionner
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_02 ; on appuie sur le button envoyer
If nb_client=1
SendNetworkString(ConnectionID, pseudo$+" : "+GetGadgetText(#String_02), #PB_UTF8) ; on envoie le message au serveur
AddGadgetItem(#Editor_02, -1, pseudo$+" : "+GetGadgetText(#String_02), 0, 0) ; on affiche le message dans l'editor
SetGadgetText(#String_02, "") ; on vide le string
EndIf
EndSelect
EndIf
Est-ce possible d'utiliser la touche return ?
Thxxx

Re: Le keyboard sans OpenScreen
Publié : dim. 10/mai/2020 13:57
par Marc56
Oui, tout comme on peut utiliser le clavier pour appuyer sur la touche F1
AddKeyboardShortcut()
#PB_Shortcut_Return (Entrée)
Oui, la touche Entrée s'utilise comme un raccourci. Cela permet aussi par exemple quand on a une série de champs de faire passer d'un champs à l'autre sans utiliser Tab et aller plus vite. (J'en avais fais un exemple dans un autre topic, mais il a été nettoyé lors de l’allègement du sujet

)
Re: Le keyboard sans OpenScreen
Publié : dim. 10/mai/2020 15:29
par SPH
Merci
Je regarderais ca quand je redémarrerais l'autre ordinateur

Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 12:00
par SPH
Non, je n'y arrive pas. J'ai bien créé AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15) mais je n'ai pas réussi à utiliser la touche ENTRER. J'ai pataugé dans mes codes et j'ai meme failli tout perdre...
Si vous pouviez me donner un coup de main... (ligne 78 je pense)
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- gadgets Constants
Enumeration
#Server_01
#Editor_01
#String_01
#Button_01
EndEnumeration
pseudo$ = InputRequester("pseudo", "choisissez un pseudo", "Serveur")
If InitNetwork() = 0
MessageRequester("Erreur", "Impossible d'initialiser le réseau !", 0)
End
EndIf
Port = 6842 ; <--- port a ouvrir sur votre routeur en TCP
*Buffer = AllocateMemory(1000)
If CreateNetworkServer(#Server_01, Port) = 0
MessageRequester("Erreur", "Impossible de créer le serveur !", 0)
End
EndIf
MessageRequester("Serveur", "Serveur créé ( Port : "+Str(Port)+" TCP )", 0)
nb_client=0
If OpenWindow(#Window_0, 0, 0, 330, 280, "Serveur", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
EditorGadget(#Editor_01, 10, 10, 310, 230, #PB_Editor_ReadOnly)
StringGadget(#String_01, 10, 250, 220, 20, "")
ButtonGadget(#Button_01, 240, 250, 80, 20, "Envoyer")
EndIf
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15) ; <============== ca, c'est ok apparement
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case #PB_NetworkEvent_Connect ; verifie si un client se connecte
If nb_client=0
AddGadgetItem(#Editor_01, -1, "un client c'est connecter !!!", 0, 0) : nb_client=1
EndIf
Case #PB_NetworkEvent_Data ; verifie si un client envoie un message
length = ReceiveNetworkData(ClientID, *Buffer, 1000)
AddGadgetItem(#Editor_01, -1, PeekS(*Buffer, length, #PB_UTF8), 0, 0)
Case #PB_NetworkEvent_Disconnect ; verifie si un client se déconnecte
If nb_client=1
AddGadgetItem(#Editor_01, -1, "un client c'est déconnecter !!!", 0, 0) : nb_client=0
EndIf
EndSelect
EndIf
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_01 ; on appuie sur le button envoyer ; <=============== mon probleme est ici
If nb_client=1
SendNetworkString(ClientID, pseudo$+" : "+GetGadgetText(#String_01), #PB_UTF8) ; on envoie le message au client
AddGadgetItem(#Editor_01, -1, pseudo$+" : "+GetGadgetText(#String_01), 0, 0) ; on affiche le message dans l'editor
SetGadgetText(#String_01, "") ; on vide le string
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
CloseNetworkServer(#Server_01)
End
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 12:48
par Marc56
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15) ; <============== ca, c'est ok apparement
Et ton évènement 15 il est où ?
"
AddKeyboardShortcut()
...
Remarques
Un raccourci génère un évènement de type menu (comme le ferait un élément de menu)"
Code : Tout sélectionner
EventID = WaitWindowEvent()
If EventType() = #PB_Event_Menu
Select EventMenu()
Case 15
...

Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 12:59
par SPH
Merci beaucoup
(je n'y connais RIEN en WaitWindowEvent)

Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 13:27
par SPH
Marche pas...
(meme pas de "Beep_" donc, on n'entre jamais dans la case 15
Code : Tout sélectionner
EventID = WaitWindowEvent()
If EventType() = #PB_Event_Menu
Select EventMenu()
Case 15
Beep_(1500,50)
If nb_client=1
SendNetworkString(ClientID, pseudo$+" : "+GetGadgetText(#String_01), #PB_UTF8) ; on envoie le message au client
AddGadgetItem(#Editor_01, -1, pseudo$+" : "+GetGadgetText(#String_01), 0, 0) ; on affiche le message dans l'editor
SetGadgetText(#String_01, "") ; on vide le string
EndIf
EndSelect
EndIf
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_01 ; on appuie sur le button envoyer ; <=============== mon probleme est ici
If nb_client=1
SendNetworkString(ClientID, pseudo$+" : "+GetGadgetText(#String_01), #PB_UTF8) ; on envoie le message au client
AddGadgetItem(#Editor_01, -1, pseudo$+" : "+GetGadgetText(#String_01), 0, 0) ; on affiche le message dans l'editor
SetGadgetText(#String_01, "") ; on vide le string
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
CloseNetworkServer(#Server_01)
End
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 13:52
par Ollivier
Eh bien...
Je te conseillerai, entre OpenWindow() et
AddKeyboardShortcut() de rajouter
entre les deux
CreateMenu(100, WindowID(#Window_0) )
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 13:57
par SPH
Ollivier a écrit :Eh bien...
Je te conseillerai, entre OpenWindow() et
AddKeyboardShortcut() de rajouter
entre les deux
CreateMenu(100, WindowID(#Window_0) )
La touche RETURN ne marche toujours pas

Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 14:19
par Ollivier
Poste ton code...
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 14:20
par SPH
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 15:05
par Mindphazer
Dans ton code tu as ça :
c'est ça qu'il faut écrire :
Ca marchera mieux
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 15:16
par Marc56
Sans m'occuper de la partie réseau
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- gadgets Constants
Enumeration
#Server_01
#Editor_01
#String_01
#Button_01
EndEnumeration
pseudo$ = InputRequester("pseudo", "choisissez un pseudo", "Serveur")
If InitNetwork() = 0
MessageRequester("Erreur", "Impossible d'initialiser le réseau !", 0)
End
EndIf
Port = 6842 ; <--- port a ouvrir sur votre routeur en TCP
*Buffer = AllocateMemory(1000)
If CreateNetworkServer(#Server_01, Port) = 0
MessageRequester("Erreur", "Impossible de créer le serveur !", 0)
End
EndIf
MessageRequester("Serveur", "Serveur créé ( Port : "+Str(Port)+" TCP )", 0)
nb_client=0
If OpenWindow(#Window_0, 0, 0, 330, 280, "Serveur", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
EditorGadget(#Editor_01, 10, 10, 310, 230, #PB_Editor_ReadOnly)
StringGadget(#String_01, 10, 250, 220, 20, "")
ButtonGadget(#Button_01, 240, 250, 80, 20, "Envoyer")
SetActiveGadget(#String_01)
EndIf
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 15) ; <============== ca, c'est ok apparement
Procedure Envoyer()
Debug "Envoyer()"
If nb_client=1
SendNetworkString(ClientID, pseudo$+" : "+GetGadgetText(#String_01), #PB_UTF8) ; on envoie le message au client
AddGadgetItem(#Editor_01, -1, pseudo$+" : "+GetGadgetText(#String_01), 0, 0) ; on affiche le message dans l'editor
SetGadgetText(#String_01, "") ; on vide le string
Else
AddGadgetItem(#Editor_01, -1, "(Client non connecté !) " + GetGadgetText(#String_01))
SetGadgetText(#String_01, "")
EndIf
EndProcedure
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case #PB_NetworkEvent_Connect ; verifie si un client se connecte
If nb_client=0
AddGadgetItem(#Editor_01, -1, "un client s'est connecté !!!", 0, 0) : nb_client=1
EndIf
Case #PB_NetworkEvent_Data ; verifie si un client envoie un message
length = ReceiveNetworkData(ClientID, *Buffer, 1000)
AddGadgetItem(#Editor_01, -1, PeekS(*Buffer, length, #PB_UTF8), 0, 0)
Case #PB_NetworkEvent_Disconnect ; verifie si un client se déconnecte
If nb_client=1
AddGadgetItem(#Editor_01, -1, "un client s'est déconnecté !!!", 0, 0) : nb_client=0
EndIf
EndSelect
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Menu
Select EventMenu()
Case 15
Envoyer()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_01
Envoyer()
EndSelect
EndSelect
ForEver
CloseNetworkServer(#Server_01)
End
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 15:22
par Zorro
sinon tu peux aussi utiliser les APIS windows
Code : Tout sélectionner
; reactif si on appuis sur la touche return
Enumeration
#Win
EndEnumeration
If OpenWindow(#Win, 0, 0, 230, 90, "toto", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent(10)
Select EventWindow()
Case #Win ;
GetCursorPos_(Pos.POINT)
code=13 ; code Ascii du Return <--------------------------------------------------- le code de la touche
If GetAsyncKeyState_(code)
Debug "touche Return"
beep_(440,100)
Else
EndIf
Delay(300)
EndSelect
Until Event=#PB_Event_CloseWindow
EndIf
Re: Le keyboard sans OpenScreen
Publié : lun. 11/mai/2020 16:11
par Ollivier
Ah, c'est beau... C'est du grand art. C'est admirable. On remercie Marc56 et Zorro qui participent. Mais... Je me demande si le petit rappel de MindPhazer n'est pas déjà d'un grand secours... A suivre...