Расширение возможности компонентов |
![]() |
![]() |
Статьи |
Вам когда-нибудь нужно было для определенного управления Delphi, типа TButton иметь еще одно свойство или метод, который "должен быть" в Вашем приложении? Опытные Delphi разработчики, когда нуждаются в TMySuperButton искали бы VCL управление третьих лиц или бы попробовали создать такой управление. И даже более... как относительно наличия TButton с большим количеством свойств и методов, определенного поведения, и не TMySuperButton? Как относительно заявления, что TButton без проблем может создать полученный класс с другим именем? Delphi Interceptor ClassesСначала, чтобы иметь два класса с одним и тем же именем, возможно в Delphi, если эти два класса находятся в различных модулях. Затем, нужно следующее объявление:
Вышеупомянутый код создает класс перехватчика для управления TButton, расширяя оригинальный TButton, объявленный в модуле StdCtrls VCL. Наконец, это объявление должно быть помещено в отдельный модуль. Наиболее важный модуль, в котором находится класс перехватчика, должен быть перечислен в *uses* после определения основного класса. TButton = class(TButton) - an Interceptor Class ExampleЗдесь рассматривается один класс перехватчика для TButton. Добавлено свойство Public - LastClickTime. Процедура Click первоначального TButton отменена - Click генерирует событие OnClick. Используя отмененную процедуру Click, наш TButton не будет позволять выполнять обработчик события OnClick, если последний щелчок был произведен менее двух секунд назад, будет только Beep. Вот код примера:
Теперь, поместите стандартную кнопку TButton на форму. Прикрепите какой-либо обработчик события к OnClick. Важно: добавьте модуль button_interceptor в список uses в самый конец, или по крайней мере после модуля StdCtrls! Щелкните кнопку, обратите внимание, что код выполняется только тогда, когда Вы подождете две секунды после последнего щелчка. Вот так Вы легко сможете расширять возможности классов Delphi, добавляя дополнительные свойства и методы без необходимости создавать новые классы и иметь их в палитре компонентов. Ах, да, чуть не забыл, обратите внимание, что когда Вы напечатаете Button1, выскочит список свойств и методов, Вы увидите добавленный LastButtonClick, как будто он принадлежит сдандартному TButton в Delphi. Также учтите, что Вы можете использовать перехватчик не только, чтобы расширить управления VCL, но и любые классы Delphi. |