Code:
procedure PrintToGeneric(pPrinterName: String; pText: TStrings; pReportName: String; pNoOfColumns: Integer = 80; pMaxNoOfLines: Integer = 66);
var
lLineNo, lPageNo: Integer;
BytesWritten : DWORD;
hPrinter : THandle;
DocInfo : TDocInfo1;
(** procedure PrintOut
* Stampa jednu liniju teksta.
*)
procedure PrintOut(const pLine: String);
begin
if not WritePrinter(hPrinter, @pLine[1], Length(pLine), BytesWritten) then Abort;
end;
(** procedure SetupGenericPrinter
* Postavlja gustinu karaktera u zavisnosti od broja kolona koje treba stampati
* Radi za Epson LX-300 i slicne stampace
*)
procedure SetupGenericPrinter;
begin
PrintOut(ESC+'x'+#0); // draft
if pNoOfColumns <= 80 then PrintOut(ESC+'P'+DC2) // 10cpi + not condensed
else if pNoOfColumns <= 96 then PrintOut(ESC+'M'+DC2) // 12cpi + not condensed
else if pNoOfColumns <= 137 then PrintOut(ESC+'P'+SI ) // 10cpi + condensed
else PrintOut(ESC+'M'+SI ); // 12cpi + condensed
end;
begin
if not WinSpool.OpenPrinter(PChar(pPrinterName), hPrinter, nil) then
raise Exception.Create('Stampac pod imenom '+pPrinterName+' nije pronadjen!');
try
DocInfo.pDocName := PChar(pReportName);
DocInfo.pOutputFile := nil;
DocInfo.pDataType := 'RAW';
if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then Abort;
try
if not StartPagePrinter(hPrinter) then Abort;
try
SetupGenericPrinter;
for lPageNo := 0 to pText.Count div pMaxNoOfLines do begin
for lLineNo := 0 to pMaxNoOfLines-1 do begin
PrintOut(pText.Strings[pMaxNoOfLines*lPageNo+lLineNo]+CR+LF);
end;
PrintOut(FF);
end;
finally
EndPagePrinter(hPrinter);
end;
finally
EndDocPrinter(hPrinter);
end;
finally
WinSpool.ClosePrinter(hPrinter);
end;
end;
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo