![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как уничтожить форму из самой себя?
awaken © (2002-06-24 15:37:00)я создаю форму в MDI-приложении в runtime,
таким образом (используя собственный конструктор):
try
ID := DBGrid1.SelectedField.AsInteger;
AE:=TAccountEditForm.CreateID(ID,Application);
AE.Show;
except on EEditException do
// игнорировать эксепшн
end;
сам конструктор устроен так:
constructor TAccountEditForm.CreateID(ID: Integer; Owner: TComponent);
begin
inherited Create(Owner);
if(Instance = nil) then
Instance := Self
else
raise EEditException.Create("Can""t create");
// далее открытие нужных рекордсетов
end;
трюк с instance - чтобы предотвратить создание второго экземпляра окна пока первое существует
в OnClose пытаюсь делать чтобы форма сама себя закрывала
ни Free ни Destroy толком не работают. точнее через раз после закрытия формы происходит Access Violation по такому-то адресу
как правильно сделать самоуничтожаюшуюся форму (не модальную)?
Александр Спелицин (2002-06-25 10:43:00) [1]Вы уничтожаете объект внутри одного из его методов. Это не есть очень хорошо.
Для корректного закрытия окна пошлите ему сообщение WM_CLOSE через PostMessage: PostMessage(AE.Handle, WM_CLOSE, 0, 0).
Правда, возможно что эта форма появится на экране на доли секунды и исчезнет. Поэтому лучше проверять наличие существующей формы ДО ее создания.
MBo (2002-06-24 15:39:00) [2]в OnClose что стоит? Action:=caFree;?