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 :

Insérer un tableau dans un trichEdit en préservant le texte existant


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Insérer un tableau dans un trichEdit en préservant le texte existant
    bonjour,

    J'ai un composant tRichEdit dans lequel j'insère du texte, des images, de la mise en page et je voudrais maintenant insérer des tableaux

    j'ai tenté ce code après avoir essayé un simple RichEdit.lines.add...
    le souci est que la partie tableau n'est pas interprétée en rtf mais comme du simple texte

    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
     
             s := tStringList.create;
             myStream := TMemoryStream.create;
             iCurrPos := myRichEdit.linefromChar(myRichEdit.GetLineIndex(-1));
    //récupération des lignes existantes avant l'insertion
             for iboucle := 0 to iCurrPos do
                s.Add(myRichEdit.lines[iboucle]);
    //début du tableau
             s.add('\trowd\trgaph108');
             s.add('\clbrdrt\brdrth\clbrdrl\brdrth\clbrdrb\brdrth\clbrdrr\brdrth');
             for i := 1 to nCols do s.Add(format('\cellx%d',[ i * ( 2000 + iWidth )]));
             for j := 1 to nLignes do
             begin
               s.add('\intbl');
               for i := 1 to ncols do s.add('\cell');
               s.Add('\row');
             end;
    //récupération du texte après l'endroit d'insertion du tableau
             for iboucle := iCurrPos to myRichEdit.lines.count -1 do
                s.add(myTxt.lines[iboucle]);
     
             s.SaveToStream(myStream);
             myStream.Position := 0;
     
             myRichEdit.Lines.LoadFromStream(myStream);
     
             s.free;
             myStream.free;
    ce code n'interprete pas le tableau en tableau mais en simple texte

    merci d'avance

  2. #2
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    A vue de nez ça a l'air correct ce que tu as écris. Mais je pense qu'il y a une erreur dans la chaîne qui décrit ton tableau et du coup le RichEdit l’interprète comme du texte brut.
    Tu as essayé de récupérer ta chaîne et de l'enregistrer en fichier .rtf ?


    De mon côté, j'ai ce code qui fonctionne très bien. Je n'ai pas implémenté la partie insertion au niveau du curseur.

    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
     
    procedure SetRTFToRichEdit(const aRtf: String; pRichEdit: TRichEdit);
    var
      aStream: TMemoryStream;
      s: TStringList;
    begin
      s := TStringList.create;
      s.Text := aRtf;
     
      aStream := TMemoryStream.create;
      s.SaveToStream(aStream);
      aStream.Position := 0;
     
      pRichEdit.lines.LoadFromStream(aStream);
      aStream.free;
      s.free;
    end;
     
    function TableauRTF(const Nbcol, Nbligne, Largeur: integer): string;
    var
      i, j: integer;
    begin
      result := '{\rtf1\trowd';
      for i := 1 to Nbcol do
        result := result + format('\cellx%d', [i * (2000 + Largeur)]);
      for j := 1 to Nbligne do
      begin
        result := result + '\intbl';
        for i := 1 to Nbcol do
          result := result + '\cell';
        result := result + '\row';
      end;
      result := result + '}';
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      s: String;
    begin
      s := TableauRTF(2, 5, 100);
     
      SetRtfToRichEdit(s, RichEdit1);
     
    end;

  3. #3
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    En fait, je pense que j'ai compris ton soucis : tu mélanges du texte formaté et du texte non formaté dans ta stream.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    tu reconstruit le fichier rtf a chaque fois ?
    ou tu essaie d’insérer ton code directement dans ton richeedit ?
    quel version de delphi ?
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    tu reconstruit le fichier rtf a chaque fois ?
    ou tu essaie d’insérer ton code directement dans ton richeedit ?
    quel version de delphi ?
    Je pense qu'il essaie d'insérer le code directement dans le RichEdit à la position du curseur.
    L'idée de départ est sympa, c'est à dire qu'il récupère le début du texte du RichEdit jusqu'au curseur, puis insère sa data (le tableau en l’occurrence), et ajoute ensuite le reste du texte, donc depuis le curseur jusqu'à la fin du texte.
    Mais en faisant de la sorte, il perd le formatage du début et de la fin. Et le richetEdit quand il mange sa String hétérogène, ne comprend pas, et le prend pour du texte brut.

    J'ai vu des exemples sur le net de copie via le clipboard. Ceci pourrait être une piste pour ne pas perdre le formattage.

    C'est un problème intéressant.

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut
    effectivement
    Citation Envoyé par blonde Voir le message
    Je pense qu'il essaie d'insérer le code directement dans le RichEdit à la position du curseur.
    L'idée de départ est sympa, c'est à dire qu'il récupère le début du texte du RichEdit jusqu'au curseur, puis insère sa data (le tableau en l’occurrence), et ajoute ensuite le reste du texte, donc depuis le curseur jusqu'à la fin du texte.
    Mais en faisant de la sorte, il perd le formatage du début et de la fin. Et le richetEdit quand il mange sa String hétérogène, ne comprend pas, et le prend pour du texte brut.

    J'ai vu des exemples sur le net de copie via le clipboard. Ceci pourrait être une piste pour ne pas perdre le formattage.

    C'est un problème intéressant.
    pour ce faire il doit reprendre le rtf d'origine et y insererer a l'endrois voulu juste la construction de son tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // definition du taleau
     result := '\trowd'; // Debut du tableau 
     
      for i := 1 to Nbcol do // Remplissage de l'entete du Tableau 
        result := result + format('\cellx%d', [i * (2000 + Largeur)]);
     
      // Remplissage  du Tableau 
      for j := 1 to Nbligne do
      begin
        result := result + '\intbl'; // Debut de la ligne 
        for i := 1 to Nbcol do
            result := result + '\cell'; // Remplissage des Cellules 
        result := result + '\row'; // Fin du Tableau
    le
    {\rtf1
    c'est le header du rtf
    et le
    }
    la fin
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Une solution pourrait-elle être d'ajouter à l'endroit voulu au texte formaté une chaîne représentant un UID, facile à retrouver dans le flux non formaté, pour l'y remplacer par le code du tableau ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut désolé pour l'absence
    Bonjour à toutes et tous,
    Merci pour toutes vos participations et désolé pour mon absence ici. Boulot oblige...

    Blonde : quand j'essaie ce code, le tableau est bien inséré mais je perds le texte existant.
    Je suis sous delphi 10.3 RIO. Le composant utilisé est un JvRichEdit.

    L'idée est d'avoir une zone traitement de texte (très allégé) avec insertion d'images, de tableau, gras, italique et souligné. J'arrive à insérer les images en les transformant en Bmp pour éviter que le rtf final n'explose en octets. Le gras, italique et souligné ne posent pas de soucis. mais ce tableau.... grrrrr .... je n'arrive pas à l'insérer dans un richedit sans perdre le texte existant et son formatage.

    J'utilise le loadfromstream mais dans l'idée il faudrait un InsertFromStream pour bien faire. Evidemment ca n'existe pas (encore)

    merci à tous

  9. #9
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Ma question : est-ce que tu arrives à insérer du texte formaté ?

    J'ai l'impression que ce n'est pas le tableau qui pose problème, mais bien l'insertion au milieu d'un texte formaté.
    Je vais vois si j'ai le même composant que toi pour faire des tests. mais pas forcément ce matin.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut j'ai déjà du texte formaté
    J'ai déjà du texte formaté dans le composant. J'y ai meme des images.

  11. #11
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par tatane.tatane Voir le message
    J'ai déjà du texte formaté dans le composant. J'y ai meme des images.
    Je suis désolée; j'ai mal posé ma question.

    Ma question : est-ce que tu arrives à insérer du texte formaté via code ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par blonde Voir le message
    Je suis désolée; j'ai mal posé ma question.

    Ma question : est-ce que tu arrives à insérer du texte formaté via code ?
    J'arrive à insérer une image via un tstream, j'arrive à formater Gras Italique Souligné du texte existant, mais tout ca est déjà implémenté dans les fonctions et procédures du richedit. Je n'ai encore jamais eu à insérer de la balise rtf.
    J'ai trouvé, grâce à toi d'ailleurs, quelles sont les balises tableau mais le richedit reçoit mon "lines.add(montableaurtf)" comme du texte et n'interprete pas les balises.
    Ce qui est étonnant également, c'est que je peux copier coller un tableau sans aucun souci avec un simple ctrl c, ctrl v.

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut



    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
     
    Function InsertRtfTable(Nbcol,NbLigne,Largeur : integer;Cells : Array of cell) : String;
    begin
     
       // definition du taleau
       result := '\trowd'; // Debut du tableau 
     
      for i := 1 to Nbcol do // Remplissage de l'entete du Tableau 
        result := result + format('\cellx%d', [i * (2000 + Largeur)]);
     
      // Remplissage  du Tableau 
      for j := 1 to Nbligne do
      begin
        result := result + '\intbl'; // Debut de la ligne 
        for i := 1 to Nbcol do
            result := result + Format('\cell %s',[Cells[I,J]]); // Remplissage des Cellules 
        result := result + '\row'; // Fin du Tableau
    end;
    je pense qu'un truc de se genre devrais fonctionner
    faut juste savoir où tu veut l’intégrer
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  14. #14
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par tatane.tatane Voir le message
    mais le richedit reçoit mon "lines.add(montableaurtf)" comme du texte et n'interprete pas les balises.
    Ce qui est étonnant également, c'est que je peux copier coller un tableau sans aucun souci avec un simple ctrl c, ctrl v.
    Oui, parce que tu insères au milieu d'une donnée formatée. Et du coup, tu "coupes" le formatage, car la balise de fermeture n'est plus présente. Et j'imagine que le TRichEdit interprète un texte mal formaté en texte simple.
    J'avais commencé un exemple, mais l'insertion ne fonctionnait qu'en début ou fin de document.

    Le copier/coller, c'est une piste que j'avais suggérée. Il y a des exemples sur le net. Si tu tapes Clipoard+TRichEdit tu devrais trouver.

    Dès que j'ai un moment, j'essaye de faire un petit code. Les journées filent à toute vitesse en ce moment.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par blonde Voir le message
    Oui, parce que tu insères au milieu d'une donnée formatée. Et du coup, tu "coupes" le formatage, car la balise de fermeture n'est plus présente. Et j'imagine que le TRichEdit interprète un texte mal formaté en texte simple.
    J'avais commencé un exemple, mais l'insertion ne fonctionnait qu'en début ou fin de document.

    Le copier/coller, c'est une piste que j'avais suggérée. Il y a des exemples sur le net. Si tu tapes Clipoard+TRichEdit tu devrais trouver.

    Dès que j'ai un moment, j'essaye de faire un petit code. Les journées filent à toute vitesse en ce moment.
    Merci beaucoup pour ton aide, je m'y attelle dès que je peux.

  16. #16
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Je n'ai pas eu le temps de tester, mais je reviens à ce mécanisme : quand tu as choisi le point d'insertion dans le RichEdit, tu insères à cet endroit une chaîne bidon unique qui ne se trouve pas dans le document ( '123_C_est ici que je le veux et pas ailleurs_321' par exemple )

    Tu sauves le fichier (dans un stream par ex.), puis tu remplaces dedans cette chaîne par ton tableau (sous la forme brute, avec les balises rtf).

    Enfin, tu recharges le RichEdit à partir de ce flux.

    Le seul problème bloquant que j'imagine serait en cas d'insertion à l'intérieur d'un passage formaté dont le balisage devrait être interrompu avant le tableau et redémarré après, mais je ne connais pas le rtf pour savoir si ça peut se rencontrer...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  17. #17
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Finalement,j'ai fini par trouver ce qu'il faut ici :
    https://delphidabbler.github.io/delp...s/tips/57.html


    Je t'ai fait un petit exemple
    au create je place juste un petit "coucou" dans mon RichEdit histoire d'avoir déjà un texte formaté.
    Dans Btn_InsereTableauClick, tu verras que je crée le texte formaté du tableau et ensuite j'appelle "RTFInsertStream" issu du lien ci-dessus pour insérer un texte formaté à l'endroit où se trouve le curseur.
    Il remplace également le texte sélectionné.

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    procedure RTFToRichEdit(const aRtf: String; pRichEdit: TRichEdit);
    var
      aStream2 : TStream;
    begin
      aStream2 := TStringStream.Create(aRtf);
      aStream2.Position := 0;
     
      pRichEdit.Lines.LoadFromStream(aStream2);
     
      aStream2.Free;
    end;
     
     
    function EditStreamReader(dwCookie: DWORD; pBuff: Pointer; cb: Longint; pcb: PLongInt): DWORD; stdcall;
    begin
      Result := $0000; // assume no error
      try
        pcb^ := TStream(dwCookie).Read(pBuff^, cb); // read data from stream
      except
        Result := $FFFF; // indicates error to calling routine
      end;
    end;
     
    procedure RTFInsertStream(const RE: TRichEdit; const Stream: TStream);
    var
      EditStream: TEditStream; // callback used to read inserted RTF
    begin
      RE.Lines.BeginUpdate;
      try
        // Make sure rich edit is large enough to take inserted code
        RE.MaxLength := RE.MaxLength + Stream.Size;
        // Stream in the RTF via EM_STREAMIN message
        EditStream.dwCookie := DWORD(Stream);
        EditStream.dwError := $0000;
        EditStream.pfnCallback := @EditStreamReader;
        RE.Perform(EM_STREAMIN, SFF_SELECTION or SF_RTF or SFF_PLAINRTF, LPARAM(@EditStream));
        // Report any errors as a bug
        if EditStream.dwError <> $0000 then
          raise Exception.Create('RTFInsertStream: Error inserting stream');
      finally
        RE.Lines.EndUpdate;
      end;
    end;
     
     
     
    function TableauRTF(const Nbcol, Nbligne, Largeur: Integer): string;
    var
      i, j: Integer;
    begin
      Result := '{\rtf1\trowd';
      for i := 1 to Nbcol do
        Result := Result + format('\cellx%d', [i * (2000 + Largeur)]);
      for j := 1 to Nbligne do
      begin
        Result := Result + '\intbl';
        for i := 1 to Nbcol do
          Result := Result + '\cell';
        Result := Result + '\row';
      end;
      Result := Result + '}';
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      textRTF: String;
    begin
      textRTF :=
        '{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fnil\fcharset0 Calibri;}}{\colortbl ;\red0\green77\blue187;}{\*\generator Riched20 10.0.18362}\viewkind4\uc1\pard\sa200\sl276\slmult1\cf1\b\f0\fs22\lang12 coucou\cf0\b0\par}';
     
      RTFToRichEdit(textRTF, RichEdit1);end;
     
    procedure TForm1.Btn_InsereTableauClick(Sender: TObject);
    var
      sTableau: String;
      aStream: TStream;
    begin
      sTableau := TableauRTF(3, 7, 150);
     
      aStream := TStringstream.Create(sTableau);
      try
        aStream.Position := 0;
     
        RTFInsertStream(RichEdit1, aStream);
     
      finally
        aStream.Free;
      end;
    end;
    Normalement, avec tout ça, tu devrais être bon.

Discussions similaires

  1. Insérer un tableau dans une bd access
    Par IRONicMAN dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/03/2010, 04h17
  2. Réponses: 2
    Dernier message: 02/06/2006, 09h04
  3. Insérer un TABLEAU dans un CDialog
    Par youngkoolboy dans le forum MFC
    Réponses: 17
    Dernier message: 22/05/2006, 09h28
  4. insérer un tableau dans un champs MySQL
    Par jbaudin dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/03/2006, 09h08
  5. insérer un tableau dans un formulaire ACCESS
    Par julie76 dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2005, 18h47

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