Главная страница
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.034 c
14-1080392583
X9
2004-03-27 16:03
2004.04.18
DLL на Turbo Pascal


9-1066159078
Sacred
2003-10-14 23:17
2004.04.18
GLScene!!! Как подрузить обьекты из другой сцены(*.gls)?


14-1080284981
Hamilkar
2004-03-26 10:09
2004.04.18
Длинее...


14-1079973271
nikitos
2004-03-22 19:34
2004.04.18
Супер-мупер тихоход!


14-1079953463
Style
2004-03-22 14:04
2004.04.18
У нас на сайте парнишка придумал такую вещь