Поля частных компонентов, вложенные во фреймы Delphi

Вот быстрое сравнение компонентов и фреймов Delphi, и в конце мой вопрос.

Преимущества компонентов Delphi:

  • Они хорошо инкапсулированы. Программное обеспечение, использующее компоненты, может получить доступ только к public и published свойствам компонентов.
  • Все их внутренние обработчики событий доступны во время разработки родительской формы.

Недостатки компонентов Delphi:

  • Их нужно установить с каким-то пакетом
  • Пакет совместно используется несколькими приложениями, даже если компоненты внутри относятся к конкретному приложению.

Преимущества фреймов Delphi:

  • Их можно размещать на форме как компоненты.
  • Их published свойства также можно настроить в форме
  • Они доступны только в приложении и недоступны для остальных приложений, которым они не принадлежат.
  • Они доступны быстро. Устанавливать не нужно.

Недостатки фреймов Delphi:

  • Все их внутренние компоненты напрямую доступны в родительской форме. Если я перемещу компоненты из раздела published, настройки времени разработки также будут нарушены в конструкторе фреймов.
  • Если я переопределю метод Resize во фрейме, все аранжировки будут доступны только во время выполнения. Никаких договоренностей во время разработки не делается.
  • Если я введу новое свойство published, оно будет недоступно в инспекторе объектов.

Я бы хотел нечто симбиотическое:

  • Хорошая инкапсуляция. Ни один из внутренних компонентов недоступен из родительской формы, но все их внутренние компоненты полностью функциональны либо во время выполнения, либо во время разработки.
  • Быстрая доступность. Устанавливать не нужно.
  • Только в приложении. Нет обмена с другими приложениями.
  • Их опубликованные свойства можно изменить в форме
  • Все переопределения методов (особенно метод изменения размера) доступны во время разработки.

Не могли бы вы предложить вещь, отвечающую этим требованиям? Или может быть какой-то удивительный метод работы с кадрами, о которых я не знал?

Это не обязательно должна быть рама или компонент. Если некоторые другие классы VCL удовлетворяют этим требованиям, я с благодарностью приму это.


person Paul    schedule 15.09.2016    source источник
comment
Я всегда создаю кадры во время выполнения. Тогда вы всегда уверены, что никто не изменит внутренние компоненты вашей рамы. Но если вы хотите, чтобы он был доступен во время разработки - там я вижу только реализацию настраиваемого компонента, которая будет хранить имя класса создаваемого фрейма, и через класс он также может перебирать свойства ... - но это что-то из науки фантастический фильм и слишком сложен.   -  person Z.B.    schedule 15.09.2016
comment
Я не понимаю, почему второй недостаток компонентов считается недостатком.   -  person GuidoG    schedule 15.09.2016
comment
Это скорее похоже на запрос функции, чем на вопрос. Вы знаете, что того, о чем вы просите, не существует.   -  person David Heffernan    schedule 15.09.2016
comment
@ Дэвид Хеффернан: Извините, но я не знаю этого наверняка. В ответ на мой последний запрос функции несколько лет назад люди предложили мне попробовать фреймы, о которых я не знал в то время.   -  person Paul    schedule 15.09.2016
comment
Вы хотите ввести новые свойства, которые можно редактировать в инспекторе, а это означает, что вы должны использовать компоненты, предоставляемые пакетом времени разработки. Вот и все. Больше ничего нет.   -  person David Heffernan    schedule 15.09.2016


Ответы (1)


Если его свойства должны быть доступны для редактирования в дизайнере, объект должен быть потомком TComponent. TFrame на самом деле является потомком TComponent.

К сожалению, инспектор объектов, похоже, использует информацию о структуре только из пакетов времени разработки. Таким образом, вам необходимо скомпилировать пакет времени разработки, чтобы ваши пользовательские опубликованные свойства отображались в инспекторе объектов. Но это нарушает ваше требование быстрой доступности.

person René Hoffmann    schedule 15.09.2016
comment
Требование Только в приложении можно удовлетворить, используя Package Magician (просто погуглите), который позволяет загружать и выгружать пакет с активацией и деактивацией проекта. - person Uwe Raabe; 15.09.2016