![]() |
Unit Printers... Probleme mit Printerindex
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
Delphi-Quellcode:
Kuck ich mir die Gettrmethode von PrinterIndex an:
Showmessage (format('Printerindex = %d',[Printer.PrinterIndex])) ;
Delphi-Quellcode:
scheint wohl FPrinterindex = -1 der Fall zu sein, da in die Prozedur SetToDefaultPrinter gesprungen wird:
function TPrinter.GetPrinterIndex: Integer;
begin if FPrinterIndex = -1 then SetToDefaultPrinter; Result := FPrinterIndex; end;
Delphi-Quellcode:
Und diese Methode ruft in der letzten Zeile die besagte Fehlermeldung auf.
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; Aber warum ist FPrinterindex = -1. Es ist definitiv ein Standarddrucker definiert auf dem System. Auch das manuelle Setzen in meinem Code mittels
Delphi-Quellcode:
führt zu gleicher Fehlermeldung.
Printer.Printerindex := 0 ;
Kennt jemand diese Phänomen. Ich weiss irgendwie nicht mehr weiter. |
Re: Unit Printers... Probleme mit Printerindex
Zitat:
Einen Drucker doppel-klicken und dann im Menue Drucker->Als Standard Drucker festlegen, Fertig |
Re: Unit Printers... Probleme mit Printerindex
Zitat:
Nach langem Googeln hab ich jetzt ![]()
Delphi-Quellcode:
geändert in
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;
Delphi-Quellcode:
Erste Tests an einigen Rechner ware erfolgreich. Scheint also daran gelegen zu haben.
for I := 0 to Count-1 do
begin if uppercase(TPrinterDevice(Objects[I]).Device) = uppercase (Device) then begin with TPrinterDevice(Objects[I]) do SetPrinter(PChar(Device), PChar(Driver), PChar(Port), 0); Exit; end; end; |
Re: Unit Printers... Probleme mit Printerindex
ich hab hier im netzwerk ein ähnliches problem.
allerdings mit quickreport. dieser ist manchmal der meinung das die tprinterliste anders ist als wie die api abfragt. bei uns kommt das deswegen weil die drucker entweder direkt am server anschlossen sind und der user den drucker "lokal" nutzt. wenn er am client pc sitzt nutzt er den netzwerk drucker. die tprinter ermittelt dann (bei uns) den namen falsch. das hat auch etwas mit dem profil des users zu tun. in der registry stehen dann mehr drucker als wie der user anwählen kann, weil ja die lokalen server drucker nicht mehr verfügbar sind. diese heissen aber gleich. kompliziertes problem, kompliziert zu beschreiben, aber vieleicht hilft es dir ja. (std-drucker setzten hilft bei uns nicht) ein work arround geht wenn es nur netzwerkdrucker am pc gibt, alle löschen im user profil und neu verbinden. |
Re: Unit Printers... Probleme mit Printerindex
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz