PDA

Ver la Versión Completa : Como hacer esto ?


radge
10-12-2010, 17:12:31
Buenas tengo una duda , tengo un proyecto que es un actualizador de ficheros , lo tengo estructurado con funciones y procedimientos , pero el programa tiene que ser totalmente transparente para el usuario , así que nada más mostrar el formulario (form1.onshow() ) allí hago las llamadas a funciones y procedimientos que esto lo que hace es conectar-se a un ftp , descargar archivos , ponerlos en su sitio etc ...

Esto lo tengo con una progressbar para ver un poco el estado del mismo , el problema es que no veo el formulario (form1.onshow) hasta que se han ejecutado todas las operaciones , he probado a poner form1.refresh entre medio de las operaciones para ver si refrescava el formulario pero no lo hace.

Se os ocurre que puedo hacer ?

gracias , radge

Casimiro Notevi
10-12-2010, 17:56:21
No lo he entendido muy bien, pero creo que si lo pones en el onactivate, se verá.

Y por cierto, amigo radge, ya llevas un montón de mensajes para que pongas ese título a tu pregunta, te recuerdo que debes poner títulos descriptivos que sirvan luego para hacer búsquedas según el tema.
¿Ya olvidaste la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)? ;)

Chris
10-12-2010, 18:02:35
Usa Form.Update

ecfisa
10-12-2010, 18:33:00
el problema es que no veo el formulario (form1.onshow) hasta que se han ejecutado todas las operaciones

Hola.

Si los procesos transcurren antes o durante el evento FormShow, no veo solución en forma directa.
Pero creo que lo que te va a funcionar, es crear y capturar un mensaje AfterShow.

Ejemplo:

...
const
TAREAS_AFTER_SHOW = WM_USER + 300;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
procedure TareasAfterShow(var Msg: TMessage); message TAREAS_AFTER_SHOW;
public
end;
...
interface
...
procedure TForm1.FormShow(Sender: TObject);
begin
// Lo que quieras mostrar...
Caption:= 'Evento OnShow';
PostMessage(Handle, TAREAS_AFTER_SHOW, 0, 0);
end;

procedure TForm1.TareasAfterShow(var Msg: TMessage);
begin
// Aca los procesos que quieras
Sleep(2000); // simula demora de procesos
ShowMessage('Tareas finalizadas');
end;
...


Saludos.

Neftali [Germán.Estévez]
13-12-2010, 11:35:09
Pues iba a proponer lo mismo que ya ha dicho ecfisa. Creo que es la solución más simple. Por otro lado, dependiendo del tipo de operaciones y de las cosas que quieras mostrar en el form1, deberás ir refrescándolo o utilizar threads (pero ese ya es otro tema).

Prueba con lo que te ha comentado y ya dirás...

[ecfisa] + 1 :D

radge
21-12-2010, 19:25:24
Muchas gracias por vuestras respuestas.

Al final lo hize así como me dijisteis.

saludos radge