Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SubFormulario de un procedure (https://www.clubdelphi.com/foros/showthread.php?t=84354)

elcharlie 09-10-2013 12:48:55

SubFormulario de un procedure
 
Buenos dias a Todos:
Estoy haciendo una aplicación la cual, tiene que comunicarse por protocolo tcp/ip. Este programa tiene uno formulario modal de parametros, en el cual se mete la ip del servidor, los datos necesarios, y un boton test para probar la conexion.
Ese boton test llama a una funcion que comprueba si el servidor esta activo, y me gustaria que se mostrara un formulario con la tipica progress bar con el stilo pbstMarquee, indicando que esta intentando realizar la conexion.
este es el codigo del boton test:
Código Delphi [-]
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!','');
  end
  else
  begin    
    MensajeError('Error al Conectar con el Servidor!','');
  end;
end;

el codigo de la funcion TestTCP:
Código Delphi [-]
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+'...');
    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;
y el codigo de la funcion que muestra el formulario con la barra de progreso:
Código Delphi [-]
procedure ShowFormCompConexion(AOwner: TComponent; Dato: String);
var
  WindowList: TTaskWindowList;
  LSaveFocusState: TFocusState;
  SaveCursor: TCursor;
  SaveCount: Integer;
  ActiveWindow: HWnd;
begin
 Form_CompConexion := TFormCompConexion.Create(AOwner);
 Form_CompConexion.LbDato.Caption := Dato;
 Form_CompConexion.Show;
 Form_CompConexion.Repaint;
end;

El problema es que este formulario se queda como inactivo, me explico no se mueve la barra de progreso, es como si el esperara a que acabara el proceso. He probado a meter un gif, y nada, un edit y no me deja editarlo....
Alguien me puede ayudar??

Ñuño Martínez 09-10-2013 13:48:52

Iba a decirte que pusieras un "Application.ProcessMessages", pero veo que no usas un bucle, así que eso no solucionaría mucho, me temo.

Quizá abriendo la ventana de notificación (la que muestra la barra de progreso) en otro hilo de ejecución sí funcione.

elcharlie 09-10-2013 13:54:03

Aun asi, tambien lo probe, por si acaso...


La franja horaria es GMT +2. Ahora son las 13:33:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi