Programowe przewijanie listbox

Programowe przewijanie listbox
Mariusz Bruniewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Świecie
0

Mam problem bo nie wiem jaki komunikat wysłać aby przewinąć 10 linijek
w listbox. Dla memo jest to

Kopiuj
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, 10);

Dla listbox nie działa, więc robię to tak:

Kopiuj
var
i : integer;
begin
for i := 0 to 10 do
Listbox1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);

jednak, takie przewijanie nie jest płynne od linii 0. Jaki dobrać parametr
aby uzyskać efekt przewijania taki jak w memo ?

Pozdrawiam

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Skleciłem teraz (nie wiem może da się inaczej) w każdym razie sprawdź czy działa tak jak chcesz.

Kopiuj
//lb - ListBox który chcesz przewijac
//pCount - o ile pozycji
//Up - przewianie w góre (domyślnie w dół)
procedure ScrollListBox(lb: TListBox; pCount: Integer; Up: Boolean = False);
var
  current: Integer;
begin
  current:= SendMessage(lb.Handle, LB_GETTOPINDEX, 0, 0);
  if (Up = True) then
  begin
    SendMessage(lb.Handle, LB_SETTOPINDEX, 0, 0);
    SendMessage(lb.Handle, LB_SETTOPINDEX, current - pCount, 0);
  end
  else
    SendMessage(lb.Handle, LB_SETTOPINDEX, current + pCount, 0);
end;
Mariusz Bruniewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Świecie
0

kAzek kod działa dokładnie tak chciałem.
Bo jak robiłem z pętlą to na początku jak i od końca suwak przy
każdym pierwszym kliknięciu przesuwał się dwa razy a później
płynnie.
Dzięki bardzo za kod

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.