Текущий архив: 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