Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1238011378
AssemblerIA64
2009-03-25 23:02
2010.02.21
Длинное деление: проблема с остатком


15-1260851935
Делфиец
2009-12-15 07:38
2010.02.21
Бибилиотека JEDI сомпонентов бесплатна?


2-1261546938
Nano-Tek
2009-12-23 08:42
2010.02.21
Замена стандартного диалога копирования файлов.


2-1261130070
pg81
2009-12-18 12:54
2010.02.21
Как проверить существет ли еще форма в frm:TMyTypeForm?


2-1261068749
Б
2009-12-17 19:52
2010.02.21
Как установить размеры клиентской части окна?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский