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 :

Manipulation sur la composante 'Edit'


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut Manipulation sur la composante 'Edit'
    salut a tous! bonne journée
    Pour introduire un polynôme comme (2)X1+(3)X2+(5)X3+....+(5)Xn j'ai utilisé l'événement onKeyPress de la composante Edit, alors je voulais réaliser la chose suivante:
    Quand l'utilisateur fini d'introduire le coefficient de X et Tape La lettre X,on aura X suivi de son indice automatiquement.
    exemple: l'utilisateur tape 1.5X alors ça s'affichera 1.5Xi dans L'edit.
    sachant que j'ai déjà le compteur i et tout.
    mon problème c que quand je met: Edit->Text=Edit->Text+IntToStr(i) il m'affiche les donnée que j'avais au paravent avec une autre disposition comme
    XXX1+2+3 c-a-dir les x d'un coté et les chiffres de l'autre!
    je voudrais savoir aussi s'il vous plais comment mettre le curseur a la fin de l'edit!
    je m'excuse si j'ai trop écrit ou mal exprimé
    Merci

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Pour le texte dans le TEdit, il vaut mieux que tu passe par une variable intermédiaire : tu récupère ce qu'il y as dans le TEdit, tu ajoute ce que tu veut, puis tu remet le contenu de cette variable dans le TEdit.

    Pour le curseur il suffit de mettre la propriété SelStart égale à la taille de ta chaine

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Citation Envoyé par pottiez Voir le message
    Pour le texte dans le TEdit, il vaut mieux que tu passe par une variable intermédiaire : tu récupère ce qu'il y as dans le TEdit, tu ajoute ce que tu veut, puis tu remet le contenu de cette variable dans le TEdit.

    Pour le curseur il suffit de mettre la propriété SelStart égale à la taille de ta chaine
    Merci beaucoup Pottiez! je vais essayer tout ça!

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Citation Envoyé par pottiez Voir le message
    Pour le texte dans le TEdit, il vaut mieux que tu passe par une variable intermédiaire : tu récupère ce qu'il y as dans le TEdit, tu ajoute ce que tu veut, puis tu remet le contenu de cette variable dans le TEdit.

    Pour le curseur il suffit de mettre la propriété SelStart égale à la taille de ta chaine
    j'ai fait ça

    valeur=Edit1->Text;
    valeur=valeur+IntToStr(compteur);
    Edit1->Text=valeur;
    J'ai toujours le Même problem!
    est ce qu'il ya quelqu'un qui puisse m'aider

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut Help
    essayer de faire ça pour mieux me comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     int i;
    AnsiString c;
     
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
    if(Key==120)  //la lettre x
       {
            c=Edit1->Text+StrToInt(i);
            Edit1->Text=c;
            i++;
       }
    }

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Essaye de débuger pour voir ce que vaut ta variable valeur

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Si je comprends ce qui est recherché, peut être qqhose comme:
    (avec flagX en int , private)
    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
     
    void __fastcall TForm6::Edit2KeyDown(TObject *Sender, WORD &Key,
    	  TShiftState Shift)
    {
    switch(Key)
    {
    	case 'X':
    			flagX++;
    	break;
    	default:
    	break;
    }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm6::Edit2KeyUp(TObject *Sender, WORD &Key,
    	  TShiftState Shift)
    {
    switch(Key)
    {
    	case 'X':
    		Edit2->Text = Edit2->Text.Insert(IntToStr(flagX), Edit2->Text.Length()+1) ;
    	break;
    	default:
    	break;
    }
    }
    J'ai voulu forcer le repositionnement du 'Caret' au bout du texte, et dans le OnKeyUp, j'ai fait un essai (un peu trop vite) avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		keybd_event(VK_CONTROL, 0,1,0);
    		keybd_event(VK_RIGHT, 0,1,0);
    		keybd_event(VK_RIGHT, 0,2,0);
    		keybd_event(VK_CONTROL, 0,2,0);
    -> ben c'est pas a faire ! On dirais que mon PC considère que la touche 'ctrl' est restée appuyée, j'ai du faire un 'restart'
    Ya surement mieux ...

    @+

  8. #8
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    et un truc tout simple comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
     
    if (Edit1->Text.SubString(Edit1->Text.Length(),1) == "x" || Edit1->Text.SubString(Edit1->Text.Length(),1) == "X" )
    {
      Edit1->Text=Edit1->Text+IntToStr(i);
      i++;
    }
    }
    avec i initialisé à 0 kkpart en dehors du onchange

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 148
    Par défaut
    Salut à tous,

    A mon avis ce n'est pas une très bonne idée que tu programmes ton code dans "OnKeyPress", parce que même quand tu effaces par exemple ton conteur va continuer à s'incrémenter, donc tu vas te retrouver avec des indices qui ne correspondent pas à ton polynôme !!! J'ai essayé de procéder ainsi :

    Tu programmes ton code dans OnClique, à chaque fois que tu cliques sur ton Edit, il va t'afficher ce que t'as entré comme nombre plus "X"+"le nombre de fois que t'as cliqué qui correspond à ton vrai indice" et tu continue comme cela en rajoutant + et la suite de ton polynôme. Voici le code pour que ça soit plus clair :

    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
     
     
    //-------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int i=0;                              //Initialisation du compteur
    String var;
    int l;
     
     
    //-------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
     
    }
    //-------------------------------------------------------------------------
     
     
    void __fastcall TForm1::Edit1Click(TObject *Sender)
    {
    i=i+1;
    var=Edit1->Text;
    l=var.Length();
    Edit1->Text=var+"X"+IntToStr(i);
    var=Edit1->Text;
    Edit1->SelStart=var.Length();
    }
    //-------------------------------------------------------------------------
    J'espère que c'est ce que tu cherches.

    Bon courage.

    Re,

    Pardon, j'ai rajouté la variable "l" inutilement .

    @+

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut Sunchaser
    Le comportement de la simulation des touches tel que tu l'a ecrit est normal, si tu simule l'appuie il faut simuler le relachement, voir le lien sur les hooks
    Voici l'exemple qui est donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    keybd_event(VK_LMENU,0,0,0); // appuie ALT
     
    keybd_event(VK_RETURN,0,0,0); // appuie ENTER
    keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); // relache ENTER
     
    keybd_event(VK_LMENU,0,KEYEVENTF_KEYUP,0); // relache ALT

  11. #11
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    Hoopsy :

    pourquoi tu mets ça dans un OnClick?
    ta remarque sur la suppression est judicieuse mais tu ne donnes pas de solution au final..si?
    mais en effet, ce que je suggères ne gère pas ce cas..

  12. #12
    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 !

    On peut essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
    AnsiString N = Edit1->Text;
    if((Key == 'x') || (Key == 'X'))
        {
        N = N + "X" + IntToStr(Xn);
        Edit1->Text = N;
        Edit1->SelStart = N.Length();
        Xn++;
        Key = 0;
        }
    }
    A plus !

  13. #13
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Oui bravo, si je comprends bien 'Edit1->SelStart = N.Length();' doit résoudre le repositionnement du 'Caret' d'une manière bien plus simple et sure ...

    ++

  14. #14
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Merci beaucoup les gars, vous m'avez beaucoup aidé à résoudre mon problème.
    Encore merci a tous !!!




    Citation Envoyé par henderson Voir le message
    Salut !

    On peut essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
    AnsiString N = Edit1->Text;
    if((Key == 'x') || (Key == 'X'))
        {
        N = N + "X" + IntToStr(Xn);
        Edit1->Text = N;
        Edit1->SelStart = N.Length();
        Xn++;
        Key = 0;
        }
    }
    A plus !

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

Discussions similaires

  1. Savoir plus sur Oracle Express Edition
    Par cnguyen dans le forum Oracle
    Réponses: 1
    Dernier message: 07/08/2006, 14h31
  2. manipulation sur date dans une requête
    Par willis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/07/2006, 15h43
  3. TNSName.ora sur Oracle10g Express edition Client
    Par eag35 dans le forum Oracle
    Réponses: 7
    Dernier message: 12/06/2006, 09h42
  4. Manipulations sur les bits
    Par ThE_LaSt dans le forum C
    Réponses: 23
    Dernier message: 27/03/2006, 14h22
  5. Manipulation sur recordset
    Par dl_jarod dans le forum ASP
    Réponses: 12
    Dernier message: 25/10/2005, 10h32

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