-
Dy1 (10.06.10 21:44) [0]как узнать координаты и размеры ячейки ListView под курсором мыши? Получается только первая колонка, а она и так редактируемая.
Желательно пример.
Спасибо -
Dy1 (11.06.10 19:01) [1]наконец-то добрался до дома, посмотрел и сообразил :)
нулевая колонка - LVItemRect
остальные - LVSubItemRect.
Невнимательность. Извиняйте за вопрос -
Dy1 (11.06.10 19:36) [2]найти-то нашёл, но как узнать колонку :(
-
L`Autour (12.06.10 10:35) [3]посылкой сообщения LVM_SUBITEMHITTEST
-
L'Autour (12.06.10 10:37) [4]Пример можно взять из компонента
KOLEcmListEdit -
Dy1 (13.06.10 12:20) [5]покопался в KOL.pas, там в коде LVSubItemRect (если не ошибаюсь) есть что-то вроде LVM_SUBITEMHITTEST,0,lvHTI, но подэлемент всегда с большим (нереальным) номером.
-
Dy1 (13.06.10 20:54) [6]помогите пожалуйста. Я началfunction TForm1.LV1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := False;
if msg.message = WM_NOTIFY Then
и не знаю как дальше получить TWMNotify, где должен быть указатель на структуру NMHdr, которая нужна для NMITEMACTIVATE, где и должны находится координаты ячейки (строка и колонка, т.е.)
или вызвать LVItemAtPos и потом послать LVM_SUBITEMHITTEST ? -
Dy1 (13.06.10 21:27) [7]добавил в KOL.pas
1) PMouseEventData = ^TMouseEventData;
2) пока не знаю для чего может понадобиться передавать в параметрах только координаты мыши :) , поэтому дописал только код ниже. ИМХО вполне можно заменить в КОЛ оригинальный метод (не создавая перегруженных)function TControl.LVItemAtPos(PMouse: PMouseEventData): TPoint;
var Dummy: TWherePosLVItem;
begin
Result := LVItemAtPosEx( PMouse, Dummy);
end;
function TControl.LVItemAtPosEx(PMouse: PMouseEventData; var Where: TWherePosLVItem): TPoint;
var HTI: TLVHitTestInfo;
begin
HTI.pt.x := PMouse^.X;
HTI.pt.y := PMouse^.Y;
Perform(LVM_SUBITEMHITTEST, 0, Integer( @HTI ) );
Result.Y := HTI.iItem;
Result.X := HTI.iSubItem;
Where := lvwpOnColumn;
if HTI.flags = LVHT_ONITEMICON then
Where := lvwpOnIcon
else
if HTI.flags = LVHT_ONITEMLABEL then
Where := lvwpOnLabel
else
if HTI.flags = LVHT_ONITEMSTATEICON then
Where := lvwpOnStateIcon
else
if HTI.flags = LVHT_ONITEM then
Where := lvwpOnItem;
end;
Проверено, в моей проге :) работает. -
Dy1 (13.06.10 21:37) [8]нужна своя структура под результат, а так норм.
На этом тему можно закрывать.