PDA

Ver la Versión Completa : uso de tAniIndicator - animación "Cargando..."


vicens22
15-11-2015, 12:23:56
Buenos días,

Estoy intentando que al activar un nuevo form en que se accede a un registro en particular o cuando se realiza una consulta a un clientdataset, se muestre un mensaje de "Cargando datos", junto con un objeto tAniIndicator que muestre un cursor rotando de espera.
Lo he probado poniendo el objeto AniIndicator dentro de un tRectangle y también en un tPanel y en los dos casos el objeto AniIndicator aparece estático.



procedure TForm1.ShowLoading;
begin
Panel2.Position.X := (FormFactor.Width - panel2.Width) / 2;
panel2.Position.Y := (FormFactor.Height - panel2.Height) / 2;
panel2.Visible := True;
panel2.BringToFront;
Application.ProcessMessages;
end;

¿ Cual sería la forma correcta de conseguir ese efecto ?
Por otro lado, tampoco veo la forma de cambiar el estilo y color del objeto tAniIndicator.

Gracias por cualquier ayuda o sugerencia.

Saludos

AgustinOrtu
15-11-2015, 15:52:25
Pegale una ojeada al demo del TActivityIndicator

AgustinOrtu
15-11-2015, 15:58:22
Estas de buenas, me quedo compilado el demo en cuestion :)

Revisa la propiedad Animate (Boolean). Cuando esta a True, anima

Para el estilo tenes 3 variantes, controladas por la propeidad IndicatorType

Color solamente dispones entre blanco o negro, revisa la propiedad IndicatorColor

Tambien podes modificar el tamaño, usando la propiedad IndicatorSize

Lee tambien la documentacion (http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.WinXCtrls.TActivityIndicator)


Por otro lado yo siempre recomiendo no usar el Application.ProcessMessages, y mejor utilizar Threads para ejecutar trabajo pesado y que el MainThread siga controlando la UI

Tene en cuenta que la animacion del TActivityIndicator ocurre en el MainThread.


procedure Calcular;
begin
Indicator.Animate := True;
try
{ Ejecutar proceso largo, lo voy a simular con Sleep }
Sleep(5000);
finally
Indicator.Animate := False;
end;
end;


En ese codigo, al ejecutarse la llamada a Sleep, o bien cuando llamas a un proceso que tarda, el MainThread se congela y asi mismo la animacion, parece que quedo "tildado"

La solucion es ejecutar el trabajo pesado en un thread. Hay un monton de ejemplos por el foro, solo queria puntualizarlo

vicens22
15-11-2015, 16:59:54
Gracias, pero creo que todo lo que comentas hace referencia a un objeto distinto.
La aplicación que estoy creando es para Android, utilizando FMX, por eso lo publiqué en este foro.

El código y propiedades a las que haces referencia, si no me equivoco son del siguiente componente VCL.

Vcl.WinXCtrls.TActivityIndicator

Yo estoy intentando utilizar , el siguiente, creo que equivalente en FMX para Android e IOS.

FMX.StdCtrls.TAniIndicator

Estoy utilizando Delphi Seattle 10.

Gracias igualmente por tu ayuda.
Saludos

AgustinOrtu
15-11-2015, 18:57:29
Pequeño desliz :o

Para animarlo en FMX es Indicator.Enabled := True (False obviamente lo contrario)

Despues hay una propiedad Style para modificar un poco la apariencia

El tamaño en este caso lo definis como en cualquier control FMX (Size.Height y Size.Width)

Para el color es mas complicado.. tenes que editar el estilo del objeto FMX. Eso se hace desde el IDE, boton derecho sobre el control, edit custom style o edit default style. Luego tenes que manipular los bitmap (los styles en FMX son basados en bitmaps). Es bastante engorroso pero se podrian hacer cosas bastante potentes, tenes control absoluto de la apariencia del control

En este video (https://youtu.be/sQBfABmgASo?t=7m55s) muestran algo