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
|
procedure TFPrincipale.BprintjourClick(Sender: TObject);
var
I, Start, Stop: Integer;
pc,y,Lsize,nbl,nbl1,j,nc : integer;
tab : array[0..6] of integer;
marge : Word;
Prtxt,TmpTxt : String;
begin
PrintDialog1.Options := [poPageNums, poSelection];
PrintDialog1.FromPage := 1;
PrintDialog1.MinPage := 1;
PrintDialog1.ToPage := PageControl1.PageCount;
PrintDialog1.MaxPage := PageControl1.PageCount;
if PrintDialog1.Execute then
begin
{ détermine l'ensemble que l'utilisateur souhaite imprimer }
Marge:=500;
Printer.Begindoc;
with PrintDialog1 do
begin
if PrintRange = prAllPages then
begin
Start := MinPage - 1;
Stop := MaxPage - 1;
end
else if PrintRange = prSelection then
begin
Start := PageControl1.ActivePage.PageIndex;
Stop := Start;
end
else { PrintRange = prPageNums }
begin
Start := FromPage - 1;
Stop := ToPage - 1;
end;
end;
{ imprime les pages maintenant }
with Printer.canvas do //Avec Tprinter.Canvas
begin
font.name:='Arial'; // Defini la fonte a utiliser
font.Size:=10; // Defini la taille de la fonte
Refresh; // Mettrea a jour le canvas
lsize:=textheight('q/[]'); // lsize= Hauteur du texte
pc:=TextWidth('W'); // Pc =Largeur Des Charactères
nbl:=(printer.PageHeight div lsize)-2; // Nbl = Nombre de lignes par pages
tab[0]:=pc*6; // Première tab=6 chars
tab[1]:=pc*12; // 2eme tab=12 chars
tab[2]:=Pc*18; // 3eme tab=18 chars
nbl1:=0;
for y:=0 to memo1.Lines.Count do //depuis le debut jusque la fin du mèmo
begin
prtxt:=memo1.Lines[y]; // Prendre la ligne ds le memo
tmptxt:=prtxt; // la ligne temporaire est la ligne
j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
// demander a windows la taille de la ligne + les tabs
While prtxt<>'' do // tant que toute la ligne n'est pas imprimèe
begin
nc:=0; // nombre de charactères dépassant la ligne
while j > printer.PageWidth-(marge+marge) do // tant que la longeur du texte > la longeur de notre page
begin
delete(prtxt,length(prtxt),1); // enlever le dernier char
j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
// remesurer la ligne
inc(nc); // incrémenter le nombre de charactères dépassant la ligne
end;
delete(Tmptxt,1,length(tmptxt)-nc); // temptext devient le reste du texte
tabbedtextout(handle,Marge,nbl1*lsize,
pchar(Prtxt),length(Prtxt),
2,tab,0); // ecrire le texte sur le canvas de l'imprimante en respectant les tabs
inc(nbl1); // + pour le nombre de lignes
prtxt:=tmptxt;
if (nbl1=nbl) then // si le nombre de lignes =lignes dispo
begin
printer.newpage; // créer une nouvelle page
nbl1:=0; // commence a la ligne 0 de la page
end;
end;
end;
printer.enddoc;
end;
end;
end; |
Partager