![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно создать наследников фрейма
AntiUser © (2012-06-14 11:05:00)Ситуация такая.
Сделал базовый класс:
TBaseFrame = class(TFrame)
private
protected
public
end;
Создал еще фрейм (File > New > Frame - Delphi)
Задал имя фрейму FirstFrame
В юните соответственно получил
TFirstFrame = class(TFrame)
private
{ Private declarations }
public
{ Public declarations }
end;
Изменил предка с TFrame на TBaseFrame
Все прекрасно компилируется и работает, но только до закрытия проекта. Как только пытаешься его открыть заново, получаешь ошибку
Error reading property и кнопки игнорировать и т.п.
Т.е. фактически дельфя преобразовывает фрейм в форму, после чего вся конструкция перестает работать.
При попытке создания фрейма получаю ошибки
Error reading ... Property ... does not exist.
Как правильно реализовать такой механизм?
(XE, Win7)
Омлет (2012-06-14 12:46:00) [1]
> Пока не знаю как разрулится этот момент, что и в базовом
> фрейм и в наследнике фрейм.
По-моему, всё наследуется.
AntiUser (2012-06-14 12:25:00) [2]
> Омлет © (14.06.12 12:15) [4]
Видимо проблема в том, что базовый класс был написан ручками, а не создан как фрейм.
Но я исходил из того, что в базовом не должно быть фрейма (dfm'а) его реализацией занимаются наследники. Пока не знаю как разрулится этот момент, что и в базовом фрейм и в наследнике фрейм.
AntiUser (2012-06-14 12:23:00) [3]У меня нет там в списке базового класса. Видимо его тоже надо не просто написать, а создать как фрейм.
Сейчас попробую.
Хм... Получилось. Так заработало, только теперь надо переписать что было уже понаписано.
Омлет (2012-06-14 12:15:00) [4]> AntiUser (14.06.12 11:54) [2]
Нет. Надо так:
inherited FirstFrame: TFirstFrame
Но лучше не руками, а как сказано в [3].
Rouse_ (2012-06-14 11:58:00) [5]File->New->Other->Inheritable Items-> там увидишь список уже созданных фреймов, выбери тот от которого хочешь наследоваться.
AntiUser (2012-06-14 11:54:00) [6]Т.е. вы хотите что бы я в dfm'е указал вместо
object FirstFrame: TFirstFrame
Left = 0
Top = 0
Width = 470
Height = 340
object FirstFrame: TBaseFrame
Left = 0
Top = 0
Width = 470
Height = 340
Так?
Но так тоже не прокатывает.
KSergey (2012-06-14 11:31:00) [7]Закройте проект, поменяйте еще и в DFM-файле предка, откройте проект заново