Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Общий 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 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
15-1273760942
Still Swamp
2010-05-13 18:29
2010.08.27
Windows 7 vs BDS 6.0


2-1268734595
MAcKZloy
2010-03-16 13:16
2010.08.27
ошибка в CBLRTSS.DLL


15-1271780033
М. Береговой
2010-04-20 20:13
2010.08.27
На сколько хватает Ipod батареи?


3-1240748319
ford
2009-04-26 16:18
2010.08.27
список несуществующих записей


2-1272565792
Bee
2010-04-29 22:29
2010.08.27
single and string