Créer facilement un état avec EkRtf

Jean-Luc Mellet(Alphomega)

- Titre : Créer facilement un état avec EkRtf

- Auteur : Jean-Luc Mellet(Alphomega)

- Parution : 7 février 2003

- Mise à jour : 23 décembre 2019

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- Avant-propos

- I. Présentation

- II. Les possibilités de EkRTF

- III. Exemple

- III-A. Création du document source

- III-B. Le programme en Delphi

- III-C. Dans le détail

- IV. L'avantage du format RTF utilisé

- V. Les versions disponibles

Avant-propos

Je précise que cet article n'est en rien une publicité rémunérée. Je n'ai aucun lien d'intérêts avec l'auteur du composant, si ce n'est le fait d'utiliser son travail.

Un des principaux soucis du programmeur d'aujourd'hui est la réalisation d'états bien présentés, mais surtout réalisés le plus facilement et le plus rapidement possible.

Il existe différentes sortes d'outils allant du composant d'impression amélioré à l'outil de reporting le plus complet (souvent très cher). Après avoir essayé pas mal de freeware et shareware, j'ai découvert un jour le composant TEkRtf, créé par un développeur russe. J'ai voulu vous faire partager ses avantages et sa simplicité d'utilisation. Ce composant est gratuit pour une utilisation non commerciale et d'un prix plus que raisonnable autrement.

I - Présentation

Le composant EkRtf est à mi-chemin entre l'outil standard de reporting et le composant d'impression. Il utilise en fait un document préalablement créé avec n'importe quel outil permettant de générer un format RTF. Une syntaxe particulière permet de désigner des variables qui seront utilisées par EkRtf lors de l'impression. Ainsi, tout le travail de conception est réalisé visuellement (sur le principe de CrystalReport). Autant de code qu'il sera inutile d'écrire (rapidité de programmation).

Ce composant a été réalisé par Eugene Kuchugurov, que vous pourrez contacter (en anglais, je vous rassure) pour d'éventuelles questions à propos de son travail. Vous pouvez également vous rendre directement sur son site à l'adresse SiteEkRTF.

II - Les possibilités de EkRTF

EkRtf peut :

- utiliser des variables simples ;

- se baser sur un TTable, un TQuery, ou tout type de TDataset ou TClientDataSet et imprimer les champs définis. Cette possibilité inclut les memorytable ;

- formater chaque valeur individuellement par le biais de fonctions du composant ou définies par l'utilisateur ;

- créer des impressions de type maitre-détails avec saut de page automatique ;

- définir un format RTF pour chaque valeur suivant certains critères ;

- créer un véritable document au format natif Word en utilisant OLE ;

- etc.

III - Exemple

Pour mieux vous faire comprendre la facilité d'utilisation de EkRtf, je vais vous décrire la réalisation d'un état simple basé sur la célèbre DBDemos installée avec Delphi. D'autres exemples sont présentés sur le site de l'auteur.

III-A - Création du document source

Nous allons imprimer les champs EmpNo, LastName, FirstName et Salary de la table employee.db. Pour cela, nous allons utiliser Word pour Windows, très répandu aujourd'hui.

Dans l'en-tète du document, centrez le texte \Titre\ et changez la taille de la police en 16. En dessous, insérez un tableau de 4 colonnes et dans chacune d'elles, écrivez la description des champs qui seront imprimés : N°, Prénom, Nom, Salaire. Il est nécessaire de créer ici les en-têtes de colonnes pour qu'ils apparaissent sur chaque page.

Passez maintenant dans le corps du document. Puisque notre état sera basé sur une table de données, nous allons indiquer que le « balayage » de ces données commence ici en écrivant :

\scan(MaTable)\

Ensuite, insérez le même tableau que tout à l'heure et dans chaque cellule, indiquez quel champ sera pris en compte.

\MaTable:EmpNo\

\MaTable:FirstName\

\MaTable:LastName\

\MaTable:Salary\

