3
我在做一個需要通過tcp/ip進行通信的應用程序。這個程序有一個參數模式形式,它獲取服務器的IP地址,需要的數據以及用於測試連接的測試按鈕。 該測試按鈕調用一個函數來檢查服務器是否處於活動狀態,並且我想用pbstMarquee樣式顯示一個帶有典型進度條的表單,表明您正在嘗試建立連接。 這是測試按鈕的代碼:爲什麼我的選取框進度條不動畫?
function TestTCPClient(Host,Password: String; Puerto: Integer; AOwner: TComponent):
Boolean;
var
TCPCliente: TIdTCPClient;
textoEnvio: String;
begin
TCPCliente := TIdTCPClient.Create(nil);
Result := False;
TCPCliente.Host := Host;
TCPCliente.Port := Puerto;
TCPCliente.ConnectTimeout := 20000;
textoEnvio := Trim(Password)+'|TEST|#';
try
ShowFormCompConexion(AOwner, 'Intentando establecer conexión con el equipo
'+Host+'...'); //Trying to connect
TCPCliente.Connect;
TCPCliente.Socket.ReadTimeout := 10000;
TCPCliente.Socket.WriteLn(textoEnvio, TEncoding.ANSI);
if (TCPCliente.Socket.ReadLn(TEncoding.ANSI) = 'OK#') then
Result := True;
CloseFormCompConexion;
except
on E : Exception do
begin
CloseFormCompConexion;
Exit;
end;
end;
end;
和該函數的代碼,顯示進度條的形式::
procedure ShowFormCompConexion(AOwner: TComponent; Dato: String);
begin
Form_CompConexion := TFormCompConexion.Create(AOwner);
Form_CompConexion.LbDato.Caption := Dato;
Form_CompConexion.Show;
Form_CompConexion.Repaint;
end;
procedure TFormConfiguracion.ButtonTestClienteClick(Sender: TObject);
begin
if TestTCPClient(EdIPCliente.Text, EdPasswordProtocolo.Text, EdPuertoCliente.Value,
self) then
begin
MensajeInformacion('Conexión con el Servidor Establecida con Exito!',''); //Ok
else
begin
MensajeError('Error al Conectar con el Servidor!',''); //Error
end;
end;
功能TestTCP的代碼
問題是這個表單保持不活動,我的意思是不移動進度條,就像等待她完成這個過程。我試圖把一個GIF,並沒有什麼,沒有人讓我編輯TEDIT ....
對不起我的英語
我該怎麼做? – elcharlie
@elcharlie,請參閱['Delphi(Indy)TIdTCPClient in thread'](http://stackoverflow.com/q/11753219/576719)。 –
使用線程的另一種方法是使用Indy的TIdAntiFreeze組件,它允許在套接字阻塞UI時繼續處理消息隊列。 –