Also, was du hier an Code präsentierst, ist einfach unterirdisch. Kein wunder, dass dir keiner hilft (weil das eigentlich gar nicht geht!)
Sorry, aber das musste ich vorher loswerden.
Hier mal eine Routine, die auch nachvollziehbar und startbar ist:
Delphi-Quellcode:
uses Printers, WinSpool;
procedure PrintTest;
const cBUFSIZE = 1000;
var Device, Driver, Port:PAnsiChar;
hDeviceMode, hPrinter, BytesWritten:Cardinal;
DocInfo : TDocInfo1;
f:File;
sFileName:string;
Buffer:Pointer;
Count:integer;
stop:boolean;
DevMode : PDeviceMode;
begin
Driver:=nil;
Port:=nil;
Printer.PrinterIndex := 0; //einen Drucker auswählen
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
DevMode := GlobalLock(hDeviceMode);
DevMode^.dmDefaultSource:=1; // <- Versuch mal hier den Schacht einzustellen.
if WinSpool.OpenPrinter(@Device, hPrinter, nil) then begin
DocInfo.pDocName := 'C:\temp\Druckdatei.prn'; //die Datei, die an einen Drucker weitergeleitet werden soll
DocInfo.pOutputFile := nil;
DocInfo.pDatatype :='RAW';
StartDocPrinter(hPrinter, 1, @DocInfo);
StartPagePrinter(hPrinter);
//die PRN-Datei mit WritePrinter ausdrucken:
System.AssignFile(f, sFileName);
try
Reset(f, 1);
GetMem(Buffer, cBUFSIZE);
stop:=false;
while not Eof(f) and not stop do begin
Blockread(f, Buffer^, cBUFSIZE, Count);
if Count > 0 then begin
if not WritePrinter(hPrinter, Buffer, Count, BytesWritten) then begin
EndPagePrinter(hPrinter);
stop:=true;
end;
end;
end;
FreeMem(Buffer, cBUFSIZE);
finally
System.CloseFile(f);
end;
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
end;
end;