[R] gestion plusieurs GUICtrlCreateEdit

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

[R] gestion plusieurs GUICtrlCreateEdit

#1

Message 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!
Modifié en dernier par AirPE le mar. 05 mai 2009 22:55, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] gestion plusieurs GUICtrlCreateEdit

#2

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

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

Re: [..] gestion plusieurs GUICtrlCreateEdit

#3

Message 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:
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

Re: [..] gestion plusieurs GUICtrlCreateEdit

#4

Message 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 ?
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

Re: [..] gestion plusieurs GUICtrlCreateEdit

#5

Message par AirPE »

Oops oui bien sûr! Je pensais l'avoir mis, désolé! :oops:
► Afficher le texte
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

Re: [..] gestion plusieurs GUICtrlCreateEdit

#6

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