Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

SetFocus   Найти похожие ветки 

 
grig   (2002-07-04 15:31) [0]

Уважаемые мастера! У меня возникла вот какая проблемма:
Создаю в приложении форму и вызываю ее

Application.CreateForm(TForm1, Form1);
Form1.ShowModal;

и далее закрываю ее

Form1.Release;


В методе Activate формы идет создание и вызов другой формы

Procedure TForm1.FormCreate();
Begin
FirstActivate := True;
end;

Procedure TForm1.FormActivate();
Begin
If FirstActivate then begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
Form1.SetFocus; // Управление остается на вызвавшей форме

FirstActivate := false;
end;
end;

и закрытие

Procedure TForm1.Close;
begin
Form2.Release;
end;

Так вот, без использования SetSocus все работает без ошибок, а с использованием при закрытии Form1 возникает Exception. Из-за чего это может быть? Заранее благодарен.


 
alexdbases   (2002-07-04 15:34) [1]

Release - Close....поробуй....:-)


 
Skier   (2002-07-04 15:37) [2]

>grig
Если нет острой необходимости в испол-нии Form1.Release,
то лучше испол-ть Form1.Close


 
grig   (2002-07-04 15:39) [3]

2alexdbases и Skiller
Close ведь не освобождает форму, а только ее закрывает, а надо ее выгрузить из памяти


 
Skier   (2002-07-04 15:43) [4]

>grig

> Close ведь не освобождает форму


Если хочешь освободить форму, то :

1) Пиши Free вместо Release
2) Пиши Close вместо Release, но в обработчике OnClose
поставь : Action := caFree;



 
qube   (2002-07-04 15:45) [5]

Если ты создаешь форму вызовом TApplication.CreateForm, эту форму уничтожать вызовами типа Release, Free нельзя, ее уничтожит деструктор объекта Application. Для динамического создания формы и последующего удаления используй
MyForm := TMyForm.Create(nil);
...
MyForm.Release;



 
Skier   (2002-07-04 15:52) [6]

>qube

> Если ты создаешь форму вызовом TApplication.CreateForm,
> эту форму уничтожать вызовами типа ..., Free нельзя...


Враньё !


 
grig   (2002-07-04 15:57) [7]

> qube и >Skiler
Конечно можно создавать форму вызовом TApplication.CreateForm и
потом ее удалять вызовами Release и Free. Я всю жизнь так и делаю и никогда нигде не глючило.


 
Skier   (2002-07-04 16:05) [8]

>grig
Можно конечно и так, но... в умных книгах
(в основном) формы так не создаются, поэтому советую
тебе переучится и создавать формы примерно так :


var
YourForm : TYourForm;
begin
YourForm := TYourForm.Create(Application);
try
// твой код...
finally
YourForm.Free;
end; //try
end;


 
grig   (2002-07-04 16:09) [9]

Всем спасибо большое. Приколы были в управлении переменной FormActivate: Boolean; Sorry, мой недосмотр.


 
Johnmen   (2002-07-04 16:25) [10]

>Skier ©
>TYourForm.Create(Application);
Что соответствует TApplication.CreateForm(...)


 
Skier   (2002-07-04 16:38) [11]

>Johnmen
Да.
Но только в книгах (в большинстве случаях) форму
через TApplication.CreateForm(...) не создают.


 
Игорь Шевченко   (2002-07-04 16:45) [12]

qube © (04.07.02 15:45)

В данном случае без разницы, для какой формы вызывать Free, для созданной по TForm.Create(nil), TForm.Create(Application), Application.CreateForm (...)

Деструктор TForm самостоятельно удалит объект формы из списка компонент владельца.
Впрочем, это касается любого потомка TComponent, не обязательно формы.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.02 c
1-47382
sh_a
2002-07-02 10:10
2002.07.15
Как записать динамический массив в файл?


8-47619
Королев
2002-03-06 08:51
2002.07.15
Как подключать DirectX8.1 SDK к Delphi?


3-47145
dr_neo
2002-06-21 23:04
2002.07.15
Поиск по Access


8-47607
d.romanov
2002-03-05 15:11
2002.07.15
Декодер


3-47173
Dorosh
2002-06-19 12:08
2002.07.15
Вставка файла в таблицу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский