![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение, по какой колонке сделан щелчок в ListView [D7, Win95/98, WinXP]
AD_infiniTUM © (2004-07-12 18:25:00)Как определить, по какой колонке сделан щелчок в ListView? Если я правильно понял, то нужно перехватывать сообщение WM_NOTIFY. А как дальше?
Заранее спасибо.
AD_infiniTUM (2004-07-13 11:23:00) [21]Теперь на первом столбце тоже перестало работать. Т.е. вообще не работает.
NAlexey (2004-07-13 11:11:00) [22]Ааааа, извиняюсь. Это я чего. Пробуй так:
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldWndProc := ListView1.WindowProc;
ListView1.WindowProc := NewWndProc;
end;
procedure TForm1.NewWndProc(var Message: TMessage);
begin
case Message.Msg of
WM_NOTIFY:
case HD_NOTIFY(Pointer(Message.LParam)^).Hdr.code of
HDN_ITEMCLICKW:
ShowMessage(IntToStr(HD_NOTIFY(Pointer(Message.LParam)^).Item));
end;
end;
if Assigned(FOldWndProc) then
FOldWndProc(Message);
end;
NAlexey (2004-07-13 10:52:00) [23]>AD_infiniTUM (13.07.04 10:49) [2]
Ты чего?
AD_infiniTUM (2004-07-13 10:49:00) [24]Почему-то срабатывает только при щелчке по заголовку первой колонки, а как со стальными колонками? Может я что-то не так делаю...
Вот код:
function ListViewWndProc(Wnd: HWnd; Msg: Cardinal; wParam,
lParam: Cardinal): Cardinal; stdcall;
begin
Result := CallWindowProc(Pointer(ListviewProc), Wnd, Msg, wParam, lParam);
case Msg of
WM_NOTIFY:
case HD_NOTIFY(Pointer(LParam)^).Hdr.code of
HDN_ITEMCLICK: if HD_NOTIFY(Pointer(LParam)^).Item = 0 then
MessageBox(0, 'Сделан щелчок по колонке', 'Message');
end;
end;
end;
NAlexey (2004-07-13 09:40:00) [25]
procedure ListViewWndProc(var Message: TMessage);
case Message.Msg of
WM_NOTIFY:
case HD_NOTIFY(Pointer(Message.LParam)^).Hdr.code of
HDN_ITEMCLICK:
begin
if HD_NOTIFY(Pointer(Message.LParam)^).Item = 0 then
. . .
end;
end;