2011-09-15 9 views
6

Por lo general, cuando tengo una tarea que lleva algún tiempo, utilizar un script como el siguiente:Con Firemonkey, ¿cómo dar retroalimentación al usuario? (CrHourglass)

procedure Work; 
var 
    cPrevious: TCursor; 
begin 
    cPrevious  := Screen.Cursor; 
    Screen.Cursor := crHourGlass; 

    try  
    // the task 

    finally  
    Screen.Cursor := cPrevious; 
    end; 
end; 

Con FireMonkey, pantalla no tiene una propiedad: cursor.

¿Cuál es la mejor manera de dar su opinión al usuario?



que siguieron a los comentarios y la respuesta ... con una TPanel que tiene menos opacidad, y una TAniIndicator (I desenfoque también los otros componentes):

Feedback

¡Gracias!

+4

atenuar la forma (mediante la superposición de algunos rectángulo mezcla alfa) y la visualización de un GIF animado - como uno de los que se puede generar en http : //www.ajaxload.info/ - tal vez? – mjn

+1

Además, si no se desea interacción del usuario durante este tiempo, podría hacerlo más obvio deshabilitando los controles y mostrando un panel con un mensaje como "Espere mientras ..." y el gif animado como sugirió mjn, o una barra de progreso para indicar que la aplicación no está congelada, etc. @mjn: +1 para atenuar efecto y GIF, toque agradable – Morfic

+1

sí, tiene sentido ... FYI, he usado un TAniIndicator que es un componente que se parece a any ajaxload: o) – Whiler

Respuesta

1

Como señaló @mjn, el cursor de la hora del vidrio ya no es el único patrón de espera que puede utilizar.

Por ejemplo, en Silverlight/WPF, puede utilizar un control indicador de ocupado, http://www.codeproject.com/KB/silverlight/SilverlightBusyIndicator.aspx

por lo que puede tratar de hacer algo similar en el interior FireMonkey. Es posible que ya tenga un control similar para usar, o puede escribir el suyo.

1

FireMonkey tscreen no tiene ninguna propiedad Cursor, pero instancia plataforma global tiene un método SetCursor:

utiliza FMX.Platform, System.UITypes;

... Platform.SetCursor (nil, crHourGlass); intente ... finalmente Platform.SetCursor (nil, crDefault); final;

+0

Solo pruebo tu script ... Funciona siempre que el script no haya terminado, y tú no lo haces t llamado 'ProcessMessages' ...' Platform.SetCursor (nil, crHourGlass); Sueño (3000); Pitido; while (no CheckBox1.IsChecked) do begin Application.ProcessMessages; final; ShowMessage ('sobre'); ' – Whiler

1

Esto funciona para mí en XE3, FireMonkey2 corriendo en XP:

`Application.MainForm.Cursor:= crHourGlass;` 
+0

FYI: No existe en XE2. – Whiler

+0

Además, me gustaría el reloj de arena en todas partes, en todos los componentes ... no solo en el 'formulario' sin componentes. – Whiler

Cuestiones relacionadas