25 - PerfectionnementSur ce chapitre, nous allons ajouter des fonctionnalités à notre exemple de base afin de cerner un maximum de cas.Vous devez ajouter un composant TButton avec la propriété CAPTION := 'Imprimer ' et un TPrintDialog (palette standard de DELPHI dialogues) et obtenir ceci :C'est un peu long mais rien ne vous empèche de créer une classe héritant de TFrReport avec une méthode Print ou encore plus simplement, créer une procédure "PrintReport(letat : string)" qui charge l'état et l'édite.Ajoutez aussi l'unité Printers à la clause USES de votre fiche et entrez le code suivant à l'évenement onClick du bouton "Imprimer" que j'ai nommé bPrint.
procedure TForm1.bPrintClick(Sender: TObject);
var FromPg,ToPg,Cpy: Integer;
ind: Integer;
St : String;
Collap : Boolean;
begin
// Charge l'état
St:=ExtractFilePath(ParamStr(0));
frReport1.LoadFromFile(St+'rap1.frf');// Relève l'imprimante par défaut
ind := Printer.PrinterIndex;
// Prépare l'état, sortir si la préparation n'a pas fonctionné
If Not frReport1.PrepareReport then Exit;// Initialise la boite de dialogue pour paramètrer l'édition
with PrintDialog1 do
begin
Options:=[poPageNums]; // Autorise la sélection de pages
Copies := 1; // Un seul exemplaire
Collate := True; // Copies triées
FromPage := 1; // Page de début
ToPage := frReport1.EMFPages.Count; // Dernière page, par défaut la totalité
MaxPage := frReport1.EMFPages.Count; // Nombre de pages maxi, par défaut la totalité
if Execute then // Exécution de la boite de dialogue
begin
if Printer.PrinterIndex <> ind then // il y a eu un changement d'imprimante ?
if frReport1.CanRebuild then // doit on regénérer l'état ?
if frReport1.ChangePrinter(ind,Printer.PrinterIndex) then // Changement d'imprimante
frReport1.PrepareReport
else exit; // le changement d'imprimante s'est mal passéif PrintDialog1.PrintRange = prPageNums then // on a fait une sélection de pages
begin
FromPg := PrintDialog1.FromPage; // première page
ToPg := PrintDialog1.ToPage; // dernière page
end;Cpy:=PrintDialog1.Copies; //Nombre de copies
Collap:=PrintDialog1.Collate; // Exemplaires triés// Lance l'édition de la page "FromPg" à "ToPg" , "Cpy" exmplaires triés (Collap))
frReport1.PrintPreparedReport(FromPg,ToPg,Cpy,Collap);
end;
end;
end;
25.2 - Les options possibles :25.21 - Options de page
Vous obtenez ces options avec le menu de l'éditeur : "Fichier" puis "Options de page ..." . Vous obtenez ceci :
- Pour règler le format du papier
![]()
- Pour règler les marges
- Pour les options diverses
Ici, vous précisez le nombre de colonnes ainsi que l'espace entre les colonnes.
25.22 Options sur l'état
Avec le menu principal de l'éditeur, sélectionnez "Fichier" puis "Options de l'état..." pour faire apparaître la boite de dialogue suivante :
Ici, vous précisez l'imprimante qu'il faut sélectionner lors du chargement de l'état et si la préparation se fait en deux passes.
Attention si vous souhaitez numéroter vos pages avec "Page courante' sur "Nombre de page total" , vous devez obligatoirement cocher l'option "Etat en deux passes"