Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is online now
Miembro Premium
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.749
Poder: 8
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Thumbs up Dialogo con barra de progreso

Que tal Club

En virtud de hilos como este

Y similares que perdi de vista y no anote

Estuve esta tarde jugando un rato con Delphi XE7 y la Parallel Library y llege a esta solucion:

Simplemente para hacer uso de esta libreria, el compañero Nelson ya ha dejado excelentes soluciones tambien:

Lo que hice fue lo siguiente:

Digamos que tengo un DataModule que llame DM, en el coloque mis componentes de acceso a datos preferidos (en este caso opte por FireDAC) y realice una conexion normal (en localhost) a SQL Server. Es decir, puedo hacer sin problemas esto

Código Delphi [-]
  Connection.Connected := True;

Y conecta instantaneamente, no hay ningun problema. Ahora supongamos que la conexion es por internet y puede tardar como se sugeria en el el post de por arriba. Emule ese delay de la siguiente manera, defini un metodo en la seccion publica del DataModule, asi:

Código Delphi [-]
  public
    { Public declarations }
    procedure Conectar;

Y su implementacion:

Código Delphi [-]
procedure TDM.Conectar;
begin
    Connection.Connected := True;
    Sleep(5000);
end;

Entonces el objetivo a lograr era que mientras estaba "conectando", mostrar una barra de progreso infinita (marquesina) como para decir, "ey, no desesperes, estoy intentando conectar"

Para eso agrege un nuevo Form y al que llame FProgressDialog. Simplemente tiene un TStaticText (podria ser un TLabel) y un TProgressBar, en la que coloque las siguientes propiedades:

Código Delphi [-]
  MarqueeInterval := 50;
  Style := pbstMarquee;

Es necesario agregar la unidad System.Threading en la seccion interface -> uses de la unidad del ProgressDialog. Esta es la unidad que contiene la Parallel Library.

De igual manera que en el DataModule, se agrega un nuevo procedimiento en la seccion publica del Form:

Código Delphi [-]
  public
    { Public declarations }
    procedure Initialize(ATask: TProc; const ACaption, AText: string);

Y ahora la parte "jugosa", su implementacion:

Código Delphi [-]
procedure TFProgressDialog.Initialize(ATask: TProc; const ACaption, AText: string);
var
    // este arreglo va a contener una lista de "tareas" que quiero que se ejecuten en paralelo
    Tasks: array of ITask;
begin
    // colocamos en el Caption del Form un texto que enviamos como parametro
    Caption := ACaption; 
    // Display Text es mi TStaticText, es un texto que coloque por encima de la barra de progreso
    DisplayText.Caption := AText;

    // es un array dinamico, debo decirle su tamaño
    SetLength(Tasks, 1);
    // creo una nueva tarea, a la cual le indico que el proceso que debe ejecutar,
    // es a su ves un un metodo anonimo que me llega como parametro
    Tasks[0] := TTask.Create(ATask);
    // comienza a ejecutarse el proceso
    Tasks[0].Start;
    // esto es para mostrar el Formulario, inicialmente no estaba visible
    Show;

    // hasta que no termine el proceso, tengo que seguir procesando los mensajes de Windows,
    // esto es para que la barra de progreso "se mueva"
    while Tasks[0].Status = TTaskStatus.Running do
        Application.ProcessMessages;

    // una ves terminada la tarea, cierro el form automaticamente
    Close;
end;

Ejemplo de uso:

Código Delphi [-]
procedure TFLogin.BtnAceptarClick(Sender: TObject);
begin
    try
        // creamos nuestro dialogo con barra de progreso
        Application.CreateForm(TFProgressDialog, FProgressDialog);
        // llamamos al metodo Initialize, aqui le estoy enviando el metodo de mi DataModule que esta definido mas arriba
        FProgressDialog.Initialize(DM.Conectar, 'Conectando', 'Conectando, por favor espere...');
    finally
        // liberamos el form
        FProgressDialog.Free;
    end;
end;

Un saludo y espero que les sirva, quiza es algo muy basico y simple pero apenas estoy explorando esta libreria
Responder Con Cita
  #2  
Antiguo 09-04-2015
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 973
Poder: 12
ElKurgan Va por buen camino
Thumbs up

Gracias por el aporte
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Barra de progreso nabucodonosor Delphi para la web 3 01-11-2012 10:57:04
Barra de Progreso XcamX MySQL 1 21-12-2010 11:24:52
Barra de progreso? marlulipe Impresión 5 26-02-2008 16:51:55
Barra de progreso al compactar Aprendiendo Conexión con bases de datos 2 02-05-2007 20:42:32
Mostrar progreso de descarga de IndyFTP con barra de progreso devicer Internet 2 05-12-2005 14:59:32


La franja horaria es GMT +2. Ahora son las 22:54:15.


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