Własne hinty i najlepszy sposób ich pokazywania

0

Cześć, mam komponent pochodny od TDrawGrid.
Dorobiłem do niego m.in. dwa zdarzenia w stylu: OnMouseEnterCell i OnMouseLeaveCell.

Potrzebne mi są po to, żeby pokazywać hinty z zawartością konkretnej komórki. Okienko ładnie się pokazuje, ale jest jedna rzecz, która mi się nie podoba.

Mianowicie, jak wiadomo okno nie może się pokazać od razu, tylko po pewnym czasie po najechaniu na komponent.
I pytanie brzmi, jak to zrobić najefektywniej. Bo w tym momencie odczekuję ten czas w taki sposób:

tc:=GetTickCount;
while GetTickCount < tc + FWaitTime do Application.ProcessMessages;

Plusem tego rozwiązania jest to, że aplikacja normalnie działa, natomiast minusem, że gdy np. przejadę szybko myszą po komórkach i opuszczę grida, to wtedy czasem widać, jak pojawiają i znikają hinty. Dzieje się to bardzo szybko, widać jakby kilka błysków, ale no wiadomo, że jest to zrobione źle.

Myślałem też o zastosowaniu sleep, ale to znowu jest złe, bo... no wiadomo.

Myślałem tez o zastosowaniu takiej pętli:

tc:=GetTickCount;
while GetTickCount < tc + FWaitTime do 
begin

end;

Ale czy to się różni czymkolwiek od sleep'a?

Ostatecznie myślałem też o użyciu timera.
I teraz pytanie, która z tych opcji będzie najlepsza? A może jeszcze coś innego?

Dokładne działanie ma polegać na tym, że podczas najechania na komórkę, hint się pokazuje, a podczas zjazdu z komórki ukrywa.
Czyli gdy "chodzimy" kursorem po gridzie, to najpierw wywoła się metoda odpowiedzialna za schowanie hinta(zjechaliśmy z poprzedniej komórki), a dopiero potem za pokazanie go.

0

Jaka jest róznica pomiedzy zastosowaniem Sleep a dowolnej petli bez użycia Application.ProcessMessages; - żadna. Z punktu widzenia użytkownika.

Application.ProcessMessages; Pozwala aplikacji na odbieranie komunikatów od systemu - zapobiega wieszaniu sie aplikacji.

Jesli chodzi o twój problem to najlepiej by było zrobic to na timerach.
Pomijam tu fakt w jaki sposób pokazujesz podpowiedzi..

Ale zrobiłbym Timer1 ustawił w nim czas na taki po jakim ma się pokazać podpowiedz.
W evencie cellleave ustawiłbym Timer1.enabled:=false,i ukrywanie podpowiedzi jesli aktualnie sie wyswietla, w cellenter timer1.enabled:=true; podpowiedz:='jakas podpowiedz';
a w OnTimer wyswietlanie podpowiedzi podpowiedz i polecenie Timer1.enabled:=false;

Tyle na sucho, pokaż wiecej kodu jak chcesz wiecej informacji.

0

Ja wiem. Mam to wszystko zrobione, tylko chciałem się upewnić, czy użycie timera na pewno będzie najlepsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1