![]() |
TClientSocket Eigenschaften in eigener Unit
Moin,
ich bräuchte mal eure Hilfe. Ich kenne mich nicht so doll damit aus.
Delphi-Quellcode:
Bei der Zuweisung von Client.OnConnect und Client.OnError kommt es zum Fehler. Denn ich nicht lösen kann.
unit uHostSocketAlive;
interface function IsHostSocketAlive(Hostname: String; Port : Integer = 29979) : Boolean; implementation uses Windows, Forms, ScktComp; var Client : TClientSocket; IsAlive : Boolean; Finish : Boolean; procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin IsAlive := TRUE; Finish := TRUE; end; procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if ErrorCode > 0 then begin Client.Close; IsAlive := FALSE; ErrorCode := 0; end; Finish := TRUE; end; function IsHostSocketAlive(Hostname: String; Port : Integer = 29979) : Boolean; begin IsAlive := FALSE; Finish := FALSE; Result := FALSE; //Initialisierung des Objekts (ältere Delphi-Versionen) Client := TClientSocket.Create(Client); Client.OnConnect := ClientConnect; Client.OnError := ClientError; try Client.Port := Port; // Remote Computer mit dem die Verbindung aufgebaut werden soll Client.Host:= Hostname; Client.Open; except //Im Fehlerfall wieder freigeben (ältere Versionen) Client.Free; end; while Finish = FALSE do begin Application.ProcessMessages; end; // Result setzen Result := IsAlive; end; end. Meldermeldung: Zitat:
Als Ergebnis möchte ich gerne aus einer anderen Unit "IsHostSocketAlive" aufrufen und der Rückgabewert ist TRUE wenn die Verbindung zustande gekommen ist oder FALSE wenn es nicht geklappt hat. Vielen Dank im voraus. Gruß, Sven |
Re: TClientSocket Eigenschaften in eigener Unit
Eine Methode ist ein Member einer Klasse. Was Du hast, sind reguläre Funktionen. Diese sind zu Events nicht kompatibel, Du musst Dir also eine Klasse schreiben, die die Funktionen besitzt, dann kannst Du sie auch zuweisen.
Delphi-Quellcode:
type TMyClass = class
private procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket); ... end; ... procedure TMyClass.ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin //Code end; |
Re: TClientSocket Eigenschaften in eigener Unit
So, ich habe das jetzt mal geändert aber leider noch nicht am gewünschten Ziel.
Delphi-Quellcode:
Jetzt kommen die Fehlermedldungen:
...
type TMyClass = class private { Private-Deklarationen } procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); public { Public-Deklarationen } end; ... procedure TMyClass.ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin // Code end; procedure TMyClass.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin // Code end; function IsHostSocketAlive(Hostname: String; Port : Integer = 29979) : Boolean; begin IsAlive := FALSE; Finish := FALSE; Result := FALSE; //Initialisierung des Objekts (ältere Delphi-Versionen) Client := TClientSocket.Create(Client); Client.OnError := TMyClass.ClientError; // --> Hier kommt der Fehler Client.OnConnect := TMyClass.ClientConnect; // --> Hier kommt der Fehler ... end; Zitat:
Zitat:
|
Re: TClientSocket Eigenschaften in eigener Unit
Eine Methode gehört zu einer Instanz.
Delphi-Quellcode:
Nur MyClass musst du eben noch erstellen.
Client.OnError := MyClass.ClientError;
|
Re: TClientSocket Eigenschaften in eigener Unit
Du brauchst auch eine Instanz Deiner Klasse. Evtl. geht es auch mit einer Klassenmethode, sowas hab ich aber noch nie versucht.
|
Re: TClientSocket Eigenschaften in eigener Unit
Danke euch. Hab es hinbekommen und wieder etwas dazugelernt.
Schönen Tag noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 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