2009-02-26 3 views
6

Время от времени, когда я настраиваю классы TFrame (добавление свойств, методов и т. Д.), Среда IDE запутывается и действует так, как будто она считает, что кадр является формой, в комплекте с заголовком/заголовком, границами и т. д. Но, очевидно, класс объявляется потомком TFrame. Любые идеи относительно того, что вызывает это, как предотвратить и как исправить?Delphi 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 как текст, а не бинарный (если это вообще имеет значение).

+1

Просто обновление по этому вопросу: ответ кажется комбинацией ответа birger ниже PLUS, создающего «Base Frame Class», который НЕ имеет никаких изменений в обычном TFrame, и THEN, наследуя от него, перед добавлением каких-либо свойств, методов и т. Д. Кажется, что-то стабилизирует потоки наследования. – Jamo

ответ

8

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

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

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

+0

Это похоже на работу с классами предков, но у меня все еще есть проблемы с классом «root» (тот, который спускается с TFrame). То, что «Первый» ДОЛЖЕН быть «объектом», правильно? – Jamo

+0

Я не уверен, в проекте, где у меня была эта проблема, все кадры начинаются с «унаследованного MyFrame: TMyFrame». Первый потомок из TFrame, который мы используем, не имеет dfm, поэтому я не могу проверить, что должно быть в dfm. – Birger

+0

Интересно! Я не думал, что этот «первый» потомок TFrame будет одним без DFM. Это может устранить проблемы с базовым TFrame, которые я подозреваю. Хммм ... Спасибо за эту информацию. Будем экспериментировать с этим подходом! – Jamo

0

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

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

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

1

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

0

You may have to register custom module to the IDE Но ваши дополнительные свойства не будут работать хорошо, если они не находятся в классе предков.

+0

Вам все еще нужно это сделать, даже если весь компонент на основе кадра зарегистрирован через пакет дизайна? Он прекрасно отображается на палитре, и опубликованные свойства отображаются в инспекторе. Он «теряет свою структуру кадров», но на самом деле это то, что я хочу. Не следует тому, что это делает. – Jamo

+0

Это не о регистрации его как обычного компонента. Возможно, вам понадобится зарегистрировать пользовательский модуль, чтобы получить должный дизайнерский стиль. Тем не менее я не уверен, потому что, как идеал обрабатывает Tframe во время разработки, он не прозрачен для программистов. Но стоит попытаться, на мой взгляд. – Serguzest

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^