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
|
procedure TFPrincipale.FormShow(Sender: TObject);
begin
MemoHistorique.Lines.LoadFromFile(chappli + 'Historique.txt');
end;
procedure TFPrincipale.BprintjourClick(Sender: TObject);
var
pc,y,Lsize,nbl,nbl1,j,nc : integer;
tab : array[0..6] of integer;
marge : Word;
Prtxt,TmpTxt : String;
begin
if PrintDialog1.Execute then
begin
Marge:=500; // taille de la marge (ici 500 pixels);
Printer.Begindoc;
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; // Mettre 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 MemoHistorique.Lines.Count do //depuis le debut jusque la fin du mèmo
begin
prtxt:=MemoHistorique.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
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émentè 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); // écrire 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