Kod: Tümünü seç
procedure TFrmPrint.BtnPrintClick(Sender: TObject);
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;
Procedure PrintFileToGeneric(Const sFileName: string; ejectPage: boolean );
Const
BufSize = 16384;
Var
Count : Integer;
BytesWritten: DWORD;
hPrinter: THandle;
DocInfo: TDocInfo1;
f: file;
Buffer: array [1..Bufsize] of char;
ch: Char;
Begin
// If not WinSpool.OpenPrinter(GenericPrinter, hPrinter, nil) Then raise exception.create('Printer not found');
hPrinter:=GetCurrentPrinterHandle;
Try
DocInfo.pDocName := 'MyDocument';
DocInfo.pOutputFile := Nil;
DocInfo.pDatatype := 'RAW';
If StartDocPrinter(hPrinter, 1, @DocInfo) = 0 Then
Abort;
Try
If not StartPagePrinter(hPrinter) Then
Abort;
System.Assign(f, sFileName);
Try
Reset(f, 1);
Try
While not eof(f) Do Begin
Blockread(f, Buffer, BufSize, Count);
If Count > 0 Then Begin
If not WritePrinter(hPrinter, @Buffer, Count, BytesWritten) Then
Abort;
End;
End;
Finally
If ejectPage Then Begin
ch:= #12;
WritePrinter( hPrinter, @ch, 1, BytesWritten );
End;
End;
Finally
EndPagePrinter(hPrinter);
System.Closefile( f );
End;
Finally
EndDocPrinter(hPrinter);
End;
Finally
WinSpool.ClosePrinter(hPrinter);
End;
End;
begin
printfiletogeneric( 'C:\test.txt', True );
end;