Scroll listview
Delphi. Komponensek és osztályok. TListView
Van elég kényelmes módja lapozhat a listában, ha a felhasználó belép egy egérmutatót lefelé a listán a bal gombot, majd kiosztott a tételt, amely felett a kurzor található. És ha a kurzor feletti vagy alatti listából, majd lapozzunk kezdődik. Ahhoz, hogy megtanulják, hogyan kell csinálni egy ilyen dolog a ListView, ma fogunk beszélni.
Először is, meg kell, hogy a válogatott elemek, amelyek felett az egérmutatót (miközben lenyomva tartja a bal gomb). Ahhoz, hogy megtalálja a koordinátákat a kurzort az elem hasznos GetItemAt funkciót. A beállítás módosítása, meg kell változtatni a tulajdonságait kiválasztása és ItemFocused.
Elkapni az egeret eseményeket, amikor a kurzor túl ListView kell „mondani” ablakokat, hogy az egér most „enyém”. Erre a célra SetCapture funkció (mondani, hogy „egér Én már nincs szükség, a” használt ReleaseCapture funkció). Mint abban az esetben a kurzor GetItemAt eltérnénk ListView elem üresen tér vissza (nulla), emellett ebben az esetben nem tudja ellenőrizni. Részben DDDD pozitív értéket, ha a görgetés fog bekövetkezni le, és negatív egyébként. D egység jelzi, hogy hány elem egy időben kerül görgetni. Szükségességét, hogy változik a görgetés sebességét (ahol a görgetés sebessége attól függ, hogy milyen messze a kurzorral a ListView).
Áttetsző görgetés végezzük Mozgatás eljárás. A kiválasztott cikkszám adunk d. Ha az új szám meghaladja a megengedett értéket, akkor a 0 vagy az Items.Count - 1. Továbbá azt ellenőrizzük, ha a szám megfelel a kiválasztott elemet egy új számot, akkor nem kell semmit. Ellenkező esetben meg kell változtatni a kiválasztott és ItemFocused, és lapozzunk a listában. Az utóbbi hasznos MakeVisible eljárás. Ez görgeti a listát, hogy a megadott elem megjelent kiemelkedő.
Ahhoz, hogy a listát görgetni lehet egy rögzített egér, meg kell, hogy az időzítő, ami rendszeresen hívják Move. Ha a kurzor ismét meghaladja a ListView és a felhasználó elengedi a bal egérgombot, időzítő le.
var
d: integer = 0;
eljárás áthelyezése;
var
NewIndex: integer;
kezdődik
A Form1.ListView1 teendő, ha Címzett (Kiválasztott) akkor kezdődik
NewIndex: = Selected.Index + d;
ha NewIndex <0
majd NewIndex: = 0
else if NewIndex> = Items.Count
majd NewIndex: = Items.Count - 1;
ha NewIndex <> Selected.Index ezután kezdődik
Kiválasztott: = Elemek [NewIndex];
ItemFocused: = Kiválasztott;
Selected.MakeVisible (true);
végén;
végén;
végén;
eljárás TForm1.FormCreate (Sender: TObject);
var
i: integer;
li: TListitem;
LC: TListColumn;
kezdődik
Timer1.Interval: = 100;
ListView1.ViewStyle: = vsReport;
LC: = ListView1.Columns.Add;
lc.Caption: = 'felirat';
lc.AutoSize: = true;
LC: = ListView1.Columns.Add;
lc.Caption: = 'alelemé';
lc.AutoSize: = true;
ListView1.Items.BeginUpdate;
i: = 1 és 1000 nem kezdődik
Li: = ListView1.Items.Add;
li.Caption: = 'Tétel' + IntToStr (i);
li.SubItems.Add ( 'Aljogcím' + IntToStr (i));
végén;
ListView1.Items.EndUpdate;
végén;
eljárás TForm1.ListView1MouseDown (Sender: TObject; gomb: TMouseButton;
Shift: TShiftState; X, Y: Egész szám);
kezdődik
SetCapture (ListView1.Handle);
végén;
eljárás TForm1.ListView1MouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Egész szám);
var
li: TListItem;
kezdődik
ha ssLeft a Shift majd ListView1 nem kezdődik
Li: = GetItemAt (10, Y);
ha meg van adva (li), akkor kezdődik
Timer1.Enabled: = false;
Kiválasztott: = li;
ItemFocused: = ListView1.Selected;
véget mást kezdeni
ha Y> = ListView1.ClientHeight
majd d: = (Y - ListView1.ClientHeight) 20. ágazat + 1
mást d: = Y div 20-1;
ha Timer1.Enabled = hamis, akkor kezdődik
Mozgás;
Timer1.Enabled: = true;
végén;
végén;
végén;
végén;
eljárás TForm1.ListView1MouseUp (Sender: TObject; gomb: TMouseButton;
Shift: TShiftState; X, Y: Egész szám);
kezdődik
Timer1.Enabled: = false;
ReleaseCapture;
végén;
eljárás TForm1.Timer1Timer (Sender: TObject);
kezdődik
Mozgás;
végén;