Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mensaje mientras hay proceso (https://www.clubdelphi.com/foros/showthread.php?t=30192)

marcelofabiani 10-02-2006 17:50:41

mensaje mientras hay proceso
 
Buenas queridos amigos del foro:

Mi pregunta es la siguiente trabajo con el delphi 6.0 y mysql, en el programa hay un proceso que debeo realizar de llenado de datos a una tabla, y deseo que mientras ese proceso este ejecutandose aparezca una ventana que le diga al usuario que se esta procesando y desaparezca cuando termine, por ahora la unica forma que encontre de hacer esto es mostrar un showmessage al principio y cuando finalize otro showmessage que dice que el proceso ha terminado

showmessage('','Texto','');
procedimientos para llenado
..
..
showmessage('','Finalizo');

OSKR 10-02-2006 18:57:38

El proceso debes crearlo con un hilo, puedes instanciar un objeto de la clase Thread, de eso hay ejemplos en el IDE, mandas tu mensaje y le das al hilo su respectivo Execute.

marcelofabiani 10-02-2006 19:22:18

Gracias por responder, lamentablemente no tengo los ejemplos ahi asi que quisiera saber si tienes algun ejemplo o algun link donde pueda ver como debo hacer esto?

OSKR 10-02-2006 19:41:51

Yo lo puedo hacer en Builder, conozco Pascal pero no Object Pascal para aqello de la herencia y objetos, me extraña q tu IDE no traiga ejemplos, puedo entender codigo de ahi y pasarlo a C++ pero no siempre al contrario
ahi te paso un ejemplo q trae el builder de como implementar una, espero q te sirva de algo:
Código:

class TSparkyThread : public TThread
{ private:
  protected:
      void __fastcall Execute();
  public:
        __fastcall TSparkyThread(bool CreateSuspended);
};
__fastcall TSparkyThread::TSparkyThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
void __fastcall TSparkyThread::Execute()
{
  while (!Terminated)
  {
    Beep();
    Sleep(500);
  }
}
void __fastcall TService1::Service1Start(TService *Sender, bool &Started)
{
  SparkyThread = new TSparkyThread(false);
  Started = true;
}
void __fastcall TService1::Service1Continue(TService *Sender, bool &Continued)
{
  SparkyThread->Resume();
  Continued = true;
}
void __fastcall TService1::Service1Pause(TService *Sender, bool &Paused)
{
  SparkyThread->Suspend();
  Paused = true;
}
void __fastcall TService1::Service1Stop(TService *Sender, bool &Stopped)
{
  SparkyThread->Terminate();
  Stopped = true;
}

Tambien puedes usar hilos de la WinAPI, es menos engorroso y ese si es standard tanto pa builder como delphi

OSKR 10-02-2006 19:51:43

Aja!! lo encontre, el ejemplo de como usar una hebra con la WinAPI:
http://www.clubdelphi.com/foros/showthread.php?t=19588

roman 10-02-2006 20:16:55

Disculpen, no entiendo para qué usar un hilo. Por lo que describe Marcelo, sólo le interesa mostrar un mensaje que indique al usuario que está corriendo el proceso; no menciona nada de correr el proceso en "background" o algo así.

// Saludos

OSKR 10-02-2006 21:52:43

marcelofabiani:
Cita:

y deseo que mientras ese proceso este ejecutandose aparezca una
ventana que le diga al usuario que se esta procesando y desaparezca cuando
termine
es q supuse muchas cosas :D y tal vez no supuse otras :p.

roman 10-02-2006 22:00:13

Yo sólo quería aclarar para no confundir a Marcelo. Sin embargo, es bueno que hayas mencionado los hilos porque quizá sea una posibilidad que no ha considerado (ejecutar el proceso en segundo plano) y por ello piensa en un mensaje mientras se ejecuta.

// Saludos

OSKR 10-02-2006 22:20:50

roman:
Cita:

quizá sea una posibilidad que no ha considerado
pues la q consideré q ocurría era q el mensaje le detenía el programa hasta q el user aceptara o algo asi....

AzidRain 13-02-2006 05:18:27

Yo queria hacer algo igual...me meti con los hilos y se me hizo mucha complicacion solo para un mensaje. Asi que hice lo siguiente: Cree un form con un TLabel con alignment a "aClient". El form lo pongo como centrado y como lo quiero mostrar (sin botones minimizar, cerrar, etc.) obviamente sin dar la posiblidad de cerrarlo mas que por código. Antes de ejecutar la operacion que tomara tiempo, asigno el form a una variable y lo creo al vuelo, modifico lo que quiero que diga el TLabel y muestro el form en forma no-modal para que se quede visible y se siga ejecutando la operacion...durante la operacion que este haciendo puedo inclusive actualizar lo que muestra el form.. al terminar mi opeacion..simplemente libero el form (y la memoria) y listo...
Se que no es una solución muy elegante, pero el resultado es bastante bueno y me ha funcionado muy bien..


La franja horaria es GMT +2. Ahora son las 16:22:31.

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