IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Tableau de TEDIT [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut Tableau de TEDIT
    Bonjour les développeurs pascal, j'ai eu envie de créer un tableau de score en passant par les Tedit pour faciliter le partage entre les procédures qui vont traiter les informations pour la mise à jour du record battu et la sauvegarde / restauration.

    Gros problème pour moi : ça coince pour appeler un Tedit via une boucle, et solution de secours trouvé : créer les Tedit dynamiquement via un tableau de TEdit, mais seul lors de la procédure formCreate où tous ces TEdit sont créés seule cette procédure connait ces TEdit :/

    Ma question comment passer d'un Tedit (string contenant le nom de l'objet + l'entier identifiant pour appeler l'identifiant name de cet TEdit)
    exemple : mes Tedit : edScore0 -> edScore9, je souhaite les appeler via une boucle avec la variable 'i' comme ceci :
    TEdit('edScore' + intToStr(i)).Text := ....

  2. #2
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    procedure TfrmGFiles.FormCreate(Sender: TObject);
    Var
       i : Byte;
       gdNms, gdScore, gdLvl : tArrayEdit;
       lbl : TLabel;
       mmoDisp : TMemo;
       dy : Integer;
    Begin
         frmGFiles.Height := 347;
         frmGFiles.Width := 404;
         mmoPrime.Left := 50;
         mmoPrime.Top := 10;
         For i := 0 To 4 Do Begin
             dy := 75 + 25 * i;
             lbl := TLabel.Create(Self);
             lbl.Parent := Self;
             lbl.Top := dy;
             lbl.Left := 10;
             lbl.Width := 35;
             lbl.Height := 15;
             lbl.Caption := 'Nom : ';
             gdNms[i] := TEdit.Create(Self);
             gdNms[i].Parent := Self;
             gdNms[i].Top := dy - 3;
             gdNms[i].Left := 50;
             gdNms[i].Width := 80;
             gdNms[i].Height := 22;
             gdNms[i].Alignment := taCenter;
             gdNms[i].Enabled := False;
             gdNms[i].Text := 'Unknow';
             lbl := TLabel.Create(Self);
             lbl.Parent := Self;
             lbl.Top := dy;
             lbl.Left := 160;
             lbl.Width := 38;
             lbl.Height := 15;
             lbl.Caption := 'Score : ';
             gdScore[i] := TEdit.Create(Self);
             gdScore[i].Parent := Self;
             gdScore[i].Top := dy - 3;
             gdScore[i].Left := 203;
             gdScore[i].Width := 35;
             gdScore[i].Height := 22;
             gdScore[i].Alignment := taRightJustify;
             gdScore[i].Enabled := False;
             gdScore[i].Text := '9999';
             lbl := TLabel.Create(Self);
             lbl.Parent := Self;
             lbl.Top := dy;
             lbl.Left := 268;
             lbl.Width := 46;
             lbl.Height := 15;
             lbl.Caption := 'Niveau : ';
             gdLvl[i] := TEdit.Create(Self);
             gdLvl[i].Parent := Self;
             gdLvl[i].Top := dy - 3;
             gdLvl[i].Left := 319;
             gdLvl[i].Width := 75;
             gdLvl[i].Height := 22;
             gdLvl[i].Alignment := taCenter;
             gdLvl[i].Enabled := False;
             gdLvl[i].Text := 'Expert';
         End;
         mmoDisp := TMemo.Create(Self);
         mmoDisp.Parent := Self;
         mmoDisp.Name := 'mmoDisp';
         mmoDisp.Top := 210;
         mmoDisp.Left := 10;
         mmoDisp.Width := 384;
         mmoDisp.Height := 97;
         mmoDisp.Enabled := False;
    End;

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Les variables ne devraient pas être déclarées dans FormCreate, mais à un endroit où elles seront visibles pour toutes les procédures.

    Et ensuite, pour y accéder, vous pourrez faire comme vous avez fait dans FormCreate.

    Ce que vous voulez faire, d'accéder au composant à partir de son nom dans une chaîne de caractères, ce n'est pas possible en Pascal, ni dans aucun langage compilé je pense.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 751
    Points
    9 751
    Par défaut
    Bonjour,

    Perso, quand j'ai un truc du genre à faire, je créer mes TEdit avec un nom du genre :SAI_SCOREnn, "nn" étant de la forme "01, 02, ... 99". (Si on a plus de 99 données on fait un "nnn")

    Ensuite, pour accéder à tous les SAI_SCOREnn je fais une simple boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Var
      st_NomEdit : String;
      in_cptEdit   : Integer;
      pComponent : TComponent;
     
    Begin
      in_CptEdit := 1; 
      st_NomEdit := Format('SAI_SCORE%s', [FSt_IntToStr0(in_CptEdit, 2)]); //Le paramètre 2 est si les noms sont SAI_SCOREnn, mettre 3 pour SAI_SCOREnnn, ect...
      pComponent := FindComponent(st_NomEdit);
      While Assigned(pComponent) Do
      Begin
        With TEdit(pComponent) Do
        Begin
          //Là, c'est le traitement du TEdit
        End;
        Inc(in_CptEdit);
        st_NomEdit := Format('SAI_SCORE%s', [FSt_IntToStr0(in_CptEdit, 2)]); //Le paramètre 2 est si les noms sont SAI_SCOREnn, mettre 3 pour SAI_SCOREnnn, ect...
        pComponent := FindComponent(st_NomEdit);
      End;
    End;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Function Fst_IntToStr0(inp_Entier, inp_Taille : Integer) : String;
    Begin
      Result := IntToStr(inp_Entier);
      While Length(Result) < inp_Taille Do
        Result := '0' + Result;
    End;
    Il est aussi possible de mettre les TEdit dans une TStringList.

    Tout dépend de la manière dont vous souhaitez travailler.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    Bonjour,

    Perso, quand j'ai un truc du genre à faire, je créer mes TEdit avec un nom du genre :SAI_SCOREnn, "nn" étant de la forme "01, 02, ... 99". (Si on a plus de 99 données on fait un "nnn")

    Ensuite, pour accéder à tous les SAI_SCOREnn je fais une simple boucle
    {...}
    Il est aussi possible de mettre les TEdit dans une TStringList.

    Tout dépend de la manière dont vous souhaitez travailler.

    JS
    Super merci beaucoup, je m'étais arraché les cheveux sur Tcomponent : aucun exemple qui m'ai permis d'arriver au résultat : j'avais repris l'idée de créer un tableau de Tedit : ça fonctionne mais seulement pour la procédure FormCreate.
    Pour la TStringList c'est prévu : j'étais passé par là pour pouvoir enregistrer les scores dans un fichier avec un petit cryptage et une somme elle même cryptée afin qu'un utilisateur ne puisse modifier son score facilement.

    Meilleurs voeux au passage !!

    Et merci pour votre exemple qui devrait me permettre de travailler sur mon petit projet de test : transférer les données TMemo <=> TStringList <=> TEdit
    Afin d'optimiser mon petit jeu avec les records enregistré dans un fichier, et les visualiser facilement.

    [Edit]
    J'ai pu tester avec succès avec 7 TEdit nommé edScore1 à edScore7 qui sont édités correctement !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Var
      objName : String;
      i : Byte;
      id : TComponent;
    Begin
      Randomize;
      i := 1;
      id := FindComponent('edScore1');
      While Assigned(id) Do Begin
    	With TEdit(id) Do Begin
                TEdit(id).Text := intToStr(i) + '   ' + intToStr(25 + random(99));
            End;
            Inc(i);
            objName := 'edScore' + intToStr(i);
            id := FindComponent(objName);
      End;
    end;
    Encore merci pour votre réponse !! le nom avec la fonction FORMAT n'a pas fonctionné j'ai donc simplifié, je n'utilise de toute façon que des nombres inférieurs à 10,
    et j'aurais effectivement une fonction similaire au cas ou !!
    J'ai encore galéré mais vite fait avec Identifier not found "FindComponent" mais avec la solution proposé, j'ai réussi à me dépatouiller.

    Enfin terminé avec cette erreur et mon projet test plus élaboré : Identifier not found "FindComponent" était réapparue de nouveau.
    C'était bien elle qui m'avait fait recherché la solution alternative d'un tableau de TEdit :/
    Mais après avoir cherché pourquoi dans ma procédure FindComponent ne fonctionnait pas c'est que c'est une procédure externe lancé depuis une procédure évènement !!
    Je suis tombé sur une page qui explique que FindComponent n'est pas une fonction mais une méthode de l'objet parent, donc si on prend le formulaire avec le nom basic 'Form1'
    Form1.FindComponent(_nom_de_l_objet) ça fonctionne !!
    J'espère que ma galère à utiliser une instruction maladroitement pourra vous éclairer par la suite encore merci @Jon Shannow pour votre exemple qui m'a mieux éclairé que celui trouvé auparavant !!

    Bonne continuation @ tous !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un tableau de TEdit
    Par User dans le forum Delphi
    Réponses: 1
    Dernier message: 09/03/2007, 21h47
  2. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  3. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo