[Delphi] TListBox odchyt otočení kolečkem myši.

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dyžon 14. 7. 2017 09:57

Zdravím,

potřeboval bych u Listboxu odchytávat otočení kolečkem myši,
respective při otočení kolečkem potřebuju vědět, index položky, která je zrovna nahoře.
jediné, co mě napadlo je tohle:
Kód: Vybrat vše
type
  TListBox = class(Vcl.StdCtrls.TListBox)
  protected
    procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MouseWheel;
  end;

     ...........

procedure TListbox.WMMouseWheel(var Message: TWMMouseWheel);
begin
  inherited;
   Form1. Label1.Caption:= IntToSTr(Form1.ListBox1.TopIndex);
end;


tohle funguje, ale do labelu se vypíše hodnota až když se kolečko dotočí.
příklad otočím kolečkem o tři pozice v tahu, v listboxu se položky pohnou o 9 míst a vypíše se hodnota vrchního.
já bych potřeboval aby se ta hodnota vrchní položky vypsala po každém pootočení, ikdyž je to v tahu třeba 10 pootočení.
ScrollBar Listboxu se pohne přesně po každém pootočení, takže ta informace někde je, ale nepodařilo se mi ji najít.
Pomůžete mi s tím prosím, snad jsem to popsal dostatečně.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 14. 7. 2017 11:45

Použil jsem něco podobného
Kód: Vybrat vše
TMyListBox = class(TListBox)
    protected
      procedure WndProc(var Msg: TMessage );override;
  end;

Kód: Vybrat vše
procedure TMyListBox.WndProc(var Msg: TMessage);
begin
inherited;
if( Msg.Msg = WM_MOUSEWHEEL ) then Form1.Label1.Caption:= IntToSTr(mylistbox.TopIndex);
end;

Funkce reaguje lépe - ale objekt se musí vytvořit za běhu aplikace.
Při použití tvé to opravdu vypíše až po animaci.

Nebo lze použít OwnerDraw a událost OnDrawItem - ale musíš se postarat o vykreslení
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 15. 7. 2017 08:44

jasně, děkuju.

ješt bych rád vyzkoušel i tu druhou metodu, ale moc se nechytám,
můžeš prosím nastínit, jak postarat o ykreslování ..??
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Odeslat příspěvekod dyžon 17. 7. 2017 07:16

aha,
už vím jak to myslíš ...

bohužel tady je to stejný, vypisuje až po celé animaci.
i tak díky moc.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků