Drucker - auf Vorhandensein prüfen (Exception handling)
-
hallo
habe ne druckfunktion in mein Prog. integriert.
das programm schmiert aber ab solange kein drucker auf dem system installiert ist.wie fange ich den fehler im programm ab ?
=> win2k, TPrinter <=
[ Dieser Beitrag wurde am 31.01.2002 um 17:03 Uhr von Jansen editiert. ]
-
Wenn's wirklich 'ne Exception und keine AccessViolation gibt:
try { // drucken } catch (EDruckerExeption &E) { // Fehlermeldung ausgeben }
Ansonsten halt vorher die Printers-Property von TPrinter abfragen.
-
joh,
ausserdm könntest du mit ofstream schauen, ob ein Drucker vorhanden ist.
#include<fstream.h> //.... ofstream drucker("PRN"); if(!drucker) ShowMessage("Kein Drucker betriebsbereit!"); //......
-
also: Fehlermeldung lautet
in ...exe ist eine Exception der klasse EPrinter aufgetreten.
Meldung: Zur Zeit ist kein Standard-Drucker vorhanden
-
also habe einiges probiert, aber es geht noch nicht so richtig !
nachdem ich unter DruckenClick
try{// Deklarationen
//Code
}catch(Execp...){ShowMess..}eingetragen hatte, hat er das programm gestartet !
Als ich nun drucken klickte, gleicher Exception Fehler.
Habe dann mal try wieder herausgenommen, irgendwann kam auch so ne AccessViolation Fehlermeldung. Das Problem liegt daran ...if(PrinterDialog->Execute()){ ... } hier kommt die Exception her !
Aber wie bekomme ich die weg. Habe noch versucht über
if (Prntr->PrinterIndex == -1) ... für Standarddrucker, geht auch aber ist vielleicht nicht so elegant.
irgentwelche ideen ??
cu
-
Eine Exception ist kein Fehler. Im Gegenteil, ein möglicher Fehler im Programmablauf wurde gezielt abgefangen und kann behandelt werden. Und genau dafür benutzt man try/catch-Blöcke.
Dass die Exception-Warnung auch mit try beim Testlauf im Debugger auftritt ist normal (kann bei Bedarf in den Debugger-Optionen abgestellt werden).
Wenn das Programm alleine für sich läuft, also über die .exe gestartet wird, dann sollte es nur die von dir vorgesehene Fehlermeldung auswerfen und anschliessend normal weiterlaufen.try { PrintDialog1->Execute(); } catch (EPrinter &E) { // gibt die Exception-Message als Fehlermeldung aus MessageBox(0, E.Message.c_str(), "Druckerproblem!", MB_ICONSTOP |MB_OK); // hier muss natürlich nicht unbedingt etwas stehen, die Exception wird dann // stillschweigend abgefangen und das Programm kann weiterlaufen }
]