En dessous du tableau, indiquez que le « balayage » de la table est terminé par :

\endscan\

Enregistrez votre document au format RTF. Ici, nous faisons simple, mais toutes les fantaisies sont permises (dessin, fontes, alignement, etc.) Toute la composition du document est réalisée ici. Rien n'est à faire par programmation.

III-B - Le programme en Delphi

On ne peut pas faire plus simple.

- Créer un nouveau projet et ajoutez-y le composant TekRtf.

- Ajoutez maintenant un TTable que vous appellerez MaTable (le nom que vous aurez indiqué dans le document RTF) et définissez DataBasename = DBDemos et TableName = Employee.db.

- Ajoutez enfin un TButton et codez OnClick comme suit :

procedure TForm1.Button1Click(Sender: TObject);
begin
EkRtf1.InFile := 'MonDoc.rtf';  {le document source avec son chemin d'accès}
EkRtf1.OutFile:= 'MonDoc.doc';  {le document RTF créé en sortie (extension Word pour ouverture facile)}
EkRtf1.VarList.Add('Titre=Liste des employés');    {pour notre titre}
MaTable.Open;
EkRtf1.ExecuteOpen([MaTable], SW_SHOW);
MaTable.Close;
end;

C'est tout ! Votre liste de clients est imprimée sans effort.

La commande ExecuteOpen crée le document RTF à partir du modèle défini et ouvre le programme associé aux documents de type .doc (Word ou WordPad) avec l'état ainsi créé. Il ne reste plus à l'utilisateur qu'à prévisualiser ou imprimer son document. L'avantage de cette technique est que le document final peut être éventuellement modifié. Attention cependant ! Un modèle créé avec Word ne pourra être visualisé dans sa totalité que par Word. En effet, WordPad ne reconnait pas tout ce que peut créer son « grand frère ».

Vous allez me dire :

« Et pour les clients qui ne possèdent pas Word, comment pourront-ils se servir du programme ? ».

Rien de plus simple. Il leur suffit d'installer WordViewer proposé gratuitement par Microsoft. Bien sûr, ils ne pourront pas modifier le document final, mais obtiendront une prévisualisation du document et la possibilité d'imprimer sans problème.

III-C - Dans le détail

EkRtf propose un évènement OnScanRecord qui permet la modification de chaque valeur imprimée selon certains critères. Par exemple, une valeur '0.00' pourra être remplacée par une chaine vide.

Enfin, EkRtf permet de créer des fonctions personnalisées. Pour plus de détails sur toutes ces possibilités, je vous conseille une visite sur le site de l'auteur ainsi qu'à sa galerie d'exemples très bien présentés.

IV - L'avantage du format RTF utilisé

Comme EkRTF utilise comme base un document au format RTF, le programmeur a la possibilité de modifier l'état de sortie, quel que soit l'endroit où il se trouve (chez un client par exemple). En effet, il suffit d'un éditeur de texte reconnaissant ce format pour faire les modifications sans problème. Essayez donc de faire la même chose avec QReport ! Si vous n'avez pas votre Delphi préféré avec vous, rien à faire. Vous pouvez même demander à l'utilisateur de modifier lui-même le document source. Imaginez-vous en vacances avec le client qui vous appelle pour modifier l'en-tète de ses factures. Il faudra faire vite. Par téléphone, vous le guidez et, en deux temps trois mouvements, la modification est faite.

V - Les versions disponibles

À l'heure actuelle, la version 1.70 est disponible sur le site de l'auteur. Elle ne permet pas en standard le formatage (gras, italique, etc.) des valeurs. Mais, sur demande, l'auteur vous enverra une version développeur, qui, moyennant quelques lignes de codes supplémentaires, vous offrira cette possibilité. Eugene Kuchugurov travaille actuellement sur la prochaine version qui devrait proposer une méthode plus directe de formatage. Voilà ! J'espère vous avoir donné envie d'essayer ce composant. Je pense franchement que vous ne le regretterez pas.

Site web EkRTF

À bientôt !