PDA

Ver la Versión Completa : SubFormulario de un procedure


elcharlie
09-10-2013, 12:48:55
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:
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:
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:
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...