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

Вниз

Как проверить существет ли еще форма в frm:TMyTypeForm?   Найти похожие ветки 

 
pg81 ©   (2009-12-18 12:54) [0]

Есть переменная frm:TMyTypeForm;
Как узнать, что форма на которую ссылается эта переменная,еще существует?
assigned(frm)говорит существет, а на самом деле она уже закрыта...
и потом когда обращаешься к ней, напрмиер, frm.MyFunction, естественно ругается.


 
{RASkov} ©   (2009-12-18 13:13) [1]

> [0] pg81 ©   (18.12.09 12:54)
> а на самом деле она уже закрыта

закрыта и уничтожена - разные вещи.

что бы иметь возможность делать проверку на nil, т.е. if frm=nil then... или assigned(frm)
нужно после уничтожения формы ссылку на нее, например frm нилить... примерно так:
frm.Free;
frm:=nil;

или
FreeAndNil(frm);


 
Демо ©   (2009-12-18 13:34) [2]


> {RASkov} ©   (18.12.09 13:13) [1]


Можно и проверить.

function CheckForm(Form: TForm): Boolean;
begin
 Result := False;
 if Assigned(Form) then
 try
   Result := isWindow(Form.Handle);
 except
 end;
end;


 
pg81 ©   (2009-12-18 13:44) [3]

frm.destroy;
frm:=nil;
помогло.
А чем отличаются destroy и free?


 
clickmaker ©   (2009-12-18 13:45) [4]

F1

Components on a form are created and destroyed automatically. However, if you write your own code to instantiate objects, you are responsible for disposing of them as well. Every object inherits a Destroy method (called a destructor) from TObject. To destroy an object, however, you should call the Free method (also inherited from TObject), because Free checks for a nil reference before calling Destroy.


 
DVM ©   (2009-12-18 14:46) [5]


> pg81 ©   (18.12.09 12:54) 


> Как узнать, что форма на которую ссылается эта переменная,
> еще существует?

Сразу напрашивается вопрос - зачем это знать? Причем каков бы не был твой ответ это говорит имхо лишь об ошибках проектирования.


 
{RASkov} ©   (2009-12-18 18:58) [6]

> [3] pg81 ©   (18.12.09 13:44)
> frm.destroy;
> frm:=nil;
> помогло.

Не нужно вызывать Destroy напрямую.... нужно Free.

> А чем отличаются destroy и free?

Посмотри метод Free и описание Destroy в TObject ...все станет ясно. Если понимаешь разницу статического от виртуального метода...


 
brother ©   (2009-12-21 04:49) [7]

> А чем отличаются destroy и free?

дестрой - тупо разрушение объекта ,и если он не создан, то ловим AV
фрии - проверка на "созданнось" (не nil), а уж потом дестрой, если объект не создан, то при проверке дестрой не вызовется и AV не будет ;)



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

Текущий архив: 2010.02.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-1235109329
Дмитрий
2009-02-20 08:55
2010.02.21
[Delphi 2006, Access] Загрузка файла в базу данных


1-1238398266
Дмитрий С
2009-03-30 11:31
2010.02.21
Отключить автоматические AddRef и Release в Delphi?


15-1260350259
Сергей М.
2009-12-09 12:17
2010.02.21
Delphi for PHP


2-1261424330
Drowsy
2009-12-21 22:38
2010.02.21
ComponentName.


2-1261234069
serhiyiv
2009-12-19 17:47
2010.02.21
TListView