Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1273332902
Tassadar
2010-05-08 19:35
2010.08.27
Runtime error - array of string как атрибут класса


2-1274247722
Petr
2010-05-19 09:42
2010.08.27
как обратиться к полю в базе


8-1204201324
ERT
2008-02-28 15:22
2010.08.27
PrintScreen


4-1238080021
ganj
2009-03-26 18:07
2010.08.27
global hook in dll


2-1269455858
plazmaser
2010-03-24 21:37
2010.08.27
строки в ексель





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский