Autor Beitrag
Lake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74


D6 prof., Delphi 10.2 Tokyo
BeitragVerfasst: Fr 11.12.15 08:48 
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

_________________
Gruss Lake
hathor
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.12.15 09: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:

ausblenden volle Höhe 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.
Einloggen, um Attachments anzusehen!
Lake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74


D6 prof., Delphi 10.2 Tokyo
BeitragVerfasst: Fr 11.12.15 10: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

_________________
Gruss Lake
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Fr 11.12.15 10:53 
Woher kommt denn die Fehlermeldung, erzeugst du die selbst oder kommt die von einer Komponente, die du benutzt?
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 11.12.15 15:21 
user profile iconLake hat folgendes geschrieben Zum zitierten Posting springen:
wie verhindere ich einen Programmstart, wenn kein Standarddrucker eingestellt ist

ausblenden 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.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.12.15 16:26 
Oder so:

ausblenden 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.