- procedure TForm1.ImprimerClick(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:=10; // taille de la marge (ici 10 pixels);
- Printer.Begindoc;
- with Printer.canvas do //Avec Tprinter.Canvas
- begin
- font.name:='Arial'; // Defini la fonte a utiliser
- font.Size:=8; // 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
- if prtxt='' then
- prtxt:=' '; // si la ligne est vide, la ligne vaut un espace (astuce pour imprimè les lignes "vides" aussi (N'est pas updatè ds le zip)
- 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
- j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
- //^^ non updater ds le zip // demander a windows la taille de la ligne + les tabs
- 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;
- // remesurè 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); // 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; // crayer une nouvelle page
- nbl1:=0; // commance a la ligne 0 de la page
- end;
- end;
- end;
- printer.enddoc;
- end;
- end;
- end;
procedure TForm1.ImprimerClick(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:=10; // taille de la marge (ici 10 pixels);
Printer.Begindoc;
with Printer.canvas do //Avec Tprinter.Canvas
begin
font.name:='Arial'; // Defini la fonte a utiliser
font.Size:=8; // 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
if prtxt='' then
prtxt:=' '; // si la ligne est vide, la ligne vaut un espace (astuce pour imprimè les lignes "vides" aussi (N'est pas updatè ds le zip)
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
j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
//^^ non updater ds le zip // demander a windows la taille de la ligne + les tabs
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;
// remesurè 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); // 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; // crayer une nouvelle page
nbl1:=0; // commance a la ligne 0 de la page
end;
end;
end;
printer.enddoc;
end;
end;
end;