Accueil > Manip’s > Delphi > RTF > Fusionner 2 RichEdit (RichEdit Merge)
Delphi
Fusionner 2 RichEdit (RichEdit Merge)
dimanche 17 mars 2013, par
S’il est facile de fusionner 2 Mémos, il est beaucoup plus difficile d’ajouter un texte enrichi à un autre, tout en conservant tous les enrichissements de l’un et de l’autre (Car le balisage RTF est d’une imbrication imbitable par le mortel lambda)
L’exemple pratique est d’insérer une Entête enrichie dans un courrier
La méthode simple consiste à utiliser le presse papier, en copiant le texte de l’entête, puis en le collant à l’endroit voulu dans le courrier.
COPIER
ENTETE => |
LoadFromFile |
SetSocus |
selectAll |
CopyToClipBoard |
COLLER
COURRIER => |
SetFocus |
SelStart := ... |
PasteFromClipBoard |
La procédure est simple, mais l’exécution assez lourde car elle est visuelle.
L’inconvénient majeur, est que l’entête et le courrier doivent être visibles simultanément, car la méthode SetFocus nécessaire au copie collé ne peut se faire que sur des composants textuels visibles.
Une autre solution beaucoup plus élégante nous est donnée par Garlin Software Development Corp qui nous ouvre ses sources.
Sous la forme d’un composant assez simple dérivé de la Classe TRichEdit et qui fait appel à la gestion des flux mémoire TMemoryStream.
Qui consiste à rajouter au composant natif 2 fonctions :
- RichEdit.Append ( Fichier.RTF ) ; qui ajoute le contenu du fichier Enrichi au richedit.
- RicheEdit.Insert (Fichier.RTF ) ; qui insère le contenu du fichier RTF à l’endroit du curseur
Son écriture est courte mais complexe.
L’inconvénient est qu’il faut compiler ce composant, puisqu’on va l’utiliser à la place du RichEdit Nâtif.
Je fournis en annexe le code modifié pour le composant TJvRichEdit de la JediLibrairie que je préfère car il gère l’inclusion d’image (dont je me sers pour inclure ma signature en JPG)
Le code original est sur le site de l’auteur signalé par le lien joint, il dérive de l’ancêtre TRichEdit fourni avec Delphi
Ajouter le Composant GSRichEdit
1- Créer l’unité GSRichEdit.pas
Cliquer sur Fermer Tout
- Afin d’éliminer tout code parasite
Fichier
- Nouveau
- Unité Delphi
Copier-Coller le code
- Unité Delphi
- de Unit GSRichEdit
- à End.
Enregistrer le Source Pascal dans le dossier des Source & Librairies
GSRichEdit.pas |
2- Installer le COMPOSANT
Penser à Fermer Tout !!!
Cliquer sur COMPOSANT
- Installer un composant
- Installer dans un nouveau Package
Nom de fichier
- Localiser GSRichEdit.pas
Suivant
- Nom du Package = RTF
Terminer
3- Un nouvel Onglet GARLIN apparait dans la liste de composants
Il contient un GsRichEdit
- Qui s’utilise comme un RichEdit, mais avec 2 fonctions supplémentaires
- Append
- Insert
La fonction GsRichEdit.Append ( RTF ), ne pose aucun souci d’écriture car elle se contente d’ajouter le fichier RTF à la suite du texte affiché dans le GsRichedit
La fonction GsRichEdit.Insert est plus délicate, car il faut placer le curseur à l’endroit de l’insertion
- Soit manuellement (ce qui est simple)
- Soit par programmation,
- grâce à la fonction
GsRichEdit.SelStart |
-
- Associée au besoin à la fonction de recherche
SelStart := GsRichEdit.FindText(cherche, debut, fin, []) ; |
NB :
Il faut bien sur penser à bien mettre le fichier Compilé dans le chemin de recherche des bibliothèques de Delphi
Voir en ligne : https://groups.google.com/forum/?fr...