Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что является аналогом inhereted в KOL? [Delphi, Windows]


Страницы:   1 2

Delphi5.01 ©   (2004-04-27 20:20:00) 

Вот появилась такая мысля!
Что является аналогом inhereted в KOL?
Вот например если а хочу перекрыть свойство MouseClick у моего компонента.
Один из вариантов который мне пришел в голову это старомодный (не работает)

function NewCrazyButton(AParent: pControl): TKOLCrazyButton;
...
begin
...
 Result.OnMouseClick:=fMouseClick;
...
end;

procedure TKOLCrazyButton.fMouseClick(...)
...
begin
...
 // здесь все что надо чтоб произошло на MouseClick
...
end;

но когда в программе надо прикрепить к моему новому компоненту обработку MouseClick я пишу:
MyButton.OnMouseClick:=MyMouseClick;
Фактически я сам удаляю указатель на процедуру компонента fMouseClick в которой хранится информация что именно должен сделать компонент при MouseClick. Как я заметил в данном случае решением является inhereted но его у KOL нету, или я не смог найти.

Вторым решением является (работает, но не для всех месаг)

function CrazyButtonWndProc(Sender: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
...
begin
...
 Result:=false;
 case Msg.message of
   WM_LBUTTONDBLCLK:
     begin
       pCrazyButton(Sender).fMouseClick(Sender,
         SmallPointToPoint(TSmallPoint(Msg.LParam)));
     end;
 end;
...
end;

procedure TKOLCrazyButton.fMouseClick(...)
...
begin
...
 // здесь все что надо чтоб произошло на MouseClick
...
end;

все работает без сбоев, переменная OnMouseMove свободна, при программировании в нее можно помещать указатель на нашу функцию, нижу указанный код не даст сбоев
MyButton.OnMouseClick:=MyMouseClick;

Зачем мне нужно было так длинно все изъяснять, "это же и так всем ясно".

Так вот перейду к сути. Проблема в том что данным методом не возможно обработать сообщение:
 WM_MOUSELEAVE:
   begin
     MsgOK('OK');
   end;
А почему? Оно появляется только в том случае если в конструктора есть строка
Result.OnMouseLeave:=fMouseLeave;
Не имеет значения что делает процедура fMouseLeave, она может быть вообще пустой.

В чем загвоздка?

П.С. Не один раз перечитал статью "Создание визуальных компонентов для библиотеки KOL"


Delphi5.01   (2004-04-27 23:14:00) [21]

Я имею в виду конструкцию которая дает аналог inhereted в KOL. Как я уже изъяснился обыкновенный старый метод в кол не работает а вот WM_MOUSELEAVE не могу использовать.
Вот еще одна загвоздка, почему-то после WM_MOUSELEAVE я получая и WM_MOUSEMOVE?


Dimaxx   (2004-04-27 21:36:00) [22]

inherited и является. Его никто не отменял...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо