Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Не получается создать потомка от 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
4-1076302452
r9000
2004-02-09 07:54
2004.04.18
Управление другой программой


1-1080550332
Ravilr
2004-03-29 12:52
2004.04.18
Как сделать правильно ...выборку


3-1080194652
ceval
2004-03-25 09:04
2004.04.18
форма Ffind (для поиска в DBGride) ..выдает ошибку Undeclared id


1-1080625808
alex123
2004-03-30 09:50
2004.04.18
ComboBox - различить Items и Values


11-1059748317
JanvVlad
2003-08-01 18:31
2004.04.18
Моргание ListView