Entwickler-Ecke

Windows API - Programmstart verhindern,wenn kein Standarddrucker vorhanden


Lake - Fr 11.12.15 09:48
Titel: Programmstart verhindern,wenn kein Standarddrucker vorhanden
Hallo,

wie verhindere ich einen Programmstart, wenn kein Standarddrucker eingestellt ist
bzw.
wie kann ich den Fehler beim Programmstart sauber abfangen.

Danke

Tom


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 11.12.2015 um 09:25


Delete - Fr 11.12.15 10:42

Bei welchem WINDOWS?
Meines Wissens wird immer der XPS-Document-Writer installiert und wird dann der Standard-Drucker sein.
Welche "Fehler"-Meldung erscheint?

Was nützt ein Standard-Drucker, wenn er nicht zur Verfügung steht?

Prüfe, ob der gewünschte Drucker installiert ist. Ob er druckbereit ist, ist wieder eine andere Frage...
Mit folgendem Code kannst Du alle installierten Drucker auflisten:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, Printers;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetDefaultPrinter: string;
var
  ResStr: array[0..255of Char;
begin
  GetProfileString('Windows''device''', ResStr, 255);
  Result := StrPas(ResStr);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:= GetDefaultPrinter;
listbox1.items := printer.printers;
end;

end.


Lake - Fr 11.12.15 11:37

Vielen Dank für den Quelltext.

Diesen Ansatz hatte ich auch schon, aber so weit komme ich gar nicht da das Programm direkt beim Programmstart (wenn kein Standarddrucker) mit der Fehlermeldung abbricht.

Es handelt sich hier um Windows7

Die Fehlermeldung lautet "Es ist kein Standarddrucker installiert."

Danke
Tom


baumina - Fr 11.12.15 11:53

Woher kommt denn die Fehlermeldung, erzeugst du die selbst oder kommt die von einer Komponente, die du benutzt?


Gerd Kayser - Fr 11.12.15 16:21

user profile iconLake hat folgendes geschrieben Zum zitierten Posting springen:
wie verhindere ich einen Programmstart, wenn kein Standarddrucker eingestellt ist


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// uses Printers
procedure TMainform.FormCreate(Sender: TObject);
var
  Test : integer;
begin
  // Prüfung, ob Drucker installiert ist
  try
    Test := Printer.PrinterIndex;
  except
    on EPrinter do
      begin
        ShowMessage('Kein Drucker installiert!');
        PostQuitMessage(0);   // Programmende
      end;
  end;
end;

Statt im FormCreate-Ereignis des Hauptformulars könnte man die Prüfung auch in der dpr-Datei einbauen.


Delete - Fr 11.12.15 17:26

Oder so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
program Project1;

uses  Windows, Forms, Printers, Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
if Printer.Printers.Count=0 then
BEGIN
  ShowMessage('Kein Drucker installiert!');
  PostQuitMessage(0);
END;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.