Automatyczne przewijanie ListBox

0

Witam!

Mam problem z obsługą automatycznego przewijania ListBox (używam bardziej rozbudowanego komponentu JVCL ale zasada taka sama). Na formie jest ListBox i nad nim i pod nim obiekt (może byc shape, image, button obojętne). Gdy kursor myszy jest nad górnym obiektem ListBox przewija się do góry gdy nad dolnym to w dół. No i do tej pory osiągnąłem tylko tyle że się przewija ale gdy kursor myszy jest poza obiektem to powinno się przestać przewijać a to leci do końca ListBox'a :(

Chcę coś takiego zastosować ponieważ mam Drag&Drop z DBGrida do ListBox'a i to w określone miejsce ListBoxa. Gdy chwycę wartość z DBGrida i jestem nad ListBox to nie wiem jak wtedy go przewijać więc stąd ten pomysł.

Przewijanie zrobiłem poprzez zmianę wartości ListBox.ItemIndex.

Może ktoś mnie natchnie? Timer ani sleep mi nie zadziałało. Zrobiłem wątek do obsługi przewijania ale się wiesza program.

Z góry dzięki za info!

0

ok, już mam przewijanie przy pomocy dwóch Timerów. Ale jak to połączyć? Tzn. Drag&Drop oraz onmouseenter dla buttona? Gdy przeciągam element z DBGrid i kursor wchodzi na Buttona to jest hmm zablokowany (?)... I przewijanie wtedy nie działa.

Jak to połączyć?

0

Ja bym to zrobił z odczytu pozycji kursora jeśli jest nad wyznaczonym pikselami (czyli nad buttonem od przewijania w dół lub w górę) no i wtedy działa mi przewijanie automatyczne. Wszystko w:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

end;
0

Już opanowałem sytuację. Rozwiązanie z Timer'ami działa. W OnMouseEnter mam Timer.Enabled:=true a w OnMouseLeave mam Timer.Enabled:=false. Dodatkowo musiałem jednak pozwolić na zdarzenie ButtonDragOver dla Buttona pochodzące od DBGrida (de facto nic się w nim nie dzieje tylko akceptuję źródło DBGrid: Accept:=Source is DBGrid i włączam Timer).

Dziękuję za zainteresowanie!
W praktyce wyjdzie czy to jest dobre rozwiązanie czy nie.

Próbowałem zrobić to na pikselach ale MouseEnter podaje tylko jednorazowo współrzędne tylko przy wejściu i gdy próbowałem coś z tym działać to przewijało mi ListBoxa w nieskończoność :)

Pozdrawiam!

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