2011-09-15 8 views
6

Di solito, quando ho un compito che richiede un certo tempo, ho utilizzare uno script come questo:Con Firemonkey, come fornire un feedback all'utente? (CrHourglass)

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

    try  
    // the task 

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

Con FireMonkey, schermo non ha una proprietà: Cursor.

Qual è il modo migliore per fornire un feedback all'utente?



ho seguito i commenti e la risposta ... con un TPanel che ha meno opacità e un TAniIndicator (ho anche sfocatura gli altri componenti):

Feedback

Grazie!

+4

dimming forma (sovrapponendo alcuni rettangolo di alpha-blending) e la visualizzazione di una GIF animata - come uno di quelli che può essere generata in http : //www.ajaxload.info/ - forse? – mjn

+1

Anche se non si desidera un'interazione dell'utente durante questo periodo, è possibile renderlo più ovvio disattivando i controlli e visualizzando un pannello con un messaggio come "Attendere mentre ..." e la gif animata come suggerita da mjn, o una barra di avanzamento per indicare che l'app non è congelata, ecc. @mjn: +1 per l'effetto dimming e gif, bel tocco – Morfic

+1

sì, è ragionevole ... FYI, ho usato un TAniIndicator che è un componente che assomiglia qualsiasi ajaxload: o) – Whiler

risposta

1

Come @mjn ha sottolineato, il cursore ora di vetro non è più l'unico modello di attesa che è possibile utilizzare.

Per esempio, in Silverlight/WPF, è possibile utilizzare un controllo indicatore di occupato, http://www.codeproject.com/KB/silverlight/SilverlightBusyIndicator.aspx

Così si può provare a fare qualcosa di simile all'interno FireMonkey. Potrebbe esserci un controllo simile da usare già, oppure puoi scrivere il tuo.

1

FireMonkey tscreen non ha proprietà Cursor, ma esempio piattaforma globale ha un metodo SetCursor:

utilizza FMX.Platform, System.UITypes;

... Platform.SetCursor (nil, crHourGlass); try ... finally Platform.SetCursor (nil, crDefault); fine;

+0

Ho appena provato il tuo script ... Funziona finchè lo script non è finito, e tu don ' t chiamare 'ProcessMessages' ...' Platform.SetCursor (nil, crHourGlass); Sonno (3000); Segnale acustico; mentre (non CheckBox1.IsChecked) do begin Application.ProcessMessages; fine; ShowMessage ('over'); ' – Whiler

1

questo funziona per me su XE3, FireMonkey2 esecuzione su XP:

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

FYI: Non esiste in XE2. – Whiler

+0

Inoltre, mi piacerebbe l'Hourglass ovunque, su tutti i componenti ... non solo su 'Form' senza componenti. – Whiler