type
  TSocketStatus = (ssActive, ssInactive, ssBusy, ssUnknow);  TForm1 = class(TForm)
  ...
  private
    SocketStatus : TSocketStatus;
  ...
  end;function TForm1.Connect: boolean;
begin
  if ClientSocket1.Active then
    result:=true
  else
  begin
    SocketStatus := ssUnknow;
    ClientSocket1.Active:=True;
    while (SocketStatus =ssUnknow) do
    begin
      sleep(100);
      application.ProcessMessages;
    end;
    result := (SocketStatus=ssActive);
  end;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  SocketStatus := ssActive;
end;procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ssStatus := ssInactive;
  ErrorCode := 0;
end;procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  SocketStatus := ssInactive;
end;

解决方案 »

  1.   

    楼上的代码虽然可以,但是要用到application指针我的意思是用一个函数把连接和连接结果检查这两个过程封装起来,而不牵涉具体的应用程序。。
      

  2.   

    多看看scktcomp单元文件吧,有用的。start(..)本身就是socket api,而TClientSocket就是用socket Api封装好的东西。如果你对这控件不满意就自己封装一个好了。
      

  3.   

    可以看看
    http://www.csdn.net/expert/topic/1010/1010355.xml?temp=.3667261