![]() |
Exception Messagebox unterdrücken
Hi Schlaumis,
habe noch ein Problem. Wie kann ich bei einer Exception die Messagebox abschalten, da ich selbst die Fehlerbehandlung vornehmen möchte und den Benutzer nicht mit für ihn unverständlichen Access Violations lanweilen möchte.
Delphi-Quellcode:
Danke für die Hilfe im voraus.////Beispiel für ein EAccessViolation die nicht angezeigt werden soll: procedure CheckObject; var bObject: TForm; bHandle: Cardinal; begin bObject := nil; try bHandle := bObject.Icon.Handel; //hier wird ein EAccessViolation erzeugt MessageDLG('Handle='+IntToStr(bHandle), mtInformation, [mbOK], 0); except //Eine Messagebox mit dem EAccessViolation wird ausgegeben. Wie kann sie //abgeschaltet werden. on E: Exception do bObject := TForm.Create(Application); end; end; Schlumpf |
Re: Exception Messagebox unterdrücken
Hai Golze,
ich denke mal das die Exeption-Meldung nur kommt wenn Du das Programm innerhalb der IDE startest. Wenn Du das Programm kompilierst und dann die Exe startest wird kein Fehler kommen. Dies liegt daran das die Integrierte Fehlersuche (Tools - Debugger Optionen) standardmässig aktiviert ist. |
Re: Exception Messagebox unterdrücken
Hallo Stephan,
bei harten Fehlern wie z.B. Access Violation und andere Fehler dieser Klasse kommt immer eine Box. Leider ist das von der Einstellung ob mit integriertem Debugger oder nicht unabhängig. Habe bereits mit SetErrorMode() probiert. Hat jedoch keine Auswirkung gehabt. Danke für den Hinweis. Kay |
Re: Exception Messagebox unterdrücken
Zitat:
|
Re: Exception Messagebox unterdrücken
Hi Stephan,
ok... liegt möglicherweise bei mir daran, daß ich die VCL mit Debug-Optionen übersetzt habe. Danke für den Hinweis. Kay |
Re: Exception Messagebox unterdrücken
Hallo,
ich habe ein aehnliches "Problem". Ich bekomme eine Messagebox angezeigt wenn die indy client connection graceful geschlossen wurde. Mein Programm laeuftaber normal im Hintergrund weiter. Wo genau finde ich das Haeckchen um die integrierte Fehlerbehandlung abzuschalten bzw. ist das die einzige Option die geaendert werden muss? Gruss, der Zweig |
Re: Exception Messagebox unterdrücken
Such mal nach der Fehlermeldung hier im Forum.
|
Re: Exception Messagebox unterdrücken
Zitat:
Nach welcher Fehlermeldung sollte er denn dann suchen? :shock: Vielleicht hab ich die auch falsch verstanden, aber falls du das gemeint hast, MrZweig, so hätte dir auch die Suche geholfen: ![]() Edit: Massig Tippfehler verbessert. |
Re: Exception Messagebox unterdrücken
Vielen Dank Matze, das wars :)
|
Re: Exception Messagebox unterdrücken
Die Exception der Indys hat nichts mit den anderen Exceptions in diesem Fall zu tun. Und wie man die beim Debuggen unterdrücken kann, ohne alle Exceptions abzschalten steht im Forum. Die Exceptions nämlcih ganz abzuschalten halte ich persönlich nämlich nicht für eine so gute Idee- :?
|
Re: Exception Messagebox unterdrücken
Da muss ich doch nochmal einhaken.
Die Meldung "Connection Closed Gracefully" kommt leider weiterhin - trotz das ich den Schalter deaktiviert habe, neu compiled, und als .exe gestartet. Soll ich vielleicht in den INDY exceptions etwas aendern damit es unterdrueckt wird? Gruss, der Zweig |
Re: Exception Messagebox unterdrücken
Ich würde solche "richtigen" Exceptions nicht einfach abfangen, das muss doch einen Grund haben, wieso die Meldung kommt.
Du solltest lieber danach schauen, wie du den Fehler behebst und nicht einfach den Fehler ignorieren. ;) |
Re: Exception Messagebox unterdrücken
Soweit ich weiss ist "Connection closed gracefully" kein wirklicher Fehler sondern bedeutet, dass alle geklappt hat. Die Indys benutzen die Exceptions scheinbar gerne als Statusmeldung.
|
Re: Exception Messagebox unterdrücken
Richtig. Diese spezielle Indy-Exception steht in den Debug-Optionen
auch mit einem Haeckchen davor - naemlich das Delphi die Grafecul- Exception ignorieren soll. Allerdings kommt eben trotzdem die Messagebox - und diese will ich schlich unterdruecken. Habe auch ein Try.. except Block drumherum welcher durchlaufen wird.. aber die Box kommt trotzdem (das Programm laeuft ja normal im Hintergrund weiter..) Bin da wirklich am Ende mit meinem Delphianisch Gruss, der Zweig |
Re: Exception Messagebox unterdrücken
hi,
such doch in den indy-source-files nach dem string "connection cloced gracefully" (suchen > suchen in dateien). dsort einfach auskommentieren ;) Aenogym |
Re: Exception Messagebox unterdrücken
Und das ist genau das Schlimmste, was er machen kann. Mit der Forensuche hätte man erstens einen Beitrag gefunden, wie man diese Exception deaktiviert und einen Beitrag von hagen, warum diese Exception eigentlich keine ist, aber denn noch vom Indy Team geworfen wird.
|
Re: Exception Messagebox unterdrücken
Hi,
soweit ich das noch in Erinnerung habe ist die "Connection closed gracefully" nur bei Servern keine Fehlermeldung, bei Clients jedoch schon... oder irre ich mich da? :wiejetzt: |
Re: Exception Messagebox unterdrücken
ist eine Exception ein Fehler ?
Übersetze mal 1 zu 1 das Wort Exception, dann dürfte klar sein das man auch andere Ausnahmebedingungen mit Exceptions abhandeln kann. Genau dies machten die Indy Coder. EAbort ist ja auch kein Fehler sondern eine Ausnahme. EConnectionClosedGraceFully: wie soll eine TCP/IP Verbindung sauber getrennt werden ? Egal ob zuerst der Server oder der Client die Verbindung kappt, es entsteht immer diese Ausnahme. Somit eben kein Fehler sondern eine Ausnahme die im Normalfalle, egal ob Client oder Server eine Endlosschleife im Source beenden sollte. Dies vereinfacht die Programmierung der TCP Server/Clients erheblich. Gruß Hagen PS: Foremmaster ihr solltet mal den Tooltipp für Exception überprüfen ;) |
Re: Exception Messagebox unterdrücken
Hi,
in meinem Datenbankprojekt nutze ich die Komponente TApplicationEvents. Dort gibt es das Ereignis "OnExeption". Dort habe ich Fehler vom Interbase abgefangen und nur die anderen Exceptions werden angezeigt. IBError := E is EIBError; if not IBError Then Application.ShowException(E); Vielleicht hilf das dir bei deinem Problem. André |
Re: Exception Messagebox unterdrücken
Das hilft nicht wirklich weiter, da damit nur die Anzeige das eine Exception eingetreten ist unterdrückbar ist. Mit dieser Methode kann man also nicht ganz gezielt den Programablauf beeinflussen.
Im Grunde ist es doch absolut easy, die einzenlnen TCP/IP Client->Server arbeiten fast immer nach dem gleichen Schemata: 1.) Client verbindet mit Server 2.) Client TCP/IP Procedure ist fast immer eine Schleife bzw. linear sequentiell aufgebaut 3.) Server spaltet eigenen Thread pro verbundenen Clienten ab, dessen Thread Funktion ist immer eine Schleife 4.) Client und Server kapseln ihren TCP/IP Code immer in try except end Blöcken. 5.) Client sollte sich regulär beim Server per Kommando abmelden 6.) aus Clientside wird damit zwangsläufig immer eine Exception ausgelösst da es der Server ist der die Verbindung aktiv trennt. So, auf beiden Seiten wird also die komplette Schleife in einem try except Block gekapselt. Das wars dann schon, denn in dem lokalen Exception Handler kann man nun ganz gezielt EConnectionCloseGraceFully abfangen. In meinen TCP/IP Servern stelle ich zusätzlich aber noch sicher das der Client sich immer beim Server über ein Kommando abmeldet. Der Server beendet also seinen ClientThread nach dem Empfang dieses Commandos und auf Client-Seite wird damit zwangsläufig immer diese Exeption ausgelösst und die Clientprocedure verlassen. Da der Server eine gemeinsam genutzte Resource imWEB darstellt ist es besser immer im konzeptionellen davon auszugehen das der Server so wenig wie möglich durch einen Clienten belastet wird. Demzufolge sollte es der Server sein der die Verbingungen zu seinen Clients aktiv trennt. Gruß hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz