Главная страница
    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.054 c
15-1268991257
Дмитрий С
2010-03-19 12:34
2010.08.27
На чем писать для Windows Mobile 6.5?


2-1265884838
lewka
2010-02-11 13:40
2010.08.27
Взоимодействие Word и Delphi


6-1216448798
Alex_C
2008-07-19 10:26
2010.08.27
HttpOpenRequest - получаю Bad request


8-1196327132
DimaTS
2007-11-29 12:05
2010.08.27
Надпись вдоль кривой (например по окружности)


15-1275549850
Медвежонок Пятачок
2010-06-03 11:24
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский