Delphi IDE рассматривает TFrame как форму
Время от времени, когда я настраиваю свои классы TFrame (добавляя свойства, методы и т. Д.), Среда IDE сбивается с толку и действует так, как будто она думает, что фрейм - это форма, полная заголовка / заголовка, границ и т. Д. класс объявлен как потомок TFrame. Любые идеи относительно того, что вызывает это, как предотвратить, и как исправить?
Я использую Delphi 2007 Pro. Также обратите внимание (если это имеет значение), потомки TFrame обычно регистрируются в IDE (то есть в палитре) через пакет времени разработки.
Позже: Дополнительные "особенности": Фрейм, с которым у меня сейчас возникает эта проблема, визуально является ОЧЕНЬ базовым TFrame (единственное отличие от нового TFrame - это размер и цвет фона).
Вот его объявление класса:
TBasePanel = class(TFrame)
private
FPanelManager: TPanelManager;
procedure SetPanelManager(const Value: TPanelManager);
protected
procedure Connect; virtual; abstract;
procedure Disconnect; virtual; abstract;
procedure Refresh; virtual;
procedure Requery; virtual; abstract;
published
property PanelManager: TPanelManager read FPanelManager write
SetPanelManager;
Этот кадр используется в качестве базового класса для ряда других. Я обычно редактирую его непосредственно из проекта BPL, которому он принадлежит (потому что все эти фреймы устанавливаются в палитру), а не как часть проекта EXE, с открытыми соответствующими формами и т. Д.
Также "Встроенный дизайнер" отмечен в "Сервис" -> "Параметры".
Я сохраняю все файлы DFM как текстовые, а не как двоичные файлы (если это вообще имеет значение).
5 ответов
Я столкнулся с той же проблемой. Следующие шаги решили проблему для нас, она также может работать для вас:
- в IDE: закройте все формы, которые используют фрейм
- открыть рамку, просмотреть как текст (*.dfm)
- dfm, вероятно, начинается с объекта MyFrame: TMyFrameClass
- изменить это на унаследованный MyFrame: TMyFrameClass
Я не знаю, что вызвало проблему.
Возможно, вы сняли флажок "Встроенный дизайнер"? (Инструменты | Параметры | Параметры среды | VCL Designer). Тогда, действительно, ваш кадр отображается во время разработки в виде формы (с заголовком, рамкой и т. Д.). Также может помочь конкретный код вашего проблемного потомка TFrame или более подробная информация о вашем деле.
Насколько я знаю, вы должны иметь открытую форму и рамку в редакторе при редактировании рамки. Еще могут быть проблемы с обновлением. Хотя я не видел этого.
Но я отказался от кадров давно, потому что я не нашел их очень надежными.
Прямо сейчас я использую их только для создания прототипов, создания собственного компонента (производного от панели с соответствующими элементами управления на нем).
Возможно, вам придется зарегистрировать пользовательский модуль в IDE, но ваши дополнительные свойства не будут работать, если они не принадлежат к классу предков.
Я столкнулся с множеством проблем с TFrame и, наконец, пришел к такому решению, которое решает все мои проблемы: я создаю и проектирую фреймы визуально, но использую их только вручную.
В качестве побочного эффекта мои приложения стали меньше из-за меньшего количества dfm-s.