Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ShowModal ?

1.8K
14 октября 2002 года
DanilovYV
41 / / 14.10.2002
:???: :???: :???:
+++++++++==========++++++++++
Проблема такова:
ситуация -

Form1 = new TForm1(Application)
................
Form1->ShowModal();
................
Form1->Close();
delete Form1; // пока всё ОК
// и снова - - - - -
Form1 = new TForm1(Application)
................
Form1->ShowModal();
................
Form1->Close();
delete Form1;

// но второй delete выдёт - Error: (примерно) Variant array is not avaliable - что-то типа того

please - help me !!
985
14 октября 2002 года
kostas
34 / / 20.07.2000
Сомнительно, что ты правильно форму создаёшь.

Я предлагаю создание формы делать так:
Application->CreateForm(__classid(TForm2),
&Form2);
Уничтожение так:
delete Form2;
или
Form2->~TForm2();

Только имей в виду, что если ты без проверки на существование будешь уничтожать, программа вылетит.
317
14 октября 2002 года
Relax
573 / / 20.09.2000
ничего не сомнительно... я сам всегда только так формы создаю.
вообще-то странно - вроде все правильно. ошибка должна вылетать если форма уничтожена до delete, хотя эта ошибка обычно просто из-за обращения в пустую область памяти и про вариант там ничего не должно быть. а в OnClose ты ее случайно не уничтожаешь?
1.8K
14 октября 2002 года
DanilovYV
41 / / 14.10.2002
Закрываю в OnClose - что с того ?

и что мне делиты ставить перед закрытием формы в обоих случаях ??
317
14 октября 2002 года
Relax
573 / / 20.09.2000
просто если в OnClose написать Action = caFree, то при закрытии формы автоматически вызывается деструктор и память из под объекта освобождается и delete писать не надо...
1.8K
14 октября 2002 года
DanilovYV
41 / / 14.10.2002
у меня так и написано (caFree)

а ошибка если точно говорить такая:
"Project noname.exe raised exception class TVariantError with message "Variant is not an array". Process stopped. Use Step or Run to continue."
__________
с ув. Данилов ЮВ
317
14 октября 2002 года
Relax
573 / / 20.09.2000
ошибка какая-то странная... но скорее всего именно из-за этого - нельзя использовать одновременно caFree и delete - они делают одно и тоже - удаляют объект и освобождают память. поэтому delete после закрытия формы обращается в пустое место - убери его.
1.8K
14 октября 2002 года
DanilovYV
41 / / 14.10.2002
может лучше caFree убрать из OnClose ?

а то мне просто кажется new всегда должен deletе'ом уничтожаться... :-?
1.8K
14 октября 2002 года
DanilovYV
41 / / 14.10.2002
Очень интересно, но та самая ошибка появляется не на 2-ом делите, а на следующем операторе (каким-бы он ни был).

_______________
Данилов ЮВ
293
14 октября 2002 года
SEDEGOFF
586 / / 06.10.2002
Пусть у тебя TMAIN - Главная форма
TForm1 - та форма которую ты хочешь вызвать из MAIN
так вот делаешь следующеее
в Form1.cpp удаляешь TForm1* TForm1;
в Form1.h удаляешь extern PACKAGE TForm1* Form1;

в MAIN.cpp добавляешь
#include <memory>
#include <Form1.h>
и после объевления TMAIN* MAIN;
добавляшь using namespace std;

Теперь там где тебе необходимо вызвать свою форму
пишешь
const auto_ptr<TForm1> Form1(new TForm1(0));
Form1->ShowModal();

auto_ptr - это шаблон класса, который представляет собой эффективно управлять памятью для VCL объектов.
После закрытия формы или аварийного закрытия auto_ptr автоматически ее удалит.
Внутри Form1 ссылка на ее свойства осуществляется так TForm1::Resize();
985
15 октября 2002 года
kostas
34 / / 20.07.2000
//------------------------------------------------------
Слушай, ты форму к проекту подключаешь правильно?
1. Папочка с плюсиком.
2. И добавить заголовочный файл (находится)
в Files.
Что касается caFree, его правильно вызывать так:
Form2->Action = (TBasicAction*)caFree;

Причём это абсолютный аналог delete

создавать и разрушать форму можно

// или так:
//------------------------------------------------------

Application->CreateForm(__classid(TForm2), &Form2);
Form2->ShowModal();
// Расскомментируй тут и программа будет вылетать.
// Form2->Close();
delete Form2;
//------------------------------------------------------

// или так:
//------------------------------------------------------
// Form2 = new TForm2(Application);
// Form2->ShowModal();
// delete Form2;
//------------------------------------------------------
Что же касается твоей ошибки, мне её смоделировать не удалось.



Кидаю тебе скрученный проект, (не знаю он
перешлётся или нет) посмотри на досуге.
18K
01 мая 2006 года
Кузнец
2 / / 01.05.2006
У меня тут проблемка. Решил попрограммить в билдере и в процессе изучения столкнулся со следующей проблеммой. Когда начинаю коппилировать - выскакивает ошибка:
[C++ Error] Edit1.cpp(87): E2315 'ShowModal' is not a member of 'TAboutBox', because the type is not yet defined
[C++ Error] Edit1.cpp(88): E2315 'Free' is not a member of 'TAboutBox', because the type is not yet defined
В чём проблемма не могу понять!?!

Всё вроде правильно, или я что-то ещё не сделал?
Такой вот текст программки:
void __fastcall TForm1::SpeedButton9Click(TObject *Sender)
{
Application->CreateForm(__classid(TAboutBox), &AboutBox);
AboutBox->ShowModal();
AboutBox->Free();
}
1
01 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Кузнец
У меня тут проблемка. Решил попрограммить в билдере и в процессе изучения столкнулся со следующей проблеммой. Когда начинаю коппилировать - выскакивает ошибка:
[C++ Error] Edit1.cpp(87): E2315 'ShowModal' is not a member of 'TAboutBox', because the type is not yet defined
[C++ Error] Edit1.cpp(88): E2315 'Free' is not a member of 'TAboutBox', because the type is not yet defined
В чём проблемма не могу понять!?!

Всё вроде правильно, или я что-то ещё не сделал?
Такой вот текст программки:
void __fastcall TForm1::SpeedButton9Click(TObject *Sender)
{
Application->CreateForm(__classid(TAboutBox), &AboutBox);
AboutBox->ShowModal();
AboutBox->Free();
}


Хм. А класс - TAboutBox - он нормально определен и объявлен? Наследует от формы? Ты получаешь такое сообщение так как такой тип отсутствует - естественно ты не можешь обратится к его методам.

18K
01 мая 2006 года
Кузнец
2 / / 01.05.2006
Цитата:
Originally posted by kot_
Хм. А класс - TAboutBox - он нормально определен и объявлен? Наследует от формы? Ты получаешь такое сообщение так как такой тип отсутствует - естественно ты не можешь обратится к его методам.



Да вот я и не знаю как именно это делается. Единственно, что я вставил - это строчку:

USEFORM("Unit1.cpp", AboutBox)

и всё. А что ещё нужно, я не знаю. Мне только надо одну прогу написать. А то PHP как-то неудобно использовать. Вот 2-й день пытаюсь программить в билдере. Заранее спасибо!

1
02 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Кузнец
Да вот я и не знаю как именно это делается. Единственно, что я вставил - это строчку:

USEFORM("Unit1.cpp", AboutBox)

и всё. А что ещё нужно, я не знаю. Мне только надо одну прогу написать. А то PHP как-то неудобно использовать. Вот 2-й день пытаюсь программить в билдере. Заранее спасибо!


Для начала тебе нужно создать класс этой формы, для того чт бы его использовать. И не забыть подключить заголовочный файл.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог