[resolu] Soucis pour adapter mon code console en mode window

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[resolu] Soucis pour adapter mon code console en mode window

Message par Ar-S »

Salut à tous (coucou Dobro), aprés plusieurs mois d'absence, j'ai décidé de me remettre au PB en achetant une licence pour la 4.02
Je suis donc trés content de vous retrouver et d'agrandir cette petite famille.

Maintenant il n'en demeure pas moins que je suis pas trés doué en programmation mais que j'aimerai tout de même y arriver avec votre aide.

Mon 1er programme est un Renamer de fichier.

1 - Il demande un mot de pass
2 - si le pass est correct il renomme des fichiers précis (dans mon ex le code est bonpass)
3 - sinon il affiche un message d'erreur
4 - il quitte

Je l'ai ccréé en mode console et il fonctionne parfaitement (même si je doute qu'il soit trés optimisé).

Voilà le code en mode console :


;Réalisé en PureBasic 4.xx par Ar-S
OpenConsole ()
PrintN ( "" )
PrintN ( "--------------Mon Renamer v1.0--------------" )
PrintN ( "" )
PrintN ( "Quel est le mot de passe ?" )
PrintN ( "" )
code$ = Input ()
If code$ = "bon" + "pass"
PrintN ( "" )
PrintN ( "OK " + "Decryptage des fichiers..." )
If RenameFile ( "xxxxx.txt" , "yyyyyy.txt" )| RenameFile ( "xxxxx2.cab" , "yyyyy2.txt" ) ; Rename les fichiers
PrintN ( "" )
PrintN ( "Fichiers renommes avec succes." )
Else
PrintN ( "" )
PrintN ( "Echec, fichier incorrect ou introuvable." )
EndIf
Else
Print ( "" )
PrintN ( "Desole, ce n est pas la bonne reponse" )
EndIf
PrintN ( "Presser ENTREE pour quitter" )
Input ()
End


Mon soucis et que je souhaiterai en faire une version fenetrée (plus jolie quoi) mais là je n'y arrive pas du tout.

Donc une fenettre, avec une image jpg de fond, un cadre au dessus ou serait posée la question du pass et les autres.

J'ai essayé de créer l'interface graphique avec l'éditeur qui me donne donc un code comon.pb mais c'est tout, je suis un peu perdu :(

Pouvez vous me donner qques conseils ?
D'avance merci :wink:

P.S : Excellent le colorer Dobro !
Dernière modification par Ar-S le sam. 19/mai/2007 6:23, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Content de te revoir ici Ar-S :D

pour ton interface a tu ete voir le dernier TUTO que je viens de mettre (hier ou avant hier Section debutant :D ) tuto sur le Designer qui t'explique comment on lui fait generer la boucle des events, et comment recuperer le code directement dans l'editeur !! :D

(pour le Colorer, ne pas réediter le message, sinon on perd la mise en forme du text :D , et ne jamais colorer un code, qui contient du code !! genre "print "print" ")


pour ton image de fond de fenetre fait une petite recherche sur les callback :D

si vraiment tu coince, on t'aidera un peut plus concretement :D
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Vi mon gars, j'ai lu (et relu) ton petit tuto et j'en m'en suis servi, mais j'arrive po à adapter mon code à l'interieur...

vala le code généré


; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

;- Window Constants
;
Enumeration
   #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
   #Text_0
   #String_0
   #String_1
EndEnumeration


Procedure Open_Window_0()
   If OpenWindow ( #Window_0 , 559, 375, 157, 272, "ARS_Renamer ( 0 )" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
     If CreateGadgetList ( WindowID ( #Window_0 ))
       TextGadget ( #Text_0 , 31, 0, 100, 20, "Mot de passe SVP" )
       StringGadget ( #String_0 , 0, 20, 150, 20, "" , #PB_String_Password | #PB_String_LowerCase )
       StringGadget ( #String_1 , 0, 50, 157, 220, "" , #PB_String_ReadOnly )
       SendMessage_ ( GadgetID ( #String_1 ), #EM_LIMITTEXT , 255, 0)
      
     EndIf
   EndIf
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent () ; This line waits until an event is received from Windows
  
   WindowID = EventWindow () ; The Window where the event is generated, can be used in the gadget procedures
  
   GadgetID = EventGadget () ; Is it a gadget event?
  
   EventType = EventType () ; The event type
  
   ;You can place code here, and use the result as parameters for the procedures
  
   If Event = #PB_Event_Gadget
    
     If GadgetID = #String_0
        
      
     ElseIf GadgetID = #String_1
      
     EndIf
    
   EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;



J'aimerai donc que dans mon #String_0 l'utilisateur entre le passe et qu'il valide par entree puis que le resultat s'affiche dans le #String_1
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.......
Dernière modification par Backup le mar. 19/août/2014 14:26, modifié 1 fois.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Pour Dobro :
je ne vois pas bien l'utilité de la ligne :

Code : Tout sélectionner

     SendMessage_ ( GadgetID ( #String_1 ), #EM_LIMITTEXT , 255, 0)
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Yeah c'est un grand pas en avant :)

Le probleme est cette histoire de temps réel,
lorsque l'on tape un pass faux, le message "mauvais mot de passe" s'affiche directement, on sait donc que le pass ne commence pas par la lettre que l'on a tapé...
Je voudrais donc bien valider par entree ou par un bouton OK
Second petit soucis, j'aimerai que si $pass=0 alors le string_1 se vide.

Voilà le code modifié


  ; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

;- Window Constants
;
Enumeration
      #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
      #Text_0
      #String_0
      #String_1
EndEnumeration

;- Differents textes
            cheune$= "Exact, decryptage en cour"
            ok$= "Operation terminée"
            echec$= "Echec, fichier incorrect ou introuvable"
            pasglop$= "mot de pass invalide"
; fin des differents textes

Procedure Open_Window_0()
      If OpenWindow ( #Window_0 , 559, 375, 157, 272, "ARS_Renamer ( 0 )" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
          If CreateGadgetList ( WindowID ( #Window_0 ))
              TextGadget ( #Text_0 , 31, 0, 100, 20, "Mot de passe SVP" )
              StringGadget ( #String_0 , 0, 20, 150, 20, "" , #PB_String_Password | #PB_String_LowerCase )
              StringGadget ( #String_1 , 0, 50, 157, 220, "" , #PB_String_ReadOnly )
              SendMessage_ ( GadgetID ( #String_1 ), #EM_LIMITTEXT , 255, 0)
            
          EndIf
      EndIf
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
    
    Event = WaitWindowEvent () ; This line waits until an event is received from Windows
    
      WindowID = EventWindow () ; The Window where the event is generated, can be used in the gadget procedures
    
      GadgetID = EventGadget () ; Is it a gadget event?
    
      EventType = EventType () ; The event type
    
      ;You can place code here, and use the result as parameters for the procedures
    
      If Event = #PB_Event_Gadget
        
          If GadgetID = #String_0
             pass$= GetGadgetText ( #String_0 ) ; on recupere le contenu dans la variable pass$
              If pass$= "bon" + "pass"
              SetGadgetText ( #String_1 , cheune$) ; on envoi le resultat en temps reel dans string_1 : D
                 If RenameFile ( "xxxxx.txt" , "yyyyyy.txt" )| RenameFile ( "xxxxx2.cab" , "yyyyy2.txt" ) ; Rename les fichiers
                   SetGadgetText ( #String_1 , ok$)
                 Else
                   SetGadgetText ( #String_1 , echec$)
                 EndIf
             Else
             SetGadgetText ( #String_1 , pasglop$)
               EndIf
          EndIf
        
      EndIf
    
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Autant pour moi, j'ai reussi !

J'ai simplement ajouté un bouton OK et j'ai passé le contenu de "pass" lorsque l'on presse.
ça marche impec !

Code : Tout sélectionner

If GadgetID = #Button_0 ; si le bouton ok est presse
             pass$= GetGadgetText ( #String_0 ) ; on recupere le contenu dans la variable pass$
Merci pour ton aide Dobro !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

brossden a écrit :Pour Dobro :
je ne vois pas bien l'utilité de la ligne :

Code : Tout sélectionner

     SendMessage_ ( GadgetID ( #String_1 ), #EM_LIMITTEXT , 255, 0)
c'est ar-S qui a ecrit ça :D

moi je me suis contenté de lui montrer comment on recupere le contenue du gadget
et comment on renvoi ce contenue dans un autre gadget ! :D

Code : Tout sélectionner

pass$=   GetGadgetText   (  #String_0  )  ; on recupere le contenu dans la variable pass$
SetGadgetText ( #String_1 , pass$) ; on envoi le resultat en temps reel dans string_1 : D 
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

oui mais ce fut comme la flamme d'un briquet au fond d'une sombre grotte :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ar-S a écrit :oui mais ce fut comme la flamme d'un briquet au fond d'une sombre grotte :D
Pour moi ça ne pose pas de problemes :D
t'as bien le droit de faire des essais et des erreurs , c'est meme comme ça que l'on apprend le mieux :D

je me justifiais pour brossden , alors que je n'avais ecris concretement que 2 lignes de codes, il a pensé que j'etais l'auteur de toutes les lignes :lol:

bref! , je rétabli la vérité, simplement :D
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

brossden a écrit : je ne vois pas bien l'utilité de la ligne :

Code : Tout sélectionner

     SendMessage_ ( GadgetID ( #String_1 ), #EM_LIMITTEXT , 255, 0)
Je l'ai supprimé :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.......
Dernière modification par Backup le mar. 19/août/2014 14:27, modifié 1 fois.
Thierryfr
Messages : 102
Inscription : mer. 04/avr./2007 16:28

Message par Thierryfr »

bonjour Ar-s

voici un bout de code qui te permet d'afficher ta fenetre principale , c'est ce bout de code que j'utilise quand je programme .
sinon je te conseille d'utilise le designer Pureform de Gnozal qui est plus complet que visual.

Code : Tout sélectionner


;Creation d'une simple fenetre 
; on declare une constante poru la fenetre 0
Enumeration 
 #Fenetre_principale 
EndEnumeration
; declaration de la procedure 
Procedure Main_programme ()
 If OpenWindow(#Fenetre_principale,0,0,640,480,"Mon Renamer v1.0",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
   EndIf
 EndProcedure

; boucle principale du programme 
Main_programme ()
 
 Repeat 
 Select WaitWindowEvent()
  
 
 
 
 
  Case  #PB_Event_CloseWindow
  fermer_fenetre0=1
  EndSelect 
  Until fermer_fenetre0=1
  End
Thierryfr
Messages : 102
Inscription : mer. 04/avr./2007 16:28

Message par Thierryfr »

merci dobro pour le degradé
peux tu expliquer les parametres de la procedure Callback svp ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Houla Dobro ton code est bien long ! Moi je voulais juste un background à mon application, j'ai simplement rajouté l'image (JPG) dans le visual et ajouté le code à mon prog existant.

Code : Tout sélectionner

;- Image Plugins
UseJPEGImageDecoder()

;- Image Globals
Global Image0

;- Catch Images
Image0 = CatchImage(0, ?Image0)

;- Images
DataSection
Image0:
  IncludeBinary "01.jpg"
EndDataSection
Puis dans la procédure openwindow

Code : Tout sélectionner

ImageGadget(#Image_0, 0, 0, 400, 288, Image0)
ça marche comme ça.

Je vais tout de même essayer de comprendre ton script. 8)
Répondre