Главная страница
    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.055 c
2-1267853680
Дмитрий С
2010-03-06 08:34
2010.08.27
Ограничение TControl.Top.


2-1272198220
rendall
2010-04-25 16:23
2010.08.27
сочетание клавиш в фоновом режиме


2-1272606997
mfender
2010-04-30 09:56
2010.08.27
Наследование. Запутался.


2-1272874591
romario
2010-05-03 12:16
2010.08.27
сравнение двух произвольных файлов


2-1265953833
n_sch
2010-02-12 08:50
2010.08.27
Rave Reports 5





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский