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
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
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
Tasks: array of ITask;
begin
Caption := ACaption;
DisplayText.Caption := AText;
SetLength(Tasks, 1);
Tasks[0] := TTask.Create(ATask);
Tasks[0].Start;
Show;
while Tasks[0].Status = TTaskStatus.Running do
Application.ProcessMessages;
Close;
end;
Ejemplo de uso:
Código Delphi
[-]
procedure TFLogin.BtnAceptarClick(Sender: TObject);
begin
try
Application.CreateForm(TFProgressDialog, FProgressDialog);
FProgressDialog.Initialize(DM.Conectar, 'Conectando', 'Conectando, por favor espere...');
finally
FProgressDialog.Free;
end;
end;
Un saludo y espero que les sirva, quiza es algo muy basico y simple pero apenas estoy explorando esta libreria