Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизНе получается создать потомка от TForm. Требует ресурсы Найти похожие ветки
← →
alextov (2004-04-02 11:56) [0]Пытаюсь создать дочерний класс от TForm, описываю его как:
type
TMyForm = class(TForm)
private
FField: Integer;
public
Constructor Create (AOwner: TComponent);
end;
implementation
Constructor TMyForm.Create (AOwner: TComponent);
begin
inherited;
end;
В программе пытаюсь создать обьект данного класса
var t: TMyForm;
begin
t:=TMyForm.Create(Form1);
end;
но при выполнении конструктора класса TMyForm на операторе inherited "оно" ругается : "Resource TMyForm not found".
Причем тут ресурсы? Я же могу создать обьект t:=TForm.Create и без всяких ресурсов....
Подсажите плз что я делаю не так...
← →
Skier © (2004-04-02 12:19) [1]нужен файл *.dfm или используй TMyForm.CreateNew()
← →
Плохиш (2004-04-02 12:26) [2]>alextov (02.04.04 11:56)
А чем Вам не нравиться то, что делает делфи при выборе меню-пункта "New/New Form"?
← →
alextov (2004-04-02 12:36) [3]2 skier
я понимаю что "оно" ищет файл *.dfm
но я же пишу t:=TForm.Create() и форма создается и не ищется *.dfm
а TMyForm прямой потомок от TForm, практически не измененный, а так создаваться не хочет. В чем разница? почему ?
2 Плохиш
Предполагается, что там кроме FField будет еще куча разных полезных (для меня полей, свойств, методов)
← →
MBo © (2004-04-02 12:41) [4]>но я же пишу t:=TForm.Create() и форма создается и не ищется *.dfm
Ну попробуй из рабочего проекта удалить строку
{$R *.dfm}
← →
Skier © (2004-04-02 12:52) [5]>alextov (02.04.04 12:36) [3]
> но я же пишу t:=TForm.Create() и форма создается и не ищется
> *.dfm
посмотри внимательно на реализацию конструктора :
constructor TCustomForm.Create(AOwner: TComponent);
← →
alextov (2004-04-02 12:58) [6]2 Mbo
я удалил из юнита, в котором описываю класс TMyForm, строчку {$R *.dfm}.
← →
Гаврила (2004-04-02 13:27) [7]Constructor Create (AOwner: TComponent); override;
удалять {$R *.dfm} не надо
все должно работать
← →
alextov (2004-04-02 15:20) [8]Как говорил один мой знакомый -
"ну а когда вообще ничего не получается - почитай хелп" :)))
Вот решил почитать... и нашел много интересного
Use CreateNew instead of Create to create a form without using the associated .DFM file to initialize it. Always use CreateNew if the TCustomForm descendant is not a TForm object or a descendant of TForm.
← →
Плохиш (2004-04-02 16:13) [9]
> 2 Плохиш
> Предполагается, что там кроме FField будет еще куча разных
> полезных (для меня полей, свойств, методов)
Разве делфи запрещает это иметь?
← →
Юрий Зотов © (2004-04-02 16:52) [10]> alextov
Для форм стандартный Create сначала вызывает CreateNew (который создает и инициализирует пустую форму), а затем тут же загружает ее ресурсы (вот почему форма сразу появляется вместе со всеми своими компонентами).
Для подключения ресурсов нужна директива $R. Но Вы ее удалили - соответственно, ресурсы не подключаются и при вызове Create вылетает ошибка.
Выводы:
1. Если Ваша форма всегда будет пустой (то есть, задумана только как предок других, рабочих форм), то ресурсы ей не нужны. Тогда директиву $R есть смысл удалить - но если вдруг понадобится создать форму именно этого класса, то это нужно делать через CreateNew.
2. Если нет - то оставьте директиву $R на своем месте и создавайте форму как Вам угодно.
========================
Предвижу следующий вопрос - почему в Инспекторе Объектов не видны добавленные мною published-свойства формы?
Сразу даю ответ - скачайте и используйте эксперт Сергея Орлика CFPack5 (поищите в Гугле, наверняка найдете). В принципе, можно сделать и вручную (как - не рассказываю, потому что долго), но с экспертом проще и удобнее.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c