![]() |
kein Standarddrucker ausgewählt - was tun?
Moin !
Mir haben nun schon ein paar Leute berichtet, dass sie mit unserer Soft folgenden Fehler bekommen: Zitat:
Aber wie kann ich nuun verhindern, dass die Anwendung ins Nirvana geht? Any hints!? |
Re: kein Standarddrucker ausgewählt - was tun?
wer verursacht denn den Fehler? Eine Fremdkomponente oder Eurer eigener Code?
|
Re: kein Standarddrucker ausgewählt - was tun?
Moin !
Tja, gute Frage. Die Stacklist schaut so: Zitat:
|
Re: kein Standarddrucker ausgewählt - was tun?
Wenn Du vor dem Zugriff auf einen Drucker prüfst, ob überhaupt einer installiert ist (printers.count = 0), dann kannst Du das Problem abfangen.
meistens geht es ja um Druckvorschausachen (nehm ich mal an). Wenn also kein Drucker installiert ist, dann nimm die Bildschirmauflösung für die Vorschau. wenn natürlich die WPTools so etwas nicht prüfen, dann muss ich sagen : WPTools -Hausaufgaben nicht gemacht. |
Re: kein Standarddrucker ausgewählt - was tun?
Vielleicht hilft folgender Code, den Standarddrucker selbst auszulesen und zur Not auch wieder zu setzen:
Delphi-Quellcode:
unit PrinterSettings;
interface uses windows, sysutils, classes, dialogs, messages ; function GetDefaultPrinterA(prnName : PAnsiChar; var bufSize : DWORD ) : BOOL; stdcall; external 'winspool.drv' name 'GetDefaultPrinterA'; type TMyPrinterSettings = class private function getDefaultPrinterName: string; procedure SetDefaultPrinterName(const Value: string); public property DefaultPrinterName : string read GetDefaultPrinterName write SetDefaultPrinterName ; end ; var PS : TMyPrinterSettings ; implementation uses printers ; function TMyPrinterSettings.getDefaultPrinterName:string; var lprnName: PAnsiChar; lBufSize: DWord; begin GetMem(lprnName, 1000); try GetDefaultPrinterA(lprnName, lBufSize); Result := lprnName; finally FreeMem(lprnName); end; end; procedure TMyPrinterSettings.SetDefaultPrinterName(const Value: string); var Device: array[0..255] of char; Driver: array[0..255] of char; Port: array[0..255] of char; hDeviceMode: THandle; begin if Printer.Printers.IndexOf (Value) >= 0 then begin Printer.PrinterIndex := Printer.Printers.IndexOf (Value) ; Printer.GetPrinter(Device, Driver, Port, hDeviceMode); StrCat( Device, ','); StrCat( Device, Driver ); StrCat( Device, ','); StrCat( Device, Port ); WriteProfileString( 'windows', 'device', Device ); StrCopy( Device, 'windows' ); SendMessage( HWND_BROADCAST, WM_WININICHANGE, 0, longint( @Device )); sleep (300) ; end else begin end ; end; initialization PS := TMyPrinterSettings.create ; finalization PS.free ; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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-2025 by Thomas Breitkreuz