Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Exception Messagebox unterdrücken (https://www.delphipraxis.net/28904-exception-messagebox-unterdruecken.html)

Golze 1. Sep 2004 06:18


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:
 
////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;
Danke für die Hilfe im voraus.
Schlumpf

Sharky 1. Sep 2004 06:27

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.

Golze 1. Sep 2004 13:38

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

Sharky 1. Sep 2004 13:44

Re: Exception Messagebox unterdrücken
 
Zitat:

Zitat von Golze
..bei harten Fehlern wie z.B. Access Violation und andere Fehler dieser Klasse kommt immer eine Box....

Hmmm.... bei mir ist keine "MessageBox" gekommen wenn ich die Integrierte Fehlersuche abgeschaltet habe.

Golze 1. Sep 2004 16:55

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

MrZweig 8. Sep 2004 15:49

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

Luckie 8. Sep 2004 17:10

Re: Exception Messagebox unterdrücken
 
Such mal nach der Fehlermeldung hier im Forum.

Matze 8. Sep 2004 17:20

Re: Exception Messagebox unterdrücken
 
Zitat:

Zitat von Luckie
Such mal nach der Fehlermeldung hier im Forum.

Ich weiß nicht, ob du das meinst, aber er möchte wissen, wie man die integrierte Fehlerbehandlung von Delphi deaktiviert, oder nicht? :gruebel:

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: Klick.


Edit: Massig Tippfehler verbessert.

MrZweig 8. Sep 2004 18:29

Re: Exception Messagebox unterdrücken
 
Vielen Dank Matze, das wars :)

Luckie 8. Sep 2004 18:35

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- :?

MrZweig 8. Sep 2004 19:32

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

Matze 8. Sep 2004 19:34

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. ;)

Treffnix 8. Sep 2004 19:39

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.

MrZweig 8. Sep 2004 20:09

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

Aenogym 8. Sep 2004 20:27

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

Luckie 9. Sep 2004 21:34

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.

Lord Dave 9. Sep 2004 21:38

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:

negaH 9. Sep 2004 23:33

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 ;)

MagicAndre1981 26. Sep 2004 13:39

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é

negaH 26. Sep 2004 14:25

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 14:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz