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 :

Intialisation paramétrique de plusieurs objets edits ?


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Intialisation paramétrique de plusieurs objets edits ?
    Salut,

    Voila pour ma deuxième demande d'aide sur ce forum.

    J'ai 81 edits dont les noms sont CaseXY (X et Y sont compris entre 1 et 9).

    => j'ai Case11, Case12,......,Case98,Case99.

    Et j'aimerais faire un truc du genre :

    for(int i=1;i<=9;i++)
    for(int j=1;j<=9;j++)
    Case+'i'+'j'->Text=0;


    Quel est la syntaxe correcte à utiliser?


    Petite question supplémentaire :
    Quand un string est vide : il contient '' et pas ' ' ni '\0' comme pour une chaîne de caractères.
    Mais quand je veux faire : CaseXY->Text='';
    Le compilateur me donne une erreur de syntaxe ???? "Charactere constant empty" ?

    Why the hell ?


    Merci d'avance pour votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par krimoleroi Voir le message
    Salut,

    Voila pour ma deuxième demande d'aide sur ce forum.

    J'ai 81 edits dont les noms sont CaseXY (X et Y sont compris entre 1 et 9).

    => j'ai Case11, Case12,......,Case98,Case99.

    Et j'aimerais faire un truc du genre :

    for(int i=1;i<=9;i++)
    for(int j=1;j<=9;j++)
    Case+'i'+'j'->Text=0;


    Quel est la syntaxe correcte à utiliser?


    Petite question supplémentaire :
    Quand un string est vide : il contient '' et pas ' ' ni '\0' comme pour une chaîne de caractères.
    Mais quand je veux faire : CaseXY->Text='';
    Le compilateur me donne une erreur de syntaxe ???? "Charactere constant empty" ?

    Why the hell ?


    Merci d'avance pour votre aide.

    sa doit être ça non ?:
    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
     
    TObjectList *objList = new TObjectList() ;
    TEdit* edit = NULL;
     
    for(int i=0;i<81;i++)
    {
      edit = new TEdit(NULL);
    edit->Parent = Form1;
      objList->Add(edit);
    }
     
    //--------------pour remise à " "
    for( int i=0; i< objList->Count; i++ )
      {
     ((TEdit*) objList->Items[i] )->Text="blabla"; 
      }
      //[...]
      delete objList ;
    j'ai pas encore testé ....

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Tu as aussi FindComponent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TComponent* p = FindComponent("Case15");
    ((TEdit*)p)->Text = "Toto";  // Si Case15 est un TEdit...
    Petite question supplémentaire :
    Quand un string est vide : il contient '' et pas ' ' ni '\0' comme pour une chaîne de caractères.
    Mais quand je veux faire : CaseXY->Text='';
    Le compilateur me donne une erreur de syntaxe ???? "Charactere constant empty" ?

    Why the hell ?
    Parceque...
    Une chaîne, c'est une suite de caractères encadrée par des double-quotes en C. Par ex. "toto". Et ça peut être vide.
    Un caractère, c'est encadré par des quotes. Et ça ne peut pas être vide. D'où l'erreur de syntaxe.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    Hello,

    Tu as aussi FindComponent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TComponent* p = FindComponent("Case15");
    ((TEdit*)p)->Text = "Toto";  // Si Case15 est un TEdit...
    ....
    Oui, mais justement le 15 de Case15 que tu prends comme exemple, doit être CaseXY où X et Y sont des integers que je peux faire varier !!!!

    Comment dois-je m'y prendre pour faire ?

    x=1;
    y=5;

    FindComponent ("Casexy")

    Et que je puisse me retrouver avec Case15!

    Merci

  5. #5
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Il existe aussi la possiblilité d'implémenter une propriété tableau ce qui permet de s'affranchir de la concaténation et des problèmes qui lui sont liés (en particulier avec FindComponent).
    C'est quelque chose qui se pense comme l'objectlist, mais en dérivant de TComponent pour réaliser un objet qui va superviser l'ensemble.
    Il est évident que ça représente quelques lignes de code supplémentaires, mais c'est aussi une façon de développer et de gérer plus proprement.
    Je me limite ici au stricte minimum (à chacun d'y rajouter ce que bon lui semblera) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class jMatEdit : public TComponent
    {
    private :
    int FColCount;
    int FRowCount;
    protected :
        TEdit* __fastcall GetEdit(int ARow, int ACol);
    public :
        __fastcall jMatEdit(TWinControl *AOwner, int ARow, int ACol);
        __fastcall ~jMatEdit();
     
    __property TEdit* Edit[int ARow][int ACol]={read=GetEdit};
    };

    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
     
    __fastcall jMatEdit::jMatEdit(TWinControl *AOwner, int ARow, int ACol)
        : TComponent(AOwner)
    {
    TEdit *E;
    FRowCount = ARow;
    FColCount = ACol;
    for(int y = 0; y < ARow; y++)
        {
        for(int x = 0; x < ACol; x++ )
            {
            E = new TEdit(this);
            E->Parent = AOwner;
            E->SetBounds(x * 80, y * 25, 76, 23);
            }
        }
    }
     
    __fastcall jMatEdit::~jMatEdit()
    {
    }
     
    TEdit* __fastcall jMatEdit::GetEdit(int ARow, int ACol)
    {
    int n = (ARow * FColCount) + ACol;
    if(n < ComponentCount) return (TEdit*)Components[n];
    return NULL;
    }
    A l'usage, on se simplifie la vie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    jMatEdit *Edits;
     
    //--
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Edits = new jMatEdit(this, 9,9);
     
    Edits->Edit[0][0]->Text = "Coucou !";
    }
    //--
    A plus !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Cher dz_robotix,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TObjectList *objList = new TObjectList() ;
    TEdit* edit = NULL;
     
    for(int i=0;i<81;i++)
    {
      edit = new TEdit(NULL);
    edit->Parent = Form1;
      objList->Add(edit);
    }

    Je suis encore débutant donc je vais te dire ce que j'ai compris de ton code !!

    1) Tu crée un objet ObjList (objet que je ne connaissais pas)!!!
    Et qui, je suppose, veut dire une liste d'objet
    2) Tu utilises un pointeur sur un Edit de taille vide (? Pq pas directement 81 ?)
    3) Tu crées par l'intermédiaire de ta première boucle for 81 Edits en les ajoutant un à un à ton ObjList.

    Partant de là ! Je te dirai :

    Je ne vois pas l'intervention du paramètre i dans ta boucle for ?
    Remarque :je n'ai, de plus, pas de Case10 ou 20 Mais seulement de 11 à 19 puis de 21 à 29,etc.


    Mais surtout, mes edits ont déjà été déclarés et je ne peux pas en recréer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //--------------pour remise à " "
    for( int i=0; i< objList->Count; i++ )
      {
     ((TEdit*) objList->Items[i] )->Text="blabla"; 
      }
      //[...]
      delete objList ;
    Cà j'ai compris nickel !


    Maintenant, j'ai dû mal m'exprimer !

    1) J'ai déjà 81 edits donts les noms sont CaseXY (X et Y sont des entiers compris entre 1 et 9)
    2) Je voudrais pouvoir modifier un de mes edits de manière algorithmique
    =>

    int x,y;

    x=1
    y=2

    Casexy->Text="Je suis la Case12";

    x=7
    y=9

    Casexy->Text="Je suis la Case79";

    ...

    Merci beaucoup pour ton aide

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Il existe aussi la possiblilité d'implémenter une propriété tableau ce qui permet de s'affranchir de la concaténation et des problèmes qui lui sont liés (en particulier avec FindComponent).
    C'est quelque chose qui se pense comme l'objectlist, mais en dérivant de TComponent pour réaliser un objet qui va superviser l'ensemble.
    Il est évident que ça représente quelques lignes de code supplémentaires, mais c'est aussi une façon de développer et de gérer plus proprement.
    Je me limite ici au stricte minimum (à chacun d'y rajouter ce que bon lui semblera) :

    Etant débutant je ne comprend que superficiellement ton code et je le trouve effectivement très pro.

    Maintenant, de là à pouvoir l'utiliser efficacement dans mon projet de Resolver de Sudoku...

    Pour ce faire il me faudrait comprendre ton code en profondeur, car, mon projet étant déjà bien avancé, il est plus qu'évident que l'insertion d'une nouvelle classe va m'obliger à revoir les fondements de mon programme.

    merci de m'avoir rappeler que je ne suis encore qu'un débutant et que j'ai encore un long chemin à parcourir

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    x=1;
    y=5;

    FindComponent ("Casexy")

    Et que je puisse me retrouver avec Case15!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString chaine = "Case" + IntToStr(x) + IntToStr(y);
    Après ça, je ne peux que t'encourager à suivre la voie proposée par henderson !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString chaine = "Case" + IntToStr(x) + IntToStr(y);
    Après ça, je ne peux que t'encourager à suivre la voie proposée par henderson !
    Merci Totoche.

    Je vais utiliser ta méthode provisoirement car elle marche nickel et par la suite je vais essayer d'implémenter le code d'henderson !!


    Merci beaucoup pour votre aide.

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

Discussions similaires

  1. appeller plusieurs objets
    Par alex01pernot dans le forum Delphi
    Réponses: 2
    Dernier message: 08/10/2006, 12h42
  2. [C#] Plusieurs objets en Remoting
    Par davestar dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/07/2006, 15h04
  3. m3g : utilisation de plusieurs objets en même temps
    Par chabfive dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 23/06/2006, 14h00
  4. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 15h28
  5. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34

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