Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как проверить существет ли еще форма в frm:TMyTypeForm? [D7, WinXP]


pg81 ©   (2009-12-18 12:54:00) 

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


brother   (2009-12-21 04:49:00) [1]

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

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


{RASkov}   (2009-12-18 18:58:00) [2]

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

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

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

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


DVM   (2009-12-18 14:46:00) [3]


> pg81 ©   (18.12.09 12:54) 


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

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


clickmaker   (2009-12-18 13:45:00) [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 referencebefore calling Destroy.


pg81   (2009-12-18 13:44:00) [5]

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


Демо   (2009-12-18 13:34:00) [6]


> {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;


{RASkov}   (2009-12-18 13:13:00) [7]

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

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

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

или
FreeAndNil(frm);


Наверх

Титульная страница Поиск, карта сайта Написать письмо