2011-09-15 6 views
6

Zwykle, gdy mam zadanie, które zajmuje trochę czasu, używam skrypt tak:W Firemonkey, jak przekazać informację zwrotną dla użytkownika? (CrHourglass)

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

    try  
    // the task 

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

Z FireMonkey, Ekran nie posiada właściwość: Kursor.

Jaki jest najlepszy sposób na przekazanie informacji zwrotnej użytkownikowi?



śledziłem komentarze i odpowiedzi ... Z TPanel który ma mniej krycie oraz TAniIndicator (ja również zatrzeć inne komponenty):

Feedback

Dziękujemy!

+4

ściemniania formę (przez nałożenie trochę alfa-mieszane prostokąt) i wyświetlanie animowanych GIF - jak jeden z tych, które mogą być generowane na http : //www.ajaxload.info/ - może? – mjn

+1

Jeśli w tym czasie nie jest wymagana interakcja użytkownika, możesz uczynić to bardziej oczywistym, wyłączając kontrolki i wyświetlając panel z komunikatem "Proszę czekać ..." i animowanym gifem, jak sugerował mjn, lub z paskiem postępu aby wskazać, że aplikacja nie jest zamrożona itp. @mjn: +1 dla efektu przyciemnienia i gif, miłego dotyku – Morfic

+1

tak, to ma sens ... FYI, użyłem TAniIndicator, który jest komponentem, który wygląda jak dowolny ajaxload: o) – Whiler

Odpowiedz

1

Jak zauważył @mjn, kursor godzin szklanych przestał być jedynym wzorcem oczekiwania, który można wykorzystać.

Na przykład w Silverlight/WPF, można użyć zajęty kontrolę wskaźnika http://www.codeproject.com/KB/silverlight/SilverlightBusyIndicator.aspx

Więc można spróbować zrobić coś podobnego wewnątrz FireMonkey. Może istnieć podobna kontrola, z której możesz już korzystać lub możesz napisać własną.

1

FireMonkey TScreen ma właściwość Cursor, ale globalna instancja Platforma ma metodę SetCursor:

używa FMX.Platform, System.UITypes;

... Platform.SetCursor (zero, crHourGlass); spróbuj ... wreszcie Platform.SetCursor (zero, crDefault); koniec;

+0

Po prostu wypróbuję twój skrypt ... Działa tak długo, jak długo skrypt się nie skończył, a ty nie. t wywołaj 'ProcessMessages' ...' Platform.SetCursor (zero, crHourGlass); Sleep (3000); Sygnał dźwiękowy; podczas (nie CheckBox1.IsChecked) do rozpocząć Application.ProcessMessages; koniec; ShowMessage ("over"); ' – Whiler

1

Działa to dla mnie na XE3, FireMonkey2 działa na XP:

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

FYI: Nie istnieje w XE2. – Whiler

+0

Co więcej, chciałbym Klepsydrę wszędzie, na wszystkich komponentach ... nie tylko na "Formie" bez komponentów. – Whiler

Powiązane problemy