Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

Над каким элементом в списке курсор.   Найти похожие ветки 

 
Nikfel ©   (2007-10-06 20:47) [0]

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


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

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


 
Nikfel ©   (2007-10-06 21:10) [2]

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


 
DVM ©   (2007-10-06 21:10) [3]


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

TListBox, TListView


 
Nikfel ©   (2007-10-06 21:22) [4]

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


 
DVM ©   (2007-10-06 21:46) [5]


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

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


 
palva ©   (2007-10-06 22:42) [6]

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 22:50) [7]


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


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

сообщение LB_GETITEMHEIGHT


 
DVM ©   (2007-10-06 22:51) [8]

или listbox1.ItemHeight :)


 
palva ©   (2007-10-06 22:52) [9]

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


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

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


 
palva ©   (2007-10-06 22:55) [11]

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


 
DVM ©   (2007-10-06 22:58) [12]


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

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


 
Nikfel ©   (2007-10-07 08:33) [13]

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


 
Virgo_Style ©   (2007-10-07 10:49) [14]

ListView1.GetItemAt()
ListBox1.ItemAtPos()

?


 
DVM ©   (2007-10-07 11:32) [15]


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

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


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

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


> Nikfel ©  

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


 
Nikfel ©   (2007-10-07 20:15) [16]

При горизонтальной полосе прокрутки в 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 20:28) [17]


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

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


 
DVM ©   (2007-10-07 20:32) [18]


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;


 
Nikfel ©   (2007-10-07 20:39) [19]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
2-1191493300
F@T@L_Err0r
2007-10-04 14:21
2007.10.28
изменение разрешения


2-1191579972
Mariya
2007-10-05 14:26
2007.10.28
Объявление переменной


2-1191433198
(MiTch)
2007-10-03 21:39
2007.10.28
Управление камерой


1-1186755475
Ricks
2007-08-10 18:17
2007.10.28
Странная рекурсия...


2-1191351217
Pacific
2007-10-02 22:53
2007.10.28
нажатие





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский