Главная страница
    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
2-1261424330
Drowsy
2009-12-21 22:38
2010.02.21
ComponentName.


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


15-1260546289
test
2009-12-11 18:44
2010.02.21
Форум и вопросы


15-1260328586
Kerk
2009-12-09 06:16
2010.02.21
Лицемерие :)


2-1261473957
pg81
2009-12-22 12:25
2010.02.21
Как передать какртинку и получить картику(не ресурс) из dll?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский