ПредишенСледващото

Делфи. Компоненти и класове. TListView

Има доста удобен начин да се движите в списъка, ако потребителят въведе показалеца на мишката надолу в списъка с левия бутон, след това се разпределя на елемента, върху който се намира курсора. И ако курсорът е над или под списъка, след това превъртете започва. За да научите как да се направи такова нещо за ListView, днес ние ще говорим.

На първо място, трябва да се направи избор на елементи, върху които показалеца на мишката (задръжте натиснат левия бутон). За да намерите координатите на курсора на полезна функция GetItemAt на елемент. За да промените избора, трябва да се променят свойствата на избрани и ItemFocused.

За да хванеш събитията на мишката, когато курсорът е отвъд ListView трябва да "каже" WINDOWS, че мишката сега "мое." За тази цел SetCapture функция (да се каже "на мишката вече не е необходимо", използван ReleaseCapture функция). Както в случая на GetItemAt курсора да се излиза от обхвата елемент ListView връща празен (нула), допълнително този случай не може да се провери. Частично г отнема положителна стойност, ако превъртането ще настъпи надолу и отрицателни друго. D устройството покаже, как ще се превъртат много елементи в даден момент. Нужно е да се променя скоростта на превъртане (където скоростта на превъртане зависи от това доколко курсора се намира на ListView).

Sheer превъртане се извършва в процедура Move. За избрания номер на позиция е добавен г. Ако новият брой надхвърля допустимата стойност, тя е настроена на 0 или Items.Count - 1. След това се проверява дали номерът съответства на избрания елемент в нов номер, не е нужно нищо. В противен случай, трябва да промените избрания и ItemFocused и превъртете през списъка. За последното е полезно MakeVisible процедура. Тя се превърта списъка за даден артикул се появи известен.

Към списъка може да се превърта в определено мишката, което трябва да се направи таймер, който ще бъде редовно нарича Move. Ако курсорът е отново над ListView и потребителят освободи левия бутон на мишката, таймер изключва.

Var
г: цяло число = 0;

Процедура за движение;
Var
NewIndex: цяло число;
започвам
с Form1.ListView1 направя, ако целеви (Избрани) след това да започне
NewIndex: = Selected.Index + г;
ако NewIndex <0
след NewIndex: = 0
иначе, ако NewIndex> = Items.Count
след NewIndex: = Items.Count - 1;
ако NewIndex <> След това Selected.Index започне
Избрани: = артикули [NewIndex];
ItemFocused: = Избрани;
Selected.MakeVisible (истина);
приключи;
приключи;
приключи;

процедура TForm1.FormCreate (Sender: TObject);
Var
I: цяло число;
Li: TListitem;
LC: TListColumn;
започвам
Timer1.Interval: = 100;
ListView1.ViewStyle: = vsReport;
LC: = ListView1.Columns.Add;
lc.Caption: = 'надпис ";
lc.AutoSize: = вярно;
LC: = ListView1.Columns.Add;
lc.Caption: = 'подточка ";
lc.AutoSize: = вярно;
ListView1.Items.BeginUpdate;
защото: = 1 до 1000 започвайте
Li: = ListView1.Items.Add;
li.Caption: = 'т' + IntToStr (I);
li.SubItems.Add ( "подточка" + IntToStr (I));
приключи;
ListView1.Items.EndUpdate;
приключи;

процедура TForm1.ListView1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: цяло число);
започвам
SetCapture (ListView1.Handle);
приключи;

процедура TForm1.ListView1MouseMove (Sender: TObject; Shift: TShiftState; X,
Y: цяло число);
Var
Li: TListItem;
започвам
ако ssLeft в Shift след това с ListView1 започвайте
Li: = GetItemAt (10, Y);
ако целеви (Li), след това започва
Timer1.Enabled: = фалшива;
Избрани: = Li;
ItemFocused: = ListView1.Selected;
сложи край на друг да започне
ако Y> = ListView1.ClientHeight
тогава г: = (Y - ListView1.ClientHeight) Разделения 20 + 1
друго г: = Y DIV 20-1;
ако Timer1.Enabled = невярна след това да започне
Преместете;
Timer1.Enabled: = вярно;
приключи;
приключи;
приключи;
приключи;

процедура TForm1.ListView1MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: цяло число);
започвам
Timer1.Enabled: = фалшива;
ReleaseCapture;
приключи;

процедура TForm1.Timer1Timer (Sender: TObject);
започвам
Преместете;
приключи;

Свързани статии

Подкрепете проекта - споделете линка, благодаря!