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

Composants VCL Delphi Discussion :

[TRichEdit] Copie avec attributs


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut [TRichEdit] Copie avec attributs
    Bonjour à tous! Je découvre les joies du Richedit et j'essayes de faire ceci:

    Un gros Richedit qui contient un gros texte formaté, un petit richedit qui va afficher seulement une partie de celui-ci en gardant le formatage!

    Comment faire pour copier une portion du gros vers le petit avec une procédure comme celle-ci par exemple:

    procedure CopyRichEditPart(Source,display:TRichEdit; start_line; number_of_line:integer);

    Si quelqu'un peut m'aider ce serait impeccable!


  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    L'idée est de passer par le Clipboard.

    On selectionne le texte désiré et on fait copier / coller...
    Le problème est de convertir le numéro de ligne en position de
    caractère pour bien selectionner le text à copier...

    quelque chose comme ceci devrait faire le travail...
    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
     
    procedure CopyRichEditPart(Source,Destination:TRichEdit; StartLine,NumberOfLine:integer);
    var
      i,lStr,cStart,cStop:integer;
    begin
      //== Cherche la position du caractere a la ligne ==
      //== indiqué par StartLine ==
      cStart:=0;
      CStop:=0;
      for i:=0 to Source.Lines.Count-1 do
      begin
        lStr:=Length(Source.Lines.Strings[i]);
        if i<StartLine then cStart:=cStart+lStr;
        if i<StartLine+NumberOfLine then
          CStop:=CStop+lStr
        else
          Break; // On a trouvé la fin... donc on sort de la boucle...
      end;
      //==  Selectionne le text ==
      Source.SelStart:=cStart;
      Source.SelLength:=CStop;
      Source.CopyToClipboard;
      Destination.PasteFromClipboard;
    end;
    Si tu as besoin de quelque chose de plus rapide et sans clipboard...
    faudrait passer par les MemoryStream j'ai l'impression...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup! J'avais été aussi légèrement c.n, j'avais fait copier/coller du richedit de départ, mais il était en readonly donc je ne voyais pas l'opération se faire!

    Impeccable! La taille du clipboard suffit car le but est d'afficher une partie du contenu d'un fichier de désassemblage façon IDAPRO avec les sélections multiples et autres effets visuels!


  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    J'ai réaliser également ceci qui ne semble pas souffrir de la limitation à 32 K,je pensais qu'il existait un EM_EXLINEINDEX!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure CopyRichEditPart(Source,Destination:TRichEdit; StartLine,NumberOfLine:integer);
    begin
       Source.SelStart:= Source.Perform(EM_LINEINDEX,StartLine,0);
       Source.SelLength:= Source.Perform(EM_LINEINDEX,StartLine+NumberOfLine,0)-Source.SelStart -1;
       Source.CopyToClipboard;
       Destination.PasteFromClipboard;
    end;
    Ainsi on ne cherche pas la fin de ligne! Merci beaucoup pour cette réponse!


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2007, 14h51
  2. Inserer dynamiquement des champs input avec attribut
    Par titou250 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2007, 09h44
  3. Pb avec attribut static
    Par likenoother dans le forum C++
    Réponses: 3
    Dernier message: 24/08/2006, 12h54
  4. Envoi de formulaire avec attribution de valeur
    Par nicovoa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2006, 18h22
  5. [MFC]Probleme avec attributs d'une LOGFONT
    Par Fildz dans le forum MFC
    Réponses: 3
    Dernier message: 08/01/2006, 17h59

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