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

C++Builder Discussion :

Probleme avec TEdit


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut Probleme avec TEdit
    Bonjour,

    Voila, j ai defini sur ma fiche 21 composants TEdit (Edit1, ... Edit21).
    A l interieur de chacun de ces composants je veux afficher une valeur (qui elle vient d un tableau a une dimension de taille 255).
    Je veux pouvoir faire defiler mon tableau a l interieur de ces 21 composants (J espere que je suis clair).

    Pour cela, j aimerais utiliser une boucle "for" et remplir la valeur du TEdit correspondant.

    Le probleme c est que je ne veux pas taper dans mon source Edit1->Text =
    puis Edit2->

    ...
    jusqu a Edit21->Text =

    Comment est il possible d automatiser tout ca, car si je fais une AnsiString qui contient le nom du genre: editName = "edit"+position
    et que je l utilise de lq mqniere suivante:
    Form1->editName->Text

    le compilateur me donne une erreur car il ne connait pas ca (ce qui parait logique apres reflexion)

    Mais comment faire ???

    Passer par des macros qui remplace tout ca lors de la precompilation

    Ou faire pointer mes 21 Edit->Text sur des pointeurs d entier

    ...

    Je sais plus moi

    Merci d avance

  2. #2
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    tu peux par exemple employer la fonction
    FindComponent qui te retoune le pointeur vers le composant grâce à son nom :

    exemple avec 10 TEdits:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            int tab[10]={2,23,45,65,78,89,100,23,34,4};
            for(int i=1;i<=10;i++){
               TEdit * Edit=NULL;
               Edit =(TEdit*) FindComponent("Edit"+IntToStr(i));
               if(Edit!=NULL){
                     Edit->Text=IntToStr(tab[i-1]);
               }
            }
    }

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si tes 21 TEdit sont sur le même parent et si l'algo pour les placer n'est pas trop
    compliqué, alors le plus simple est encore de faire une class dérivée de TComponent
    qui va créer tes 21 TEdit dynamiquement. Ensuite, il suffit de développer une méthode
    qui va traiter ses propres "Components" c'est à dire les 21 TEdit.
    Quelque chose dans ce genre là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class jEdits : public TComponent
    {
    public :
        __fastcall jEdits(TComponent *Owner);
        __fastcall ~jEdits();
        void __fastcall Afficher(int *Tableau, int N, int Max);
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    __fastcall jEdits::jEdits(TComponent *Owner) : TComponent(Owner)
    {
    TEdit *E;
    for(int j = 0; j < 21; j++)
        {
        E = new TEdit(this); //E est détenu par l'objet jEdits
        E->Parent = (TWinControl*)Owner;  //Owner dérivé de TWinControl (TForm, TPanel..)
        E->SetBounds(., ., ., .);
        }
    }
    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
    void __fastcall jEdits::Afficher(int *Tableau, int N, int Max)
    {
    int n;
    for(int j = 0; j < 21; j++)
        {
        n = N + j;
        if(n < Max) 
            {
            ((TEdit*)Components[j])->Text = IntToStr(Tableau[n]);
            }
        else
            { 
            ((TEdit*)Components[j])->Text = "Overflow";
            }
        }
    }
    Sauf erreur de ma part...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TScrollBar *Scrollbar1;
    jEdits *Edits;
    int Tableau[255];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edits = new jEdits(this); //dans le constructeur de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edits->Afficher(Tableau, ScrollBar1->Position, 255);
    NB : La destruction des objets dérivés de TComponent est automatique.

    A plus !

  4. #4
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    voui c 'est évidemment beaucoup plus élégant
    ..et plus évolué...pour afficher un tableau d'entier.

    personellement j'aurais plutôt choisi une StringGrid ...

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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