OK I have an array of tserversocket and am using the tag property to keep track of its index. When an event is fired off such as _clientconnect i am using Index := (Sender as TServerSocket).Tag; but i get an error that highlights that line and tells me its an invalid typecast. What am I doing wrong if all I want to do is get the tag property field? It works with other objects.
-
Are you sure Sender is the TServerSocket? Isn't the event defined like below:
procedure TfrmServer.sskServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
In which case your code probably should be: Index := (Socket as TServerSocket).Tag;
Have a look at Sender.ClassName to see what Sender really is.
From Chris Latta -
I'm afraid you won't be able to find the TServerSocket tag property using this method. The reason is that Sender is an instance of TServerWinSocket and Socket is an instance of TCustomWinSocket - neither of these can be cast to a TServerSocket. Take a look in ScktComp.pas (in Source\Vcl). TServerSocket is simply a wrapper for an internal instance of TServerWinSocket.
You could do something like this:
TMyServerWinSocket = class(TServerWinSocket) private FServerSocket : TServerSocket; public destructor Destroy; override; property Server : TServerSocket read FServerSocket write FServerSocket; end; TMyServerSocket = class(TServerSocket) public constructor Create(AOwner : TComponent); end;
The implementation would look like this:
constructor TMyServerWinSocket.Destroy; begin FServer := nil; end; constructor TMyServerSocket.Create(AOwner : TComponent) begin FServerSocket := TMyServerSocket.Create(INVALID_SOCKET); FServerSocket.Server := Self; InitSocket(FServerSocket); FServerSocket.ThreadCacheSize := 10; end;
Then (whew, almost there) in your event handler you can do this:
procedure TfrmServer.sskServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Index := (Sender as TMyServerWinSocket).Server.Tag; end;
What this means is that instead of creating TServerSocket objects in your array you'll need to create TMyServerSocket instances.
Hope that helps.
From Jody Dawkins -
How come FServerSocket. > Server < := Self; gets highlighted as an error? server doesn't appear in the methods list.
-
What is the sender? I'm quite sure it isn't TServersocket. Regards
0 comments:
Post a Comment