Programowe przewijanie listbox

0

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

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

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

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

0

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

//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;
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

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