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.