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

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

Назначить событие всем компонентам


Krants ©   (2006-11-27 14:00:00) 

Имеется группа Label-ов, разбросаная по формам, им всем нужно переназначить событие OnMouseDown. Сам код события находиться в отдельном модуле(библиотеке), к примеру

procedure LabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  (Sender as TLabel).Font.Style:=[fsBold];
end;


при попытке задать событие
Label1.OnMouseDown:=MyUnit1.LabelMouseDown;

Delphi ругается "incompatible types..."

Можно ли как-нибудь зарегистрировать процедуру как событие?


Leonid Troyanovsky   (2006-11-27 17:50:00) [1]


> Krants   (27.11.06 14:36) [6]

> хороший вариант, спасибо, сгодится.

Вариант хороший, но я б не рекомендовал его для
широкого применения, скажем, в библиотеке.

--
Regards, LVT.

PS Т.е., надо говорить так: спасибо, испытаю и доложу.


Krants   (2006-11-27 14:36:00) [2]


> umbra

хороший вариант, спасибо, сгодится.


alex810   (2006-11-27 14:20:00) [3]

Извеняюсь не дочитал


Palladin   (2006-11-27 14:15:00) [4]


> [1] alex810 ©

Вопрос читал?


umbra   (2006-11-27 14:15:00) [5]

Метод класса - это не простая процедура. В него неявно передается указатель на класс, в котором он вызывается. Есть несколько способов преобразовать процедуру в метод. Самый простой - объявить ее методом какого-нибудь класса.

THandlerContainer = class(TObject)
public
 procedure LabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;

{...............................}
implementation

procedure THandlerContainer.LabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 (Sender as TLabel).Font.Style:=[fsBold];
end;


Krants   (2006-11-27 14:14:00) [6]


> alex810

нужно програмно. реально таких событий несколько и они должны добавлятся и изменяются в ран-тайме...


alex810   (2006-11-27 14:10:00) [7]

В инспекторе объектов в кладке Events всем лайбелам назначаешь одну и туже процедуру обработки события


Наверх

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