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 ответов

Решение

Я столкнулся с той же проблемой. Следующие шаги решили проблему для нас, она также может работать для вас:

  1. в IDE: закройте все формы, которые используют фрейм
  2. открыть рамку, просмотреть как текст (*.dfm)
  3. dfm, вероятно, начинается с объекта MyFrame: TMyFrameClass
  4. изменить это на унаследованный MyFrame: TMyFrameClass

Я не знаю, что вызвало проблему.

Возможно, вы сняли флажок "Встроенный дизайнер"? (Инструменты | Параметры | Параметры среды | VCL Designer). Тогда, действительно, ваш кадр отображается во время разработки в виде формы (с заголовком, рамкой и т. Д.). Также может помочь конкретный код вашего проблемного потомка TFrame или более подробная информация о вашем деле.

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

Но я отказался от кадров давно, потому что я не нашел их очень надежными.

Прямо сейчас я использую их только для создания прототипов, создания собственного компонента (производного от панели с соответствующими элементами управления на нем).

Возможно, вам придется зарегистрировать пользовательский модуль в IDE, но ваши дополнительные свойства не будут работать, если они не принадлежат к классу предков.

Я столкнулся с множеством проблем с TFrame и, наконец, пришел к такому решению, которое решает все мои проблемы: я создаю и проектирую фреймы визуально, но использую их только вручную.

В качестве побочного эффекта мои приложения стали меньше из-за меньшего количества dfm-s.

Другие вопросы по тегам