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
    }
    

    ]


Anmelden zum Antworten