Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi kein Standarddrucker ausgewählt - was tun? (https://www.delphipraxis.net/63337-kein-standarddrucker-ausgewaehlt-tun.html)

moelski 17. Feb 2006 07:42


kein Standarddrucker ausgewählt - was tun?
 
Moin !

Mir haben nun schon ein paar Leute berichtet, dass sie mit unserer Soft folgenden Fehler bekommen:
Zitat:

Zur Zeit ist kein Standard-Drucker gewählt.
Exception class: EPrinter
Soweit sogut, man installiert einen Drucker und die Sache ist durch.

Aber wie kann ich nuun verhindern, dass die Anwendung ins Nirvana geht?

Any hints!?

sh17 17. Feb 2006 07:47

Re: kein Standarddrucker ausgewählt - was tun?
 
wer verursacht denn den Fehler? Eine Fremdkomponente oder Eurer eigener Code?

moelski 17. Feb 2006 07:51

Re: kein Standarddrucker ausgewählt - was tun?
 
Moin !

Tja, gute Frage. Die Stacklist schaut so:
Zitat:

Stack list, generated 15/02/2006 17:04:09
[00435B31] Printers.RaiseError + $11
[00436BA6] Printers.TPrinter.SetToDefaultPrinter + $1BA
[004028AD] System.SysFreeMem + $199
[004028D5] System.SysFreeMem + $1C1
[00402014] System.InternalFreeMem + $1C
[004029B1] System.ResizeInPlace + $C5
[00402C19] System.@ReallocMem + $D
[004028AD] System.SysFreeMem + $199
[004028D5] System.SysFreeMem + $1C1
[004028AD] System.SysFreeMem + $199
[004028D5] System.SysFreeMem + $1C1
[00402BF1] System.@FreeMem + $5
[0040458C] System.TObject.FreeInstance + $C
[00404996] System.@ClassDestroy + $2
[0041E55C] Classes.TList.Destroy + $18
[004045D4] System.TObject.Free + $8
[0058022B] WPRTEDefs.TWPRTFDataBlock.Reformat + $903
[005818BA] WPRTEDefs.TWPRTFStyleCollection.SetOptimizedSearch + $16
[005804C6] WPRTEDefs.TWPRTFDataBlock.Reformat + $B9E
[004028AD] System.SysFreeMem + $199
[004028D5] System.SysFreeMem + $1C1
[00402014] System.InternalFreeMem + $1C
[004029B1] System.ResizeInPlace + $C5
[005F1B09] WPCTRMemo.TWPCustomRtfEdit.StartUpdate (Line 12422, "WPCTRMemo.pas" + 6) + $3
[005E4F1C] WPCTRMemo.TWPCustomRtfEdit.DoBroadcastMsg (Line 4432, "WPCTRMemo.pas" + 42) + $C
[005D1C6E] WPRTEPaint.TWPRTFEnginePaint.BroadcastEvent + $1E
[005D1B35] WPRTEPaint.TWPRTFEnginePaint.ReorderPaintPages + $EB5
[005D1D53] WPRTEPaint.TWPRTFEnginePaint.BroadcastMsg + $DB
[004028AD] System.SysFreeMem + $199
[004028D5] System.SysFreeMem + $1C1
[0040250E] System.TryHarder + $EE
[004026DB] System.SysGetMem + $173
[004026FE] System.SysGetMem + $196
[004366F7] Printers.TPrinter.GetPrinterIndex + $B
[00435FC8] Printers.TPrinter.SetState + $98
[004364DB] Printers.TPrinter.GetHandle + $7
[006541B5] LabelDrucken.TLabelDruckenForm.FormCreate (Line 263, "LabelDrucken.pas" + 11) + $5
[00488701] Forms.TCustomForm.DoCreate + $31
[004883E1] Forms.TCustomForm.AfterConstruction + $11
[004049A3] System.@AfterConstruction + $7
[004883B8] Forms.TCustomForm.Create + $174
[00401599] System.AddBlockAfter + $9
[00401691] System.MergeBlockAfter + $71
[00402364] System.MergeCommit + $68
[0040250E] System.TryHarder + $EE
[004026DB] System.SysGetMem + $173
[004026FE] System.SysGetMem + $196
[0048FCA9] Forms.TApplication.CreateForm + $31
[006A6BCB] LogView.LogView (Line 65, "C:\Delphi\Logview\LogView.dpr" + 20) + $E
Demnach wird es entweder von den WPTools erzeugt, oder von der Unit Printers!?

sh17 17. Feb 2006 07:57

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.

Jelly 17. Feb 2006 08:43

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 01:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz