Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизОбщий OnMessage для неск. контролов. Как определить текущий? Найти похожие ветки
← →
L`Autour © (2008-09-11 13:10) [0]Конкретно использую два KOLListView у которых зеркально похожая обработка на события в программе (т.е для рациональнее использовать общие обработчики с указанием на используемый ListView). И если если для обработки конкретных событий я могу определить какой ListView используется по получаемому параметру Sender, то для OnMessage его нет.
Есть конечно Msg.hwnd, только не ясно с чем его сравнивать (свойство ListView.handle не подходит).
← →
b z (2008-09-11 14:26) [1]см. FindControl(Msg.hwnd)
← →
b z (2008-09-11 14:27) [2]ой сори не заметил конференцию :(
← →
Compiler © (2008-09-11 14:50) [3]AttachProc используй, там Sender есть. Заполняй у ListView"ов св-во Tag и различай их
← →
L`Autour © (2008-09-11 14:59) [4]Зачем AttachProc, если есть четкое соответствие между Msg.hwnd и ListView.handle?
Я хочу только узнать какой функцией из одного получить другое.
По свойсту Tag. В том и пробема, что в обработчике:
function TForm1.ListViewTbl1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
Нету указателя на контрол, по свойствам которого я его смогу определить.
← →
Compiler © (2008-09-11 15:21) [5]
SetProp(Listview1.Handle, ID_SELF,DWORD(@Listview1));
...
_Self:=Pointer(GetProp(msg.hwnd,ID_SELF));
или
SetWindowLong(..,GWL_USERDATA,..)
GetWindowLong(..,GWL_USERDATA)
← →
Дмитрий К © (2008-09-11 15:26) [6]А у меня Msg.hwnd и ListView.Handle равны, правда без MCK.
program Project1;
uses
Windows, Messages, KOL;
var
Form, LV1, LV2, LV3: PControl;
function LVMessage(Dummy: Pointer; var Msg: TMsg; var Rslt: Integer): Boolean;
var
lv: PControl;
begin
Result := False;
if Msg.hwnd = lv1.Handle then
lv := LV1
else
if Msg.hwnd = lv2.Handle then
lv := LV2
else
lv := LV3;
case Msg.message of
WM_LBUTTONDOWN:
lv.LVItemAdd("Click!");
WM_MOUSEWHEEL:
lv.LVItemAdd("Wheel!");
WM_SIZE:
lv.LVItemAdd("Size!");
end;
end;
begin
Form := NewForm(nil, "TestLVsMsg");
LV1 := NewListView(Form, lvsList, [], nil, nil, nil).SetAlign(caTop);
LV2 := NewListView(Form, lvsList, [], nil, nil, nil).SetAlign(caTop);
LV3 := NewListView(Form, lvsIcon, [], nil, nil, nil).SetAlign(caTop);
LV1.OnMessage := TOnMessage(MakeMethod(nil, @LVMessage));
LV2.OnMessage := TOnMessage(MakeMethod(nil, @LVMessage));
LV3.OnMessage := TOnMessage(MakeMethod(nil, @LVMessage));
Run(Form);
end.
← →
L`Autour © (2008-09-12 06:06) [7]Мда.
Уже сам нашел:if (ListViewTbl1.GetWindowHandle = Msg.hwnd) then
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.063 c