Le keyboard sans OpenScreen

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Le keyboard sans OpenScreen

Message 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 :

Code : Tout sélectionner

  ButtonGadget(#Button_02, 240, 250, 80, 20, "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 8)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

Re: Le keyboard sans OpenScreen

Message par Marc56 »

Oui, tout comme on peut utiliser le clavier pour appuyer sur la touche F1 :mrgreen:

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 :roll: )
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message par SPH »

Merci

Je regarderais ca quand je redémarrerais l'autre ordinateur :P

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message 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) 8O

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


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

Re: Le keyboard sans OpenScreen

Message 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
              ...
:wink:
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message par SPH »

Merci beaucoup 8)

(je n'y connais RIEN en WaitWindowEvent) :oops:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message par SPH »

Marche pas... :cry:
(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


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Le keyboard sans OpenScreen

Message par Ollivier »

Eh bien...

Je te conseillerai, entre OpenWindow() et
AddKeyboardShortcut() de rajouter
entre les deux
CreateMenu(100, WindowID(#Window_0) )
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message 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 :!:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Le keyboard sans OpenScreen

Message par Ollivier »

Poste ton code...
Avatar de l’utilisateur
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

Re: Le keyboard sans OpenScreen

Message par SPH »

Ollivier a écrit :Poste ton code...
https://www.purebasic.fr/french/viewtop ... 45#p207645

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Mindphazer
Messages : 700
Inscription : mer. 24/août/2005 10:42

Re: Le keyboard sans OpenScreen

Message par Mindphazer »

Dans ton code tu as ça :

Code : Tout sélectionner

EventID = WaitWindowEvent()
  If EventType() = #PB_Event_Menu
c'est ça qu'il faut écrire :

Code : Tout sélectionner

EventID = WaitWindowEvent()
  If EventID = #PB_Event_Menu
Ca marchera mieux
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

Re: Le keyboard sans OpenScreen

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Le keyboard sans OpenScreen

Message par Zorro »

sinon tu peux aussi utiliser les APIS windows :wink:


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
    






Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Le keyboard sans OpenScreen

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