Главная страница
    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.013 c
14-47726
borlandman
2002-06-11 17:48
2002.07.15
Планировщик


1-47368
esprit_bel
2002-07-02 07:27
2002.07.15
Удаление


14-47785
Fishka
2002-06-14 16:07
2002.07.15
Как определить емкость диска, лежащего передо мной?


1-47302
Adm. Beckett
2002-06-30 14:27
2002.07.15
выделение строк цветом в StringGrid


3-47175
fool
2002-06-19 12:14
2002.07.15
Ошибки по русски,про Oracle слышал, а MSSQL?





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