Zum verrückt werden... Auf einigen Rechner im LAN hab ich folgendes Verhalten, wenn ich versuche in der Klasse TPrinter (
Unit Printers) den Printerindex auszulesen. Folgender Code führt dann zu der Fehlermeldung
There is no default printer currently selected
Showmessage (format('Printerindex = %d',[Printer.PrinterIndex])) ;
Kuck ich mir die Gettrmethode von PrinterIndex an:
Delphi-Quellcode:
function TPrinter.GetPrinterIndex: Integer;
begin
if FPrinterIndex = -1 then SetToDefaultPrinter;
Result := FPrinterIndex;
end;
scheint wohl FPrinterindex = -1 der Fall zu sein, da in die Prozedur SetToDefaultPrinter gesprungen wird:
Delphi-Quellcode:
procedure TPrinter.SetToDefaultPrinter;
var
I: Integer;
ByteCnt, StructCnt: DWORD;
DefaultPrinter: array[0..79] of Char;
Cur, Device: PChar;
PrinterInfo: PPrinterInfo5;
begin
ByteCnt := 0;
StructCnt := 0;
if not EnumPrinters(PRINTER_ENUM_DEFAULT, nil, 5, nil, 0, ByteCnt,
StructCnt) and (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then
RaiseLastWin32Error;
PrinterInfo := AllocMem(ByteCnt);
try
EnumPrinters(PRINTER_ENUM_DEFAULT, nil, 5, PrinterInfo, ByteCnt, ByteCnt,
StructCnt);
if StructCnt > 0 then
Device := PrinterInfo.pPrinterName
else begin
GetProfileString('windows', 'device', '', DefaultPrinter,
SizeOf(DefaultPrinter) - 1);
Cur := DefaultPrinter;
Device := FetchStr(Cur);
end;
with Printers do
for I := 0 to Count-1 do
begin
if TPrinterDevice(Objects[I]).Device = Device then
begin
with TPrinterDevice(Objects[I]) do
SetPrinter(PChar(Device), PChar(Driver), PChar(Port), 0);
Exit;
end;
end;
finally
FreeMem(PrinterInfo);
end;
RaiseError(SNoDefaultPrinter);
end;
Und diese Methode ruft in der letzten Zeile die besagte Fehlermeldung auf.
Aber warum ist FPrinterindex = -1. Es ist definitiv ein Standarddrucker definiert auf dem System. Auch das manuelle Setzen in meinem Code mittels
Printer.Printerindex := 0 ;
führt zu gleicher Fehlermeldung.
Kennt jemand diese Phänomen. Ich weiss irgendwie nicht mehr weiter.