Форум: "Начинающим";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];
ВнизКак проверить существет ли еще форма в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c