Lancer un interface graphique en cliquant sur un bouton

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Lancer un interface graphique en cliquant sur un bouton

#1

Message par magique »

Bonjour à tous,

Je cherche à lancer une interface d'encodage de login à partir d'un bouton se trouvant sur une partie graphique différente

j'ai voulu utiliser le $var pour mettre dans un container, pour l'appeler en cliquant sur le bouton "enregistrer" mais ça n'a pas fonctionner
j'ai donc retirer ce que j'avais tenter et laisser le code comme je pensais qu'il devrai être pour pouvoir fonctionner
quand je le lance la première partie de l'interface passe bien mais la seconde reste invisible et rien n'arrive
auriez-vous une idée pour que ca puisse fonctionné
Merci d'avance
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form2.kxf
Global $Form1 = GUICreate("Form1", 562, 437, 191, 124)
Global $Label1 = GUICtrlCreateLabel("Pour enregistrer vos codes d'accès, cliquer sur le bouton Enregistrer", 32, 16, 404, 25)
Global $Button1 = GUICtrlCreateButton("Enregistrer", 456, 16, 75, 25)
Global $Label2 = GUICtrlCreateLabel("Cocher les cases pour sélectionner les programmes, cliquer sur valider pour les exécuter ", 32, 64, 500, 33)
Global $Pic1 = GUICtrlCreatePic("", 24, 112, 68, 68)
Global $Pic2 = GUICtrlCreatePic("C:\Users\Administrateur\Desktop\autoit icone\outlook-web.jpg", 112, 112, 68, 68)
Global $Pic3 = GUICtrlCreatePic("", 200, 112, 68, 68)
Global $Pic4 = GUICtrlCreatePic("", 288, 112, 68, 68)
Global $Pic5 = GUICtrlCreatePic("", 376, 112, 68, 68)
Global $Pic6 = GUICtrlCreatePic("", 464, 112, 68, 68)
Global $Checkbox1 = GUICtrlCreateCheckbox("", 56, 200, 17, 17)
Global $Checkbox2 = GUICtrlCreateCheckbox("", 144, 200, 17, 17)
Global $Checkbox3 = GUICtrlCreateCheckbox("", 232, 200, 17, 17)
Global $Checkbox4 = GUICtrlCreateCheckbox("", 320, 200, 17, 17)
Global $Checkbox5 = GUICtrlCreateCheckbox("", 408, 200, 17, 17)
Global $Checkbox6 = GUICtrlCreateCheckbox("", 496, 200, 17, 17)
Global $Pic7 = GUICtrlCreatePic("", 24, 232, 68, 68)
Global $Pic8 = GUICtrlCreatePic("", 112, 232, 68, 68)
Global $Pic9 = GUICtrlCreatePic("", 200, 232, 68, 68)
Global $Pic10 = GUICtrlCreatePic("", 288, 232, 68, 68)
Global $Pic11 = GUICtrlCreatePic("", 376, 232, 68, 68)
Global $Pic12 = GUICtrlCreatePic("", 464, 232, 68, 68)
Global $Checkbox7 = GUICtrlCreateCheckbox("", 56, 320, 17, 17)
Global $Checkbox8 = GUICtrlCreateCheckbox("", 144, 320, 17, 17)
Global $Checkbox9 = GUICtrlCreateCheckbox("", 232, 320, 17, 17)
Global $Checkbox10 = GUICtrlCreateCheckbox("", 320, 320, 17, 17)
Global $Checkbox11 = GUICtrlCreateCheckbox("", 408, 320, 17, 17)
Global $Checkbox12 = GUICtrlCreateCheckbox("", 496, 320, 17, 17)
Global $Button2 = GUICtrlCreateButton("Valider", 368, 360, 75, 25)
Global $Button3 = GUICtrlCreateButton("Annuler", 456, 360, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd




;partie pour enregistrer login et mot de passe

Opt("MustDeclareVars", 1)

Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin); affiche le tableau avec les login et mot de passe au lancement du programme

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form1.kxf
Global $Form2 = GUICreate("Form2", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $sProgram, $sLogin, $sPassword, $nMsg, $sSearch, $rep

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      ExitLoop
     Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
     $sSearch = _ArraySearch($aLogin,$sLogin,0,0,0,1,1,1);on cherche le doublon
     If $sSearch >= 0 then ;si doublon trouvé on modifie ou non l'original selon le doublon (permet de modifier les entrées)
        $rep = MsgBox(4 + 48,"ATTENTION", $sLogin & " a été trouvé dans le tableau" & @CRLF & "Voulez vous modifier les données")
        If $rep = 6 Then ;réponse oui
           $aLogin[$sSearch][0] = $sProgram
           $aLogin[$sSearch][2] = $sPassword
        EndIf
      Else
         AjoutLogin ($sProgram, $sLogin, $sPassword)
     EndIf
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès",1)
     _ArrayDisplay ($aLogin); pour voir le tableau avec login et mot de passe
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File
j'ai volontairement laisser les indications de koda pour m'y retrouver dans le code

merci pour votre aide

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1874
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#2

Message par TommyDDR »

Il ne se passe rien cas vous avec une boucle infinie qui ne vous permet pas de passer à la suite de votre script, de plus la seule solution pour en sortir c'est le "exit" donc vous n'exécuterez jamais la suite.

Pour fonctionner, vous ne devez avoir qu'une seule boucle infinie et gérer les deux fenêtres dedans.

Pour plus de visibilité, je vous conseille fortement d'utilisé le mode évènementiel d'AutoIt (je n'utilise plus du tout le mode "basique" avec GUIGetMsg).
Le mode évènementiel vous permet d'associer directement une fonction au clic d'un élément : GUICtrlSetOnEvent($ctrlId, fonction)
Avec cela, votre fonction se déclenchera quand l'utilisateur cliquera sur le bouton ou autre control.
De cette façon, vous n'avez qu'une boucle infinie (vide) et différentes fonctions qui exécutent un code spécifique à une action.
Pour activer le mode il faut ajouter en début de script Opt("GUIOnEventMode", 1).

Amusez-vous avec l'exemple suivant :
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui, $gui2
Global $input
Global $label
Global $bouton

$gui = GUICreate("Gui1", 300, 80)
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $gui)
$input = GUICtrlCreateInput("input", 5, 5, 290, 20)
$label = GUICtrlCreateLabel("Label", 5, 30, 290, 20)
GUICtrlSetOnEvent($label, clicLabel)
$bouton = GUICtrlCreateButton("Bouton", 5, 55, 290, 20)
GUICtrlSetOnEvent($bouton, clicBouton)
GUISetState(@SW_SHOW, $gui)

$gui2 = GUICreate("Gui2", 150, 40)
GUISetOnEvent($GUI_EVENT_CLOSE, closeGui2, $gui2)

While(True)
   Sleep(10)
WEnd

Func clicLabel()
   MsgBox(0, "", "Fonction déclenchée par le label : id=" & @GUI_CtrlId & @CRLF & _
      "valeur input : " & GUICtrlRead($input))
EndFunc

Func clicBouton()
   GUISetState(@SW_DISABLE, $gui)
   GUISetState(@SW_SHOW, $gui2)
   MsgBox(0, "", "Fonction déclenchée par le bouton : id=" & @GUI_CtrlId & @CRLF & _
      "valeur input : " & GUICtrlRead($input))
EndFunc

Func closeGui2()
   GUISetState(@SW_ENABLE, $gui)
   GUISetState(@SW_HIDE, $gui2)
EndFunc


Func quit()
   Exit
EndFunc
PS : Koda est très bien pour tester les possibilités des IHM mais le code généré est rarement adapté. Vos checkbox par exemple sont nommées $Checkbox1, $Checkbox2, $Checkbox3, etc.. alors qu'il serait surement plus préférable d'en faire un tableau pour pouvoir faire un traitement de masse.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#3

Message par magique »

Bonjour @TommyDDR,

Merci pour votre réponse rapide, je vais essayer d'intégrer mon code au votre, et le principe de checkbox m'intéresse beaucoup
si j'arrive à trouver comment en ajoutant une image (image du programme), j'ai un checkbox qui s'ajoute en dessous en fonction des différents login et mot de passe encodé, ce serai d'idéal mais la c'est peu être un peu trop compliquer à faire vu que chacune des images sont différentes, à moins de le coder avec la liste des programmes et qu'elle ne soit visible qu'au moment ou les login et mot de passe sont enregistrer (je vais réfléchir aussi à ça^^)

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#4

Message par magique »

Bonjour,

Je pense que j'ai du faire une bêtise, il me met des messages d'erreur et le script à planter complètement le programme quand je l'ai lancer, j'ai l'impression d'avoir une boucle infinie mais je la trouve pas
pouvez-vous m'aider
voici ou j'en suis dans le code
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui, $gui2
Global $input
Global $label
Global $bouton

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form2.kxf
Global $Form1 = GUICreate("Form1", 562, 437, 191, 124)
$label = GUICtrlCreateLabel("Pour enregistrer vos codes d'accès, cliquer sur le bouton Enregistrer", 32, 16, 404, 25)
$bouton = GUICtrlCreateButton("Enregistrer", 456, 16, 75, 25)
Global $Label2 = GUICtrlCreateLabel("Cocher les cases pour sélectionner les programmes, cliquer sur valider pour les exécuter ", 32, 64, 500, 33)
Global $Pic1 = GUICtrlCreatePic("", 24, 112, 68, 68)
Global $Pic2 = GUICtrlCreatePic("C:\Users\Administrateur\Desktop\autoit icone\outlook-web.jpg", 112, 112, 68, 68)
Global $Pic3 = GUICtrlCreatePic("", 200, 112, 68, 68)
Global $Pic4 = GUICtrlCreatePic("", 288, 112, 68, 68)
Global $Pic5 = GUICtrlCreatePic("", 376, 112, 68, 68)
Global $Pic6 = GUICtrlCreatePic("", 464, 112, 68, 68)
Global $Checkbox1 = GUICtrlCreateCheckbox("", 56, 200, 17, 17)
Global $Checkbox2 = GUICtrlCreateCheckbox("", 144, 200, 17, 17)
Global $Checkbox3 = GUICtrlCreateCheckbox("", 232, 200, 17, 17)
Global $Checkbox4 = GUICtrlCreateCheckbox("", 320, 200, 17, 17)
Global $Checkbox5 = GUICtrlCreateCheckbox("", 408, 200, 17, 17)
Global $Checkbox6 = GUICtrlCreateCheckbox("", 496, 200, 17, 17)
Global $Pic7 = GUICtrlCreatePic("", 24, 232, 68, 68)
Global $Pic8 = GUICtrlCreatePic("", 112, 232, 68, 68)
Global $Pic9 = GUICtrlCreatePic("", 200, 232, 68, 68)
Global $Pic10 = GUICtrlCreatePic("", 288, 232, 68, 68)
Global $Pic11 = GUICtrlCreatePic("", 376, 232, 68, 68)
Global $Pic12 = GUICtrlCreatePic("", 464, 232, 68, 68)
Global $Checkbox7 = GUICtrlCreateCheckbox("", 56, 320, 17, 17)
Global $Checkbox8 = GUICtrlCreateCheckbox("", 144, 320, 17, 17)
Global $Checkbox9 = GUICtrlCreateCheckbox("", 232, 320, 17, 17)
Global $Checkbox10 = GUICtrlCreateCheckbox("", 320, 320, 17, 17)
Global $Checkbox11 = GUICtrlCreateCheckbox("", 408, 320, 17, 17)
Global $Checkbox12 = GUICtrlCreateCheckbox("", 496, 320, 17, 17)
Global $Button2 = GUICtrlCreateButton("Valider", 368, 360, 75, 25)
Global $Button3 = GUICtrlCreateButton("Annuler", 456, 360, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;test nouveau code
While(True)
   Sleep(10)
WEnd

Func clicLabel()
   MsgBox(0, "", "Fonction déclenchée par le label : id=" & @GUI_CtrlId & @CRLF & _
      "valeur input : " & GUICtrlRead($input))
EndFunc

Func clicBouton()
   GUISetState(@SW_DISABLE, $gui)
   GUISetState(@SW_SHOW, $gui2)
   MsgBox(0, "", "Fonction déclenchée par le bouton : id=" & @GUI_CtrlId & @CRLF & _
      "valeur input : " & GUICtrlRead($input));popup
EndFunc

Func closeGui2()
   GUISetState(@SW_ENABLE, $gui)
   GUISetState(@SW_HIDE, $gui2)
EndFunc


Func quit()
   Exit
EndFunc
; fin nouveau code


While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd



;partie pour enregistrer login et mot de passe



Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin); affiche le tableau avec les login et mot de passe au lancement du programme

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form1.kxf
Global $Form2 = GUICreate("Form2", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $sProgram, $sLogin, $sPassword, $nMsg, $sSearch, $rep

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      ExitLoop
     Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
     $sSearch = _ArraySearch($aLogin,$sLogin,0,0,0,1,1,1);on cherche le doublon
     If $sSearch >= 0 then ;si doublon trouvé on modifie ou non l'original selon le doublon (permet de modifier les entrées)
        $rep = MsgBox(4 + 48,"ATTENTION", $sLogin & " a été trouvé dans le tableau" & @CRLF & "Voulez vous modifier les données")
        If $rep = 6 Then ;réponse oui
           $aLogin[$sSearch][0] = $sProgram
           $aLogin[$sSearch][2] = $sPassword
        EndIf
      Else
         AjoutLogin ($sProgram, $sLogin, $sPassword)
     EndIf
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès",1)
     _ArrayDisplay ($aLogin); pour voir le tableau avec login et mot de passe
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1874
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#5

Message par TommyDDR »

1) Vous ne pouvez pas avoir 2 boucles infinies, supprimez celle du bas
2) en mode évènementiel, GUIGetMsg() n'est plus utilisable, vous devez utiliser GUISetOnEvent pour les évènements de fenêtre (comme la fermeture) et GUICtrlSetOnEvent pour les évènement sur les controls. (regardez bien mon exemple sur comment je gère la fermeture de la fenêtre)
3) Dans mon script j'ai ajouté Opt("MustDeclareVars", 1) qui force le développeur à déclarer ses variable avant de les utiliser (cela évite certains problèmes dans les programmes plus conséquents (je vous conseille de le laisser tout le temps)
4) Copier mon code ne suffira pas, il faut l'adapter au votre. Faites les fonctions propre à chaque bouton et associez les à vos bouton avec GUICtrlSetOnEvent
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#6

Message par magique »

Merci je vais regarder à ça
je sais que j'y connais pas grand chose en programmation mais j'ai envie de réussir ce projet
je reviens vers vous pour la suite
merci pour votre aide

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#7

Message par magique »

Je sais que je suis null
pour la deuxième boucle infinie
je vois bien que c'est dans le 2ème while que je doit travailler mais je vois pas du tout ce que je doit mettre, mes essaie sont des cata
pouvez-vous me dire ce qu'il faudrait que je mette pour pas que je bousille complètement le script
je suis occupé d'essayer d'utiliser le GuiCtrlSetOnEvent et ça me bloque lors des test
merci de votre aide

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1874
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#8

Message par TommyDDR »

Relisez la fin de mon 1er point du message précédent.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#9

Message par magique »

Bonjour,

Je pense avoir réussi à supprimer la deuxième boucle infinie
par contre il me met d'autre erreur
je pense que je doit chercher encore mais est-ce que pour le moment je suis partit sur la bonne voix ou je me plante complètement ?
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>
#include <MsgBoxConstants.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

;Global $gui, $gui2
Global $input
Global $label
Global $bouton

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form2.kxf
Global $Form1 = GUICreate("Form1", 562, 437, 191, 124)
$label = GUICtrlCreateLabel("Pour enregistrer vos codes d'accès, cliquer sur le bouton Enregistrer", 32, 16, 404, 25)
$bouton = GUICtrlCreateButton("Enregistrer", 456, 16, 75, 25)
Global $Label2 = GUICtrlCreateLabel("Cocher les cases pour sélectionner les programmes, cliquer sur valider pour les exécuter ", 32, 64, 500, 33)
Global $Pic1 = GUICtrlCreatePic("", 24, 112, 68, 68)
Global $Pic2 = GUICtrlCreatePic("C:\Users\Administrateur\Desktop\autoit icone\outlook-web.jpg", 112, 112, 68, 68)
Global $Pic3 = GUICtrlCreatePic("", 200, 112, 68, 68)
Global $Pic4 = GUICtrlCreatePic("", 288, 112, 68, 68)
Global $Pic5 = GUICtrlCreatePic("", 376, 112, 68, 68)
Global $Pic6 = GUICtrlCreatePic("", 464, 112, 68, 68)
Global $Checkbox1 = GUICtrlCreateCheckbox("", 56, 200, 17, 17)
Global $Checkbox2 = GUICtrlCreateCheckbox("", 144, 200, 17, 17)
Global $Checkbox3 = GUICtrlCreateCheckbox("", 232, 200, 17, 17)
Global $Checkbox4 = GUICtrlCreateCheckbox("", 320, 200, 17, 17)
Global $Checkbox5 = GUICtrlCreateCheckbox("", 408, 200, 17, 17)
Global $Checkbox6 = GUICtrlCreateCheckbox("", 496, 200, 17, 17)
Global $Pic7 = GUICtrlCreatePic("", 24, 232, 68, 68)
Global $Pic8 = GUICtrlCreatePic("", 112, 232, 68, 68)
Global $Pic9 = GUICtrlCreatePic("", 200, 232, 68, 68)
Global $Pic10 = GUICtrlCreatePic("", 288, 232, 68, 68)
Global $Pic11 = GUICtrlCreatePic("", 376, 232, 68, 68)
Global $Pic12 = GUICtrlCreatePic("", 464, 232, 68, 68)
Global $Checkbox7 = GUICtrlCreateCheckbox("", 56, 320, 17, 17)
Global $Checkbox8 = GUICtrlCreateCheckbox("", 144, 320, 17, 17)
Global $Checkbox9 = GUICtrlCreateCheckbox("", 232, 320, 17, 17)
Global $Checkbox10 = GUICtrlCreateCheckbox("", 320, 320, 17, 17)
Global $Checkbox11 = GUICtrlCreateCheckbox("", 408, 320, 17, 17)
Global $Checkbox12 = GUICtrlCreateCheckbox("", 496, 320, 17, 17)
Global $Button2 = GUICtrlCreateButton("Valider", 368, 360, 75, 25)
Global $Button3 = GUICtrlCreateButton("Annuler", 456, 360, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###





;partie pour enregistrer login et mot de passe



Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin); affiche le tableau avec les login et mot de passe au lancement du programme

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form1.kxf
Global $Form2 = GUICreate("Form2", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $sProgram, $sLogin, $sPassword, $nMsg, $sSearch, $rep

While 1
 $nMsg1 = GUISetOnEvent
  Switch $nMsg1
    Case $GUI_EVENT_CLOSE
      ExitLoop
     Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
     $sSearch = _ArraySearch($aLogin,$sLogin,0,0,0,1,1,1);on cherche le doublon
     If $sSearch >= 0 then ;si doublon trouvé on modifie ou non l'original selon le doublon (permet de modifier les entrées)
        $rep = MsgBox(4 + 48,"ATTENTION", $sLogin & " a été trouvé dans le tableau" & @CRLF & "Voulez vous modifier les données")
        If $rep = 6 Then ;réponse oui
           $aLogin[$sSearch][0] = $sProgram
           $aLogin[$sSearch][2] = $sPassword
        EndIf
      Else
         AjoutLogin ($sProgram, $sLogin, $sPassword)
     EndIf
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès",1)
     _ArrayDisplay ($aLogin); pour voir le tableau avec login et mot de passe
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1874
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#10

Message par TommyDDR »

Code : Tout sélectionner

==> Variable used without being declared.:
$nMsg1 = GUISetOnEvent
^ ERROR
C'est à ça que sert "Opt("MustDeclareVars", 1)", à vous mettre une erreur quand vous n'avez pas déclaré la variable que vous utilisez / affectez.
En effet, on ne voit pas de "Local $nMsg1" ou "Global $nMsg1"

De plus en regardant votre code de plus près, je pense que vous n'avez pas compris l'utilisation de GUICtrlSetOnEvent et GUISetOnEvent.
Vous essayez de l'utiliser de la même façon que GUIGetMsg, mais si c'était le cas, GUICtrlSetOnEvent et GUISetOnEven n'auraient aucune raison d'exister.
Je me suis pourtant embêté à vous faire un joli petit exemple pour que vous puissiez voir comment cela fonctionne.
Reprenez le, regarder comment ou où sont utilisé les GUICtrlSetOnEvent et GUISetOnEvent et essayez de l'appliquer à votre programme.
Un indice, avec cette méthode, votre boucle while sera vide (peut être un sleep(10) à la limite).
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

magique
Niveau 4
Niveau 4
Messages : 63
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: Lancer un interface graphique en cliquant sur un bouton

#11

Message par magique »

Bonjour TommyDDR,

l'information sur la boucle while me serai bien utile, j'avoue que je suis null en prog et j'essaye de me débrouiller, je me suis en téter à utiliser la boucle en pensant qu'elle devais exister, je n'ai pas utiliser toute la partie du code que tu m'as expliquer si gentiment, car je cherche encore comment ça fonctionne
pour le moment j'ai juste positionner au endroit que j'ai cru qu'il fallait les mettre , maintenant je vais voir comment les faire fonctionner

Répondre