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 collage dans un TEdit [Trucs & Astuces]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Points : 41
    Points
    41
    Par défaut Probleme collage dans un TEdit
    Salut!
    Je voudrais savoir comme faire pour avoir toutes mes lignes copiée quand je les colles (CTRL+C) dans un TEdit d'un prog.
    Quand je colle plusieur ligne dans mon TEdit il ne prend que la premier.
    Je veut pouvoir avoir toute les lignes dans mon TEdit.

    Merci d'avance.
    A plus!

  2. #2
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 045
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 045
    Points : 8 258
    Points
    8 258
    Par défaut
    Le TEdit ne peut recevoir qu'une seule ligne il est possible de le passer en multilignes
    en lui donnant le style ES_MULTILINE
    Mais en ce cas ça devient en gros un TMemo.

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Le TEdit étant un composant simple ligne, la seule solution que je vois serais d'intercepter le message WM_PASTE, de traiter le contenu du presse-papier pour en retirer les retours à la ligne, et de positionner ensuite la propriété Text du TEdit avec ce contenu retravaillé.

    Le but est-il vraiment de tout récupérer sur une seule ligne ? Un TMemo ne serait-il pas plus approprié ?

    Cordialement,

    Arnaud

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Hum...tu voudrais récupérez tout sur une seule ligne ?

    Par exemple si tu copie cela :

    Coucou
    Bonjour
    Adieu
    tu voudrais avoir dans ton TEdit:

    CoucouBonjourAdieu
    ?
    Dans ce cas utilise un TMemo. Tu colle dans le TMemo. Ensuite tu prend la propriété Text du TMemo (qui synthétise le contenu du TMemo dans une chaîne mais pas forcément une seule ligne) à laquelle tu enlèves tous les caractères de nouvelle ligne...

    Cela pourait donner par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    une_ligne = StringReplace( Memo1->Text, "\n", "", TReplaceFlags() << rfReplaceAll);
    Dernière chose, il faut déclencher cette ligne de code lorsque tu effectue le collage... Je ne me rappel pas l'existence d'un évènement OnPaste (je n'ai pas BCB sous la main ici)...

    Par contre avec cette solution tu ne dois pas coller le résultat dans un TEdit mais dans un TMemo (remarque pour avoir le même aspect c'est pas compliqué ).

    En espérant avoir été utile...

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    En complément, si tu veux fais quelquechose de similaire avec un TEdit directement, tu peux par exemple créer un nouveau composant ou simplement modifier la méthode de traitement WindowProc de ton composant.

    Exemple :

    .h
    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
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
       TEdit *Edit1;
    private:	// Déclarations de l'utilisateur
       TWndMethod OldWndProc;
    void __fastcall MyWndProc(Messages::TMessage &Message);
    public:		// Déclarations de l'utilisateur
       __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    .cpp
    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
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    #include "QClipbrd.hpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
       OldWndProc = Edit1->WindowProc;
       Edit1->WindowProc = MyWndProc;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MyWndProc(Messages::TMessage &Message)
    {
       if(Message.Msg == WM_PASTE)
       {
          AnsiString txt = Clipboard()->AsText;
          Edit1->Text = StringReplace(txt, "\r\n", "", TReplaceFlags() << rfReplaceAll);
       }
       else
       {
          OldWndProc(Message);
       }
    }
    Cordialement

    Eric

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    Finalement J'ai mis un Memo a la place de mon Edit et sa marche comme je voulais.
    J'essayerai la solution de Ricky81 plus tard.
    Merci a tous!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2010, 11h36
  2. [FLASH MX2004] Problème accent dans un XML
    Par cinetryx dans le forum Flash
    Réponses: 10
    Dernier message: 30/05/2007, 00h26
  3. probleme mouvement dans un paysage
    Par nonoRedDevils dans le forum OpenGL
    Réponses: 24
    Dernier message: 24/06/2004, 12h12
  4. [BCB6] Probleme onglet dans IDE
    Par bgautier dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/01/2004, 16h20

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