Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Над каким элементом в списке курсор. [D7]


Nikfel ©   (2007-10-06 20:47:00) 

Подскажите пожалуйста. Как определить над каким элементом в списке(TList) находится курсор мыши. Заранее спасибо.


Nikfel   (2007-10-07 20:39:00) [1]

Спасибо. Теперь все понятно.


DVM   (2007-10-07 20:32:00) [2]


procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 LI: TListItem;
begin
 LI := ListView1.GetItemAt(x, y);
 if LI <> nil then
   caption := inttostr(ListView1.GetItemAt(x, y).Index)
 else
   Caption := '';
end;


DVM   (2007-10-07 20:28:00) [3]


> Скорей всего высоту надо использовать не 13.

Зачем тебе это 13 вообще сдалось? Есть как минимум 2 способа выяснить над каким элементом ListView находится указатель мыши и о обоих тебе уже написали. Но чукча видимо не читатель.


Nikfel   (2007-10-07 20:15:00) [4]

При горизонтальной полосе прокрутки в TListView:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var i:integer;
begin
i:=ListView1.TopItem.Index;
if i>0 then i:=i+1;
caption:=IntToStr(((Y) div 13)+i);
end;
Скорей всего высоту надо использовать не 13. Код возможно нуждается в доработке.


DVM   (2007-10-07 11:32:00) [5]


> Такой код намного лудше, чем обработка WM_NCHITTEST

Само по себе WM_NCHITTEST совсем с сабжем не связано, но это сообщение приходит чаще, чем WM_MOUSEMOVE при движении мыши над контролом. Внутри его обработчика и надо выяснять, что за итем под указателем мыши.


> но наверно в компоненте TListView он не пройдет из-за полосы
> прокрутки

Пойдет. Только названия свойств и методов, а также сообщений другие. См, например [14]


> Nikfel ©  

А ты вообще, что пытаешься сделать то? Скажи, может есть и другие решения.


Virgo_Style   (2007-10-07 10:49:00) [6]

ListView1.GetItemAt()
ListBox1.ItemAtPos()

?


Nikfel   (2007-10-07 08:33:00) [7]

Большое спасибо. Такой код намного лудше, чем обработка WM_NCHITTEST, но наверно в компоненте TListView он не пройдет из-за полосы прокрутки(горизонтальной).


DVM   (2007-10-06 22:58:00) [8]


> Тогда вообще просто.

[10] еще проще. :)


palva   (2007-10-06 22:55:00) [9]

> или listbox1.ItemHeight :)
Тогда вообще просто.
Вот смотрите, Nikfel ленится посмотреть справку, а мы за его счет приобрели бесценный опыт. Что бы мы без него делали.


DVM   (2007-10-06 22:53:00) [10]

или LB_ITEMFROMPOINT или listbox1.ItemAtPos()


palva   (2007-10-06 22:52:00) [11]

> сообщение LB_GETITEMHEIGHT
Ну то есть SendMessage надо использовать?


DVM   (2007-10-06 22:51:00) [12]

или listbox1.ItemHeight :)


DVM   (2007-10-06 22:50:00) [13]


> palva ©   (06.10.07 22:42) [6]


> Константу 13, наверно можно как-нибудь извлечь через функцию
> API

сообщение LB_GETITEMHEIGHT


palva   (2007-10-06 22:42:00) [14]

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
Label1.Caption := IntToStr((Y) div 13);
end;
Константу 13, наверно можно как-нибудь извлечь через функцию API
GetSystemMetrix Cм. MSDN


DVM   (2007-10-06 21:46:00) [15]


> Или укажите где можно почитать по этой теме информацию

В справке и MSDN. Я думаю, обработка сообщений WM_NCHITTEST приходящих листбоксу или листвью тебе поможет.


Nikfel   (2007-10-06 21:22:00) [16]

Можно ли небольшой пример. Как это сделать. Или укажите где можно почитать по этой теме информацию понятную для восприятия.


DVM   (2007-10-06 21:10:00) [17]


> А над каким может?

TListBox, TListView


Nikfel   (2007-10-06 21:10:00) [18]

А над каким может?


Desdechado   (2007-10-06 21:00:00) [19]

TList - невизуальный класс, поэтому курсор над ним быть не может.


Наверх

Титульная страница Поиск, карта сайта Написать письмо