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:
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.
Das gilt zunächst einmal für Delphi 7, denk ich mal.
Ich bin drauf gekommen, weil die
Exception nicht exakt zu dem Zeitpunkt auftritt, als Client.Open() ausgeführt wird.