![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Обход проблемы установки свойства Parent для TPanels через RTTI в DelphiDelphi , Компоненты и Классы , RTTIВ ходе исследования возможностей RTTI в Delphi возникла проблема, связанная с установкой свойства Parent у компонента TPanel, созданного в коде и передаваемого владельцу через метод Invoke. После приведения TPanel к типу TObject для использования общих методов, возникло затруднение при попытке установить свойство Parent с помощью функций SetXXXXXXProp (где XXXXXX может быть любым из следующих: ord, variant, str, method и т.д.). В результате получалось сообщение о том, что свойства Parent не существует. Анализ проблемыПроблема заключается в том, что при использовании старых стилей RTTI, которые предназначены для механизма потоковой передачи dfm, функция GetPropList возвращает список опубликованных свойств, а свойство Parent, хоть и является публичным, но не опубликованным. Подход к решениюДля решения проблемы можно использовать новый стиль RTTI, однако это может быть избыточным. Поскольку мы знаем член, с которым нужно работать (TControl.Parent), можно напрямую установить значение родителя:
Если же по каким-то причинам необходимо использовать RTTI, то можно написать следующий код:
В данном примере опущены проверки на ошибки, которые следует добавить в реальном коде. ПримечаниеВ приведенном в вопросе коде использование функции CompareStr для сравнения строк является избыточным. Для сравнения без учета регистра следует использовать CompareText, а для проверки на равенство — SameText. Код можно упростить следующим образом:
ЗаключениеПроблема установки свойства Parent для TPanel через RTTI в Delphi решена. Важно понимать, что использование RTTI необходимо, когда тип или член, с которым нужно работать, неизвестен во время компиляции. В данном случае, зная, что объект является TControl, можно напрямую установить родителя, что является более простым и эффективным решением. Проблема связана с установкой свойства Parent для компонента TPanel в Delphi через RTTI, когда после приведения к типу TObject возникают трудности с использованием RTTI для установки этого свойства. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |