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 :

identification de mon edit


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 29
    Points
    29
    Par défaut identification de mon edit
    salut
    i'ai un probleme d'itentifier mon edit apres la création voila mon code que je travaille sur lui il est bien executer
    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
    int x=20;
     TEdit*ed ;
     TEdit*ad ;
     TLabel *lb ;
     TLabel *lab;
     int k;
     for( k=0;k<Edit1->Text.ToInt();k++)
     {
        ed=new TEdit(Panel1);
        ad=new TEdit(Panel1);
        lb=new TLabel(Panel1);
        lab=new TLabel(Panel1);
        ed->Parent=Panel1  ;
        ad->Parent=Panel1  ;
        lb->Parent=Panel1  ;
        lab->Parent=Panel1  ;
        ed->Name="myed" +IntToStr(k+1);
        ad->Name="myad" +IntToStr(k+1);
        lb->Name="mylb" +IntToStr(k+1);
        lab->Name="mylab" +IntToStr(k+1);
        ed->Width=100;
        ad->Width=100;
        ed->Text="";
        ad->Text="";
        lb->Caption="x =" + IntToStr(k+1);
         lab->Caption="y =" + IntToStr(k+1);
        ed->Left=x;
        ad->Left=x+120;
        lb->Left=x-15 ;
        lab->Left=x+120-15 ;
        ed->Top=x+30*k;
        lb->Top=x+30*k;
        ad->Top=x+30*k;
        lab->Top=x+30*k;
     }
    mais ares que je veux l'identifier j'ai pas trouver la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int s,p;
    for(k=0;k<Edit1->Text.ToInt();k++)
       p= myad IntToStr(k+1+1)->Text.ToInt() -myad IntToStr(k+1-1)->Text.ToInt
    il ne travaille pas

  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
    salu aboishak,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p= myad IntToStr(k+1+1)->Text.ToInt() -myad IntToStr(k+1-1)->Text.ToInt
    ton 'myad' c'est quoi au juste?
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Peut etre avec FindComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p = StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1+1)))->Text, -1 )
      - StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1-1)))->Text, -1 )
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  4. #4
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    il y a la possibilité de passer par une TList

    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
    int x=20;
     TList* List_ed = new TList;
     TList* List_ad = new TList;
     
     TEdit*ed ;
     TEdit*ad ;
     TLabel *lb ;
     TLabel *lab;
     int k;
     for( k=0;k<Edit1->Text.ToInt();k++)
     {
        ed=new TEdit(Panel1);
        ad=new TEdit(Panel1);
        lb=new TLabel(Panel1);
        lab=new TLabel(Panel1);
        ed->Parent=Panel1  ;
        ad->Parent=Panel1  ;
        lb->Parent=Panel1  ;
        lab->Parent=Panel1  ;
        ed->Name="myed" +IntToStr(k+1);
        ad->Name="myad" +IntToStr(k+1);
        lb->Name="mylb" +IntToStr(k+1);
        lab->Name="mylab" +IntToStr(k+1);
        ed->Width=100;
        ad->Width=100;
        ed->Text="";
        ad->Text="";
        lb->Caption="x =" + IntToStr(k+1);
         lab->Caption="y =" + IntToStr(k+1);
        ed->Left=x;
        ad->Left=x+120;
        lb->Left=x-15 ;
        lab->Left=x+120-15 ;
        ed->Top=x+30*k;
        lb->Top=x+30*k;
        ad->Top=x+30*k;
        lab->Top=x+30*k;
     
         //Sauvegarde des pointeurs dans les listes
        List_ed->Add(ed);
        List_ad->Add(ad);
     
     }
    Ensuite pour rappeler le bon edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int s,p;
    for(k=0;k<Edit1->Text.ToInt();k++)
       p= ((TEdit)List_ad->Items[k+1+1])->Text.ToInt() - ((TEdit)List_ad->Items[k])->Text.ToInt();
    Il faut par contre que les lists soit déclarées en global et attention lors du delete, il faut vider les list avant de deleter le pointeur !

    En espérant que ça vous aide

    PS : j'ai pas tester le code, il doit y avoir des erreurs de syntaxe.
    Proverbe nain : On boira du lait le jour où les vaches mangeront du houblon !

    le site de ma douce et tendre

  5. #5
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    ed=new TEdit(Panel1);
    ad=new TEdit(Panel1);
    lb=new TLabel(Panel1);
    lab=new TLabel(Panel1);
    Panel1 est propriétaire des TEdit, par conséquent on peut se servir de Components.
    Si Panel1 n'est propriétaire que de ces objets là, dans ce cas, on peut considérer que Components reflète l'ordre de création des objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ((TEdit*)Panel1->Components[0]) <<-- ed
    ((TEdit*)Panel1->Components[1]) <<-- ad
    ((TLabel*)Panel1->Components[2]) <<-- lb
    ((TLabel*)Panel1->Components[3]) <<-- lab
    Cette manière de rédiger peut sembler longue mais reste valable, en tout cas beaucoup plus pertinente (et surtout beaucoup plus rapide en terme d'exécution) que FindComponent.
    A ce stade, on n'a pas besoin de donner de nom aux composants créés; du point de vue dynamique celà n'a pas de sens !

    Par contre, il ne faut pas hésiter à objétiser (avec BCB on a tout ce qu'il faut sous la main pour l'envisager) !
    On peut développer une classe dérivée de TPanel qui se chargera de créer les objets.
    Et dans ce cas, rien n'empèche de définir, pour cette classe, un pointeur par objet !
    Celà permet d'avoit une meilleure vision de ce que l'on fait, sans parler d'une meilleure accessibilité aux objets eux-mêmes !
    Au fond, c'est l'art et la manière de préparer le développement : soit on développe à la volée (jusqu'à se trouver le dos au mur), soit on objétise (pour éloigner le mur) !

    A plus !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    j'ai deux probleme le premier c'est que je n'arive pas rendre k+1+1 a une valeur donne
    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
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    int p,m,s=0;
     for( int k=0;k<Edit1->Text.ToInt();k++)
     {
     if(k+1+1>  Edit1->Text.ToInt())
     {
     k+1+1=1;
     
    p = StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1+1)))->Text, -1 )
      - StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1-1)))->Text, -1 )  ;
     m=(StrToIntDef (((TEdit*) FindComponent("myed" +IntToStr(k+1)))->Text, -1))*p;
     Edit2->Text=IntToStr(s+m);
     }
     if (k+1-1=0)
     {
     (k+1-1)=Edit1->Text.ToInt();
     p = StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1+1)))->Text, -1 )
      - StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1-1)))->Text, -1 )  ;
     m=(StrToIntDef (((TEdit*) FindComponent("myed" +IntToStr(k+1)))->Text, -1))*p;
     Edit2->Text=IntToStr(s+m);
     }
     else
     {
     p = StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1+1)))->Text, -1 )
      - StrToIntDef( ((TEdit*) FindComponent("myad" + IntToStr(k+1-1)))->Text, -1 )  ;
     m=(StrToIntDef (((TEdit*) FindComponent("myed" +IntToStr(k+1)))->Text, -1))*p;
     Edit2->Text=IntToStr(s+m);
     }
     }
    le deuxieme c'est comment j'arive a redonner une 2ieme valeur a edit1 pour réecré les composant

  7. #7
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    ed=new TEdit(Panel1);
    ...
    Si Panel1 est propriétaire des objets alors ton code est normalement sans effet puisque ta méthode est celle de la classe TForm1 ce qui oblige à rechercher pour Form1 des objets dont il n'est pas propriétaire !
    FindComponent travaille en interne à l'aide de Components (voir l'aide pour TComponent::Components et TComponent::FindComponent) et ne va plus loin !

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Panel1->FindComponent(...)
    A plus !

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    oui j'ai éssaier ton caude
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p = StrToIntDef(( Panel1->FindComponent("myad" + IntToStr(k+1+1)))->Text, -1 )
      - StrToIntDef(( Panel1->FindComponent("myad" + IntToStr(k+1-1)))->Text, -1 )  ;
     m=(StrToIntDef ((Panel1->FindComponent("myed" +IntToStr(k+1)))->Text, -1))*p;
     Edit2->Text=IntToStr(s+m);
    mais le problemme c'est dans cette ligne
    il me dit Lvalue required

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonsoir,

    Citation Envoyé par aboishak Voir le message
    oui j'ai éssaier ton caude
    mais le problemme c'est dans cette ligne
    il me dit Lvalue required
    '=' est un opérateur d'affectation.
    L'opérateur pour tester une égalité est '=='

    Cordialement,

    Benjamin

  10. #10
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Parce que FindComponent renvoie une adresse sur un objet de type TComponent (disons qu'il s'agit d'un pointeur vers TComponent).

    Donc il faut transtyper sur le type attendu !

    La manière dont tu code l'ensemble est assez périlleuse, parce que si FindComponent revoie NULL ...

    Il vaudrait mieux (je pense) détailler ton code : étape par étape !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TEdit *Edit1 = (TEdit*) Panel1->FindComponent("blabla" + IntToStr(...));
    if(Edit1 != NULL)
        {
        TEdit *Edit2 = (TEdit*) Panel1->...
        if(Edit2 != NULL)
            {
            ....
            }
        }
    Si tu avais développé une classe dérivée de TPanel, tu aurais eu beaucoup moins de soucis !

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class jPanel : public TPanel
    {
    public :
    TEdit *E1;
    TEdit *E2;
    TLabel *L1;
    TLabel *L2;
        __fastcall jPanel(TWinControl *AOwner);
        __fastcall ~jPanel();
        void __fastcall FaireQuelqueChose();
    };

    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
     
    __fastcall jPanel::jPanel(TWinControl *AOwner)
        : TPanel(AOwner)
    {
    Parent = AOwner;
    SetBounds(... ...);
    //Construction des objets
    E1 = new TEdit(this);
    E1->Parent = this;
    E1->SetBounds(..)
    ...
    ...
    }
     
    __fastcall jPanel::~jPanel()
    {
    }
     
    void __fastcall jPanel::FaireQuelqueChose()
    {
    //par exemple affiche dans L1 la somme des valeurs affichées dans E1 et E2
    L1->Caption = IntToStr( E1->Text.ToIntDef(0) + E2->Text.ToIntDef(0) );
    }
    Après c'est une affaire d'événementielle, au sens où "FaireQuelqueChose" certes... mais à quel moment précis ?

    A plus !

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    si je veux travailler avec les listes
    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
    int x=20;
     TList* List_ed = new TList;
     TList* List_ad = new TList;
     
     TEdit*ed ;
     TEdit*ad ;
     TLabel *lb ;
     TLabel *lab;
     int k;
     for( k=0;k<Edit1->Text.ToInt();k++)
     {
        ed=new TEdit(Panel1);
        ad=new TEdit(Panel1);
        lb=new TLabel(Panel1);
        lab=new TLabel(Panel1);
        ed->Parent=Panel1  ;
        ad->Parent=Panel1  ;
        lb->Parent=Panel1  ;
        lab->Parent=Panel1  ;
        ed->Name="myed" +IntToStr(k+1);
        ad->Name="myad" +IntToStr(k+1);
        lb->Name="mylb" +IntToStr(k+1);
        lab->Name="mylab" +IntToStr(k+1);
        ed->Width=100;
        ad->Width=100;
        ed->Text="";
        ad->Text="";
        lb->Caption="x =" + IntToStr(k+1);
         lab->Caption="y =" + IntToStr(k+1);
        ed->Left=x;
        ad->Left=x+120;
        lb->Left=x-15 ;
        lab->Left=x+120-15 ;
        ed->Top=x+30*k;
        lb->Top=x+30*k;
        ad->Top=x+30*k;
        lab->Top=x+30*k;
     
         //Sauvegarde des pointeurs dans les listes
        List_ed->Add(ed);
        List_ad->Add(ad);
     
     }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     int s,p;
    for(int k=0;k<Edit1->Text.ToInt();k++)
    {
       p= ((TEdit)List_ad->Items[k+1+1])->Text.ToInt() - ((TEdit)List_ad->Items[k+1-1])->Text.ToInt();
     if (k+1+1>Edit1->Text.ToInt())
     {
     k+1+1=1;
     p= ((TEdit)List_ad->Items[k+1+1])->Text.ToInt() - ((TEdit)List_ad->Items[k+1-1])->Text.ToInt();
     }
     }
    l'ereur c'est que il undifine list
    svp aide moi

  12. #12
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Déclare List_ed et List_ad en global a ta form
    Proverbe nain : On boira du lait le jour où les vaches mangeront du houblon !

    le site de ma douce et tendre

  13. #13
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    p= ((TEdit)List_ad->Items[k+1+1])->Text.ToInt()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p= ((TEdit*)List_ad->Items[k+1+1])->Text.ToIntDef(0)
    ToInt peut générer une exception lorsque l'expression littérale n'est pas conforme.
    ToIntDef(0) ne génère pas d'exception et renverra la valeur 0 si l'expression littérale n'est pas conforme.

    Par contre ... je ne comprend absolument pas pourquoi k+1+1 .... et encore moins k+1+1 = 1 ... Mais bon ... chaque chose en son temps !

    A plus !

  14. #14
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Idem k+1+1 = 1 je vois pas trop...

    Comme k+1-1 revient à ecrire k pour ton index.

    Tu risques d'avoir une erreur au niveau de la boucle for car k va jusqu'au maximum du tableau et tu essayes de lire l'indice k+1...il va pas aimer à l'execution.

    Bon courage
    Proverbe nain : On boira du lait le jour où les vaches mangeront du houblon !

    le site de ma douce et tendre

  15. #15
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Sans doute qu'il calcule sur un actuel et sur son précédent donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(int k = 1; ...)
    On sait que pour la première itération, on aura comme valeur d'index k = 1 et k-1 = 0, sans risque d'être hors de la liste !

    A plus !

Discussions similaires

  1. [Débutant] ecrire en arabe sur mon edit dans mon interface
    Par roubase dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/01/2012, 11h04
  2. Identification de mon système : besoin d'aide
    Par Goffer dans le forum Mathématiques
    Réponses: 0
    Dernier message: 23/05/2010, 19h27
  3. [Edit] Aligner mon texte à droite
    Par touhami dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/05/2008, 20h14
  4. Demander une identification sur mon site
    Par vxe01 dans le forum Sécurité
    Réponses: 3
    Dernier message: 29/06/2007, 13h49
  5. cacher curseur sur mon edit?
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 3
    Dernier message: 19/05/2007, 20h50

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