Главная страница
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.016 c
3-1234272238
bafy
2009-02-10 16:23
2010.02.21
Как добавить "значение по умолчанию" в запрос?


4-1229348213
Wadimka
2008-12-15 16:36
2010.02.21
Есть чужое приложение и есть на нем непонятные кнопки


1-1238424439
VoznikVopros
2009-03-30 18:47
2010.02.21
Не удаётся нормально зашифровать-дешифровать сообщение...


9-1183470560
THandle
2007-07-03 17:49
2010.02.21
DirectX


2-1261409951
JohnKorsh
2009-12-21 18:39
2010.02.21
API для беспроводных сетей.