Page 1 sur 1

[R] gestion plusieurs GUICtrlCreateEdit

Posté : ven. 01 mai 2009 01:17
par AirPE
Bonsoir à tous!

Je reviens avec un nouveau problème!

Voilà le truc, j'ai créé plusieurs contrôle d'édition (10) et je sèche sur comment les gérer...

Voici d'abord mon script actuel:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $creationEdit[6][3]
Local $Y=30, $lectureEdit[6][3]

$fenetreAjouterMot=GUICreate("Ajouter un mot", 280, 230)
GUICtrlCreateLabel("mot 1", 10, 10)
GUICtrlCreateLabel("mot 2", 160, 10)

For $i = 1 To 5 Step 1
    $X=10
    For $j = 1 To 2 Step 1
        $creationEdit[$i][$j] = GUICtrlCreateEdit("", $X, $Y, 110, 20, $ES_AUTOHSCROLL)
        GUICtrlCreateLabel("==>", 130, $Y)
        $X=$X+150
    Next
    $Y=$Y+30
Next

$valider=GUICtrlCreateButton(" Ajouter ", 35, 190, 100, -1)
$annuler=GUICtrlCreateButton(" Annuler ", 145, 190, 100, -1)

GUISetState()

while 1
    $msg=GUIGetMsg(1)
    Select
        
        Case ($msg[0]=$GUI_EVENT_CLOSE Or $msg[0]=$annuler) And $msg[1]=$fenetreAjouterMot
            GUIDelete()
            Exit
            
        Case $msg[0]=$valider   
            For $k=1 To 5 Step 1
                For $l=1 To 2 Step 1
                    $lectureEdit[$k][$l] = GUICtrlRead($creationEdit[$k][$l])
                Next
            Next
            
            If ($lectureEdit[1][1]="" Or StringIsSpace($lectureEdit[1][1])) And ($lectureEdit[1][2]="" Or StringIsSpace($lectureEdit[1][2])) And ($lectureEdit[2][1]="" Or StringIsSpace($lectureEdit[2][1])) And ($lectureEdit[2][2]="" Or StringIsSpace($lectureEdit[2][2])) And ($lectureEdit[3][1]="" Or StringIsSpace($lectureEdit[3][1])) And ($lectureEdit[3][2]="" Or StringIsSpace($lectureEdit[3][2])) And ($lectureEdit[4][1]="" Or StringIsSpace($lectureEdit[4][1])) And ($lectureEdit[4][2]="" Or StringIsSpace($lectureEdit[4][2])) And ($lectureEdit[5][1]="" Or StringIsSpace($lectureEdit[5][1])) And ($lectureEdit[5][2]="" Or StringIsSpace($lectureEdit[5][2])) Then 
                Msgbox(16, "mots manquants", "Veuillez remplir au moins une ligne pour valider!")
            Else
                If Not ($lectureEdit[1][1]="" Or StringIsSpace($lectureEdit[1][1])) And Not ($lectureEdit[1][2]="" Or StringIsSpace($lectureEdit[1][2])) Then
                    MsgBox(0, "", $lectureEdit[1][1]&"    "&$lectureEdit[1][2])
                Else
                    MsgBox(16, "mot manquant", "Veuillez remplir les deux champs de la ligne")
                    
                EndIf
            EndIf
    EndSelect
WEnd
Pour le moment j'arrive à voir si tous les champs sont vides, et si un champ est rempli, voir si l'autre champ correspondant (sur la même ligne) est rempli ou vide, ça c'est pas trop dure. Déjà, n'y aurait-t-il pas un moyen plus court pour faire cette condition?

Code : Tout sélectionner

If ($lectureEdit[1][1]="" Or StringIsSpace($lectureEdit[1][1])) And ($lectureEdit[1][2]="" Or StringIsSpace($lectureEdit[1][2])) And ($lectureEdit[2][1]="" Or StringIsSpace($lectureEdit[2][1])) And ($lectureEdit[2][2]="" Or StringIsSpace($lectureEdit[2][2])) And ($lectureEdit[3][1]="" Or StringIsSpace($lectureEdit[3][1])) And ($lectureEdit[3][2]="" Or StringIsSpace($lectureEdit[3][2])) And ($lectureEdit[4][1]="" Or StringIsSpace($lectureEdit[4][1])) And ($lectureEdit[4][2]="" Or StringIsSpace($lectureEdit[4][2])) And ($lectureEdit[5][1]="" Or StringIsSpace($lectureEdit[5][1])) And ($lectureEdit[5][2]="" Or StringIsSpace($lectureEdit[5][2])) Then
Esnuite pour le reste:
Au final le script insérera les lignes dans un tableau avec les fonctions _Array et tout ça...

Donc le truc, je voudrai lors du clique sur "valider", insérer le contenu des camps dans le tableau. Si une ligne (2 champs) est vide, bien sûr elle n'est pas prise en compte. Si une ligne ou plusieurs lignes sont remplies on insère les champs correspondants dans le tableau. Mais le point le plus compliqué à gérer je pense, c'est que j'aimerai que l'utilsateur puisse écrire dans 'nimporte quelle ligne, s'il veut juste ajouter deux mots dans le tableau et qu'il les écrit dans la ligne 3, et bien ça insère le contenu de la ligne 3...

Donc voilà je sais pas trop comment gérer tout ça!! :?

Merci d'avance pour votre aide!

Re: [..] gestion plusieurs GUICtrlCreateEdit

Posté : ven. 01 mai 2009 09:31
par Tlem
J'ai survolé votre code, et m'interroge sur l'utilité d'avoir utilisé un contrôle Edit au lieu d'un contrôle Input ?

Ensuite pour votre fonction de test, vous avez créez les contrôles par une boucle, donc vérifiez avec un boucle. :wink:

Re: [..] gestion plusieurs GUICtrlCreateEdit

Posté : dim. 03 mai 2009 01:04
par AirPE
Bonsoir!

Tout d'abord merci pour votre réponse.
Effectivement j'ai pas trop fait attention, un GUICtrlCreateInput est mieux adapté, ça fait un include en moin! :P
Bon j'ai tenté avec une boucle, je sens que je suis pas trop loin mais bon je n'arrive pas à finir...

Lorsque que les deux champs d'une ligne sont remplies, ça m'affiche le message de remplir les deux champs avant de bien afficher la bonne MsgBox (à cause des deux boucles), et à propos de cette MsgBox comment m'y prendre pour afficher le mot des deux champs? J'ai mis un "-1" qui ne fonctionne pas bien sûr mais bon ce serait l'idée! :lol:

Re: [..] gestion plusieurs GUICtrlCreateEdit

Posté : dim. 03 mai 2009 12:59
par Voodoo
Il y a déjà une boucle lors de l'appuie sur le bouton "Valider". Il suffit de mettre les bonnes conditions à cette endroit !. Si un champ est vide ou deux champs sont vides alors on ne copie pas et on passe au suivant sinon on met le resultat dans $lectureEdit ! Comme ça on effectue le filtrage en même temps que la lecture des données.


et à propos de cette MsgBox comment m'y prendre pour afficher le mot des deux champs?
Pas clair ! On peut voir le code ?

Re: [..] gestion plusieurs GUICtrlCreateEdit

Posté : dim. 03 mai 2009 13:19
par AirPE
Oops oui bien sûr! Je pensais l'avoir mis, désolé! :oops:
► Afficher le texte

Re: [..] gestion plusieurs GUICtrlCreateEdit

Posté : mar. 05 mai 2009 14:17
par AirPE
Je passe ce sujet en résolu!! :wink:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $creationInput[6][3], $table
Local $Y=30, $_VerificationRempli = 0

$fenetreAjouterMot=GUICreate("Ajouter un mot", 280, 230)
GUICtrlCreateLabel("mot 1", 10, 10)
GUICtrlCreateLabel("mot 2", 160, 10)

For $i = 1 To 5 Step 1
    $X=10
    For $j = 1 To 2 Step 1
        $creationInput[$i][$j] = GUICtrlCreateInput("", $X, $Y, 110, 20)
        GUICtrlCreateLabel("==>", 130, $Y)
        $X=$X+150
    Next
    $Y=$Y+30
Next

$valider=GUICtrlCreateButton(" Ajouter ", 35, 190, 100, -1)
$annuler=GUICtrlCreateButton(" Annuler ", 145, 190, 100, -1)

GUISetState()

while 1
    $msg=GUIGetMsg(1)
    Select
        
        Case ($msg[0]=$GUI_EVENT_CLOSE Or $msg[0]=$annuler) And $msg[1]=$fenetreAjouterMot
            GUIDelete()
            Exit
            
        Case $msg[0]=$valider           
            For $k=1 To 5 Step 1
                If GUICtrlRead($creationInput[$k][1]) = "" And GUICtrlRead($creationInput[$k][2])<>"" Then
                    MsgBox(16, "Mot manquant", "Veuillez entrer un mot dans le champ 1 à la ligne "&$k)
                    $_VerificationRempli = 1
                ElseIf GUICtrlRead($creationInput[$k][1])<>"" And GUICtrlRead($creationInput[$k][2])="" Then
                    MsgBox(16, "Mot manquant", "Veuillez entrer un mot dans le champ 2 à la ligne "&$k)
                    $_VerificationRempli = 1
                ElseIf GUICtrlRead($creationInput[$k][1])<>"" And GUICtrlRead($creationInput[$k][2])<>"" Then
                    MsgBox(0, "", "c'est bon!")
                    
                    $_VerificationRempli = 1
                ElseIf GUICtrlRead($creationInput[$k][1])="" And GUICtrlRead($creationInput[$k][2])="" And $k = 5 And $_VerificationRempli = 0 Then
                    MsgBox(16, "Mots manquants", "Veuillez remplir au moins une ligne ou annuler...")
                EndIf               
            Next
    EndSelect
WEnd
Si quelqu'un a une meilleure idée pour améliorer ou l'optimiser je suis preneur! :P