var
pcbNeeded: DWORD;
FDevice: PChar;
FPort: PChar;
FDriver: PChar;
FPrinterHandle: THandle;
FDeviceMode: THandle;
FJob: PADDJOBINFO1;
Stream: TFileStream;
begin
GetMem(FDevice, 128);
GetMem(FDriver, 128);
GetMem(FPort, 128);
Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
if FDeviceMode = 0 then
Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
if OpenPrinter(FDevice, FPrinterHandle, nil) then
begin
GetMem(FJob, 1024);
//Добавляем задание, получаем имя файла в директории windows\spoool\
AddJob(FPrinterHandle, 1, FJob, 1024, pcbNeeded);
Stream := TFileStream.Create(FJob.Path, fmCreate);
// Дальше пишем текст (+ESC команды!!!!) прямо в Stream
// и не забываем переводить в DOS - кодировку
.........
Stream.Free;
//Постановка задания в очередь - только теперь принтер начинает печатать
ScheduleJob(FPrinterHandle, FJob.JobID);
FreeMem(FJob);
ClosePrinter(FPrinterHandle);
end;
FreeMem(FDevice, 128);
FreeMem(FDriver, 128);
FreeMem(FPort, 128);
end;
|