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

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

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

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

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

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

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

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

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