Re: try ... except ... finally ... ~ funktionieren nicht ?
Hallo,
warum schreibst du nicht gleich, dass Caption bei der Exception nicht gesetzt wird ? Dann muss man sich nicht durch Screenshots hangeln ! tztz Zitat:
Mal ein einfaches Bsp. Neues Projekt erstellen Timer aufs Form und in OnTimer rein.
Delphi-Quellcode:
Er piept und es wird argz angezeigt.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin Beep; try raise Exception.Create('bla'); except Caption:= 'argz'; end; end; end. Um eine Exception zu erzeugen, reicht es übrigens nicht, einfach
Delphi-Quellcode:
Ohne das raise passiert gar nichts, ausser ein Speicherleck.
Exception.Create('bla');
Heiko |
Re: try ... except ... finally ... ~ funktionieren nicht ?
So hab den Fehler selber behoben.
Das Problem dabei ist, dass sich einige Exceptions nicht durch "try ... except ..." abfangen lassen, weil sie nicht im Stack des aktuellen Prozesses auftreten. Bei ClientSocket.Open() wird ein neuer Thread mit eigenem Stack instantiiert und dieser kann dann die Exception auslösen. Diese Exception kann man über ein Ereignis abfangen:
Delphi-Quellcode:
Das gilt zunächst einmal für Delphi 7, denk ich mal.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp; type TForm1 = class(TForm) procedure FormClick(Sender: TObject); public procedure SocketErrorBehandlung(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormClick(Sender: TObject); var Client: TClientSocket; begin Client := TClientSocket.Create(Self); Client.Host := 'localhost'; Client.Port := 12345; Client.OnError := SocketErrorBehandlung; // für die Fehlerbehandlung Client.Open(); // <- hier wird der Thread gestartet, der den Fehler/Exception auslösen kann end; procedure TForm1.SocketErrorBehandlung(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin // hier wird der Fehler behandelt Form1.Caption := 'Fehler ist eingetreten, aber behandelt!'; ErrorCode := 0; end; end. Ich bin drauf gekommen, weil die Exception nicht exakt zu dem Zeitpunkt auftritt, als Client.Open() ausgeführt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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