Soyez le premier à donner votre avis sur cette source.
Vue 15 702 fois - Téléchargée 1 818 fois
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;
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.