Gadgets

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gilles robert
Messages : 24
Inscription : jeu. 15/avr./2004 14:56

Gadgets

Message par gilles robert »

Je suis un débutant sur Pure Basic et voudrai savoir ou trouver des exemples de programmes pour pouvoir me familiariser avec cette langue.
Mon interet va surtout sur les gadgets.

A ce propos une question plus précise:
Comment peut-on recuperer le texte d'un StringGadget et quitter celui-ci après un 'RETURN' sans avoir besoin de l'aide d'un ButtonGadget?

Merci d'avance de votre aide.

Gilles
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

...et quitter celui-ci après un 'RETURN' sans avoir besoin de l'aide d'un ButtonGadget?
Qu'est-ce que tu veux dire par là?

Quitter le gadget pour aller sur un autre, par exemple. tu as plusieurs champs, et à chaque fois que tu tapes Entree, tu vas sur le suivant?

Ou bien, tu ouvres une fenêtre fille avec un champ de saisie, tu récupères le texte, tu l'affiches dans la fenêtre principale, et tu ferme la fenêtre fille?


Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Voici un code:

Très important, il faut que le string soit multiligne, sinon on ne récupère pas l'évènement de la touche ENTER.

A chaque appui sur la touche ENTER, on affiche le contenu du STRING dans le debugger.Maintenant, si tu veux en plus donner le focus a un autre Gadget, utilise ActivateGadget(#Gadget) .

Code : Tout sélectionner

  Enumeration
    #Window
    #STRING1
  EndEnumeration

  Procedure ProcedureCallback(WindowID, Message, wParam, lParam) 
    Resultat = #PB_ProcessPureBasicEvents 
    Select Message
      Case #WM_COMMAND
        Select lParam
          Case GadgetID(#STRING1)
          a.l=wParam>>16
            If a=1281
              Debug GetGadgetText(#STRING1)
            EndIf
        EndSelect 
    EndSelect
    ProcedureReturn Resultat 
  EndProcedure 
  
  
  If OpenWindow(#Window,0,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Pure Basic")
    CreateGadgetList(WindowID(#Window))
    StringGadget(#STRING1,8, 10,306,20,"Normal StringGadget...",#PB_String_MultiLine) 
    
    SetWindowCallback(@ProcedureCallback()) 
    
    Repeat
      EventID.l=WaitWindowEvent()
      Select EventID
        
        Case #PB_EventGadget
          Select EventGadgetID()
            Case #STRING1
              ;LE RESTE DU TRAITEMENT ICI
          EndSelect
          
        Case #WM_CLOSE
          Quit=1
      EndSelect 
    Until Quit=1 
  EndIf 
:)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

...il faut que le string soit multiligne, sinon on ne récupère pas l'évènement de la touche ENTER...
8O

Désolé de te contredire, mais le string n'a pas besoin d'être multiligne, tout au moins sur XP!

voilà un code qui fonctionne, sans multiligne, et sans callback!

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Saisie
EndEnumeration

;- Création de la fenêtre et des gadgets
If OpenWindow(#Window_0, 300, 300, 300, 40, #PB_Window_SystemMenu, "Fenêtre 1",0)
  If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#Saisie,10,10,280,20,"Bienvenue dans le monde de PureBasic")
    ActivateGadget(#Saisie) ; Active le premier champ à l'ouverture
  EndIf
  
  ;- Boucle principale
  Repeat
    Select WaitWindowEvent()
      
      ;- Evenements de clavier
      Case #WM_KEYDOWN; Détecte l'appui sur une touche
        Select EventwParam()
          Case #VK_RETURN; appui sur la touche Entree
            ActivateGadget(#Saisie)
            Debug GetGadgetText(#Saisie)
        EndSelect
        
        ;- Fermeture de la fenêtre
      Case #PB_EventCloseWindow : quit = 1
        
    EndSelect
  Until quit = 1
  End
EndIf
:wink:

Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est nettement mieux...et je suis heureux de le constater. :wink:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Et voilà un deuxième exemple, ou tu récupères le texte que tu as saisi dans une autre fenêtre:

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
  #WinSaisie
EndEnumeration

;/Constantes Gadget
Enumeration
  #Result
  #Btn_Saisie
  #Btn_Quit
  #Saisie
  #Btn_Valid
  #Btn_Cancel
EndEnumeration

Procedure OpenMainWindow(); Ouverture de la fenêtre principale
  Handle =OpenWindow(#Window_0, 300, 300, 300, 70, #PB_Window_SystemMenu, "Fenêtre 1",0)
  
  If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#Result,10,10,280,20,"")
    ButtonGadget(#Btn_Saisie, 50, 40, 100, 25, "Saisie")
    ButtonGadget(#Btn_Quit, 150, 40, 100, 25, "Quitter")
  EndIf
  
  ProcedureReturn Handle
EndProcedure

Procedure OpenSaisie(); Ouverture de la fenêtre de saisie
  Handle = OpenWindow(#WinSaisie, 300,200,300,70,#PB_Window_SystemMenu,"Saisie du nom",#Window_0)
  If CreateGadgetList(WindowID(#WinSaisie))
    StringGadget(#Saisie,10,10,280,20,"Bienvenue dans le monde de PureBasic")
    ButtonGadget(#Btn_Valid, 50, 40, 100, 25, "Valider")
    ButtonGadget(#Btn_Cancel, 150, 40, 100, 25, "Annuler")
  EndIf
  ActivateGadget(#Saisie)
  
  ProcedureReturn Handle
EndProcedure

hWnd = OpenMainWindow()

Repeat
  Select WaitWindowEvent()
    ;- Evenements clavier
    Case #WM_KEYDOWN
      Select EventwParam()
        
        Case #VK_RETURN                   ; Détecte l'appui sur la touche "ENTREE"
          If hSaisie >0                   ; Vérifie que la fenêtre de saisie est ouverte
            If GetGadgetText(#Saisie)<>"" ; et que le champ n'est pas vide,
              SetGadgetText(#Result, GetGadgetText(#Saisie)); et renvoie le texte
              CloseWindow(#WinSaisie)     ; puis referme la fenêtre
              ActivateGadget(#Result)
              
            EndIf
          EndIf
      EndSelect
      
    ;- Evenements gadget
    Case #PB_EventGadget
      Select EventGadgetID()
        
        Case #Btn_Saisie; Ouvre la fenêtre de saisie
          hSaisie = OpenSaisie()
          
        Case #Btn_Valid ; La même chose que plus haut, mais avec le bouton
          SetGadgetText(#Result, GetGadgetText(#Saisie))
          CloseWindow(#WinSaisie)
          
        Case #Btn_Cancel; ferme la fenêtre de saisie, sans récupérer le texte
          CloseWindow(#WinSaisie)
          
        Case #Btn_Quit; quitte le programme
          quit = 1
          
      EndSelect
    Case #PB_EventCloseWindow
      Select EventWindowID()
        Case #WinSaisie
          UseWindow(#Window_0)
          CloseWindow(EventWindowID())
        
          Case #Window_0
            quit = 1
            
      EndSelect
      
  EndSelect
Until quit = 1
End
J'espère que ça répond à ta question!

Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je me suis fais avoir parce qu'on ne retrouve pas ce message #WM_KEYDOWN dans le Callback. :?

Si quelqu'un sait pourquoi avant que je ne pose la question dans un autre sujet!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ah bon!!!

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Btn_Quit
EndEnumeration

Procedure CallBack(Hnd,Msg,wParam,lParam)
  Resultat = #PB_ProcessPureBasicEvents
  Select Msg
    Case #WM_KEYDOWN
      Select wParam
        Case #VK_RETURN
          Debug "Touche ENTREE enfoncée"
      EndSelect
  EndSelect
  ProcedureReturn Resultat 
EndProcedure 

If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
  If CreateGadgetList(WindowID(#Window_0))
    ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
    StringGadget(1,10,10,280,20,"")
  EndIf
  
  SetWindowCallback(@CallBack())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          Case #Btn_Quit : quit = 1
        EndSelect
      Case #PB_EventCloseWindow : quit = 1
    EndSelect
  Until quit = 1
  End
EndIf
:roll:

Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ben non, il se passe rien :cry: et ça ne vient pas du debugger.

J'ai Window XP, est-ce que pour d'autres, c'est pareil ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Pourtant, chez moi, ce code fonctionne!

Sur le debugger uniquement, puisque rien ne renvoie du texte au StringGadget(), mais il fonctionne :?

Chris :)

PS: Si tu tournes avec le debugger, vérifier que ce n'est pas lui qui a le focus, mais la fenêtre du programme. Ca peut arriver si tu modifies la position du debugger avant d'essayer le code, et que tu ne recliques pas sur la fenêtre pour lui redonner le focus. (Je me suis fait avoir une fois,...)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Bien sûr, j'ai mis un messagebox pour tester sans debugger!

Mais, tu ne m'as pas dit, tu as quel OS ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Dernière modification par Le Soldat Inconnu le jeu. 15/avr./2004 21:57, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

XP Home

Chris :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

voir ici la solution de Fred
Ca n'a pas de rapport, son problème, c'est qu'il ne récupères pas #WM_KEYDOWN dans la CallBack. :wink:

Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Regis, ça n'a rien à voir, c'est pas la touche le problème mais le message
que je reçoit dans le traitement repeat-until et pas dans le callback :!:

Si ça marche pour toi Regis, ça craint...d'où ça peut venir ? 8O
Répondre