Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при динамическом создании формы 
V
    Опции темы
ZufuS
Дата 16.12.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Сначала я объявил компоненты глобально, а форме задал тип TForm и при использовании
Код

Coef := TForm.Create(self);

Всё было хорошо. Потом появилась нужда создать для них класс и переместить их туда.
Код

type
  TCoef = class(TForm)
  ...

а создание формы я изменил на
Код

Coef := TCoef.Create(self);

Когда происходит событие, содержащее эту операцию, появляется ошибка: Resource TCoef not found.
Если TCoef наследовать не от TForm, а от TForm1(объекту этого класса и принадлежит кнопка, вызывающая создание формы Coef), то ошибки не будет.
PM   Вверх
Alexeis
Дата 16.12.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ZufuS, Для создания другой формы воспользуйтесь стандартными средствами среды, тогда у вас не возникнут проблемы такого плана.
1) меню File -> New -> Form появится новая форма. Сохраните ее в отдельный модуль
2) меню Project -> Options -> Forms -> Auto-create forms выделите вашу форму и нажмите на кнопку со стрелочкой вправо, тем самым вы запретите ее автосоздание и получите тотже эффект, что и хотели, но для этой формы создастся ресурс, без которого она не могла бы запускаться.  


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZufuS
Дата 16.12.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Про это мне известно. Но я пишу не для себя программу, а курсовую. Преподавателю нужно чтобы она создавалась динамически.
PM   Вверх
Alexeis
Дата 16.12.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ZufuS @  16.12.2006,  12:35 Найти цитируемый пост)
Преподавателю нужно чтобы она создавалась динамически. 

  Все верно, она и будет создаваться динамически, я же показал как ее убрать из списка автосоздаваемых форм. После запуска программы ее не будет вообще в памяти, в нужное время пишете так как вы хотели и она создастся. Ее так же можно уничтожать в произвольный момент. Не переживайте, препод именно это и имел ввиду, потому что без своего собственного ресурса форма не создастся (т.е. каждой форме должен соответствовать свой *.dfm файл, который затем превращается в ресурс экзешника), такова уж задумка авторов VCL. Все остальное будет изврат. Не думаю, что преподаватель хочет научить вас чему-то плохому.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZufuS
Дата 16.12.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Ещё он писал при закрытии формы Form2.Free. Я пишу этот метод в кнопку с ModalResult'ом равным mrOk. И при её нажатии происходит ошибка в этой строке.
PM   Вверх
Savek
Дата 16.12.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: нет
Всего: 7



Form.Free если хочешь уничтожить дочернюю форму (лучше FreeAndNil()), а если хочешь чтобы форма уничтожалась при закрытии, то в OnClose формы нужно написать

Код

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
form2:=nil;
end;

PM MAIL   Вверх
Bitter
Дата 16.12.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: нет
Всего: 27



для того, чтобы создать вот это:

 TCoef = class(TForm)

...

Coef : TCoef;

нужно написать так:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 Application.CreateForm(TForm, Coef);
 Coef.Show;
end;


и всё будет чики-чики

Это сообщение отредактировал(а) Girder - 21.12.2006, 12:33
PM MAIL ICQ Skype   Вверх
Golden Hands
Дата 16.12.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: нет
Всего: 83



Код

Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
...

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin

  Action:=caFree;

end;

procedure TForm2.FormDestroy(Sender: TObject);
begin

  Form2:=nil;

end;





--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
ZufuS
Дата 17.12.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Действительно достаточно было убрать из списка форм, создаваемых автоматически. Вот только когда caFree или nil пишу в закрытии формы, при втором заходе в эту форму в приложении вылезает ошибка и ругается на строку Form2.ShowModal; (в задании сказано: форма для ввода коэффициентов создается как модальная и после выполнения операции ввода закрывается с освобождением памяти (на всякий случай))
PM   Вверх
ZufuS
Дата 19.12.2006, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Создаю новую форму. Убираю из списка форм, создаваемых автоматически. Для нажатия кнопки на первой форме пишу Form2.ShowModal. Когда ее нажимаю в приложении появляется ошибка. Чего не хватает?
--
всё, разобрался, всем спасибо

Это сообщение отредактировал(а) ZufuS - 19.12.2006, 02:05
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.