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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
6-47648
Каспер
2002-04-16 06:05
2002.07.15
Пересылка файлов по сети.


4-47899
Alexander
2002-05-16 02:49
2002.07.15
Как поменять курсор? С LoadCursor и SetCursor разобрался, но


1-47284
Gamar
2002-06-29 17:40
2002.07.15
Изменение цвета столбца в Run-Time


6-47630
M@tvey
2002-04-10 15:40
2002.07.15
Помощь


1-47495
valerchik
2002-07-04 04:57
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский