Форум: "Начинающим";
Текущий архив: 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.044 c