![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Обработка событий нажатия в кастомизированных компонентах DelphiDelphi , Компоненты и Классы , КомпонентыРазработчики, работающие с компонентами в Delphi, часто сталкиваются с необходимостью доступа к защищенным свойствам и событиям родительских компонентов. В частности, в вопросе описано желание обработать событие нажатия на родительский компонент при клике на дочерний, кастомизированный компонент. ПроблемаРазработчик создает кастомизированный компонент, который должен иметь возможность назначать родительский компонент, используя свойство в объекте инспекторе. Родительские компоненты могут быть различными контролами на одной форме, но так как все они являются подклассами Пример кодаВ коде, представленном разработчиком, есть попытка установить родительский компонент и связать событие клика дочернего компонента с событием клика родительского:
При выполнении этого кода возникает исключение типа каста. Альтернативный ответДля решения данной проблемы можно использовать так называемый "интерфейсный класс" (interposer class). Необходимо напрямую выполнить приведение типов ( Подтвержденный ответДля доступа к защищенным членам класса необходимо объявить новый класс, который будет использоваться для приведения типов родительского компонента. Вместо использования события
КомментарииТакой подход известен как "cracker class" или "хакерский класс". Традиционно в названии таких классов используется слово "Crack" или "Hack". Примеры и дополнительная информация доступны в интернете. ВыводДля обработки событий нажатия в кастомизированных компонентах Delphi, привязанных к родительским компонентам, необходимо использовать специальные классы для приведения типов и доступа к защищенным событиям. Это позволяет корректно обрабатывать события клика на родительском компоненте при клике на дочерний. Контекст описывает проблему доступа к защищенному событию `OnClick` родительского компонента в кастомизированном компоненте Delphi и предлагает решение с использованием приведения типов и интерфейсного класса. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Компоненты ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |