Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Как определить существование формы ?   Найти похожие ветки 

 
smaller   (2007-03-27 14:58) [0]

Как программно спросить, существует ли форма, чтобы в случае ее несуществования не вызвать события EAccesViolation ?


 
Elen ©   (2007-03-27 15:02) [1]

if Assigned(<Форма>) then  <существует>


 
Reindeer Moss Eater ©   (2007-03-27 15:03) [2]

if Assigned(<Форма>) then  <существует>

форма := TForm.Create(nil);
форма := nil;
if Assigned(<Форма>) then  ?


 
clickmaker ©   (2007-03-27 15:05) [3]


> smaller   (27.03.07 14:58)

100% варианта нет. Потому что, даже если Assigned(Form) вернет не nil - это не означает, что форма существует.
Для полной гарантии форма должна убиваться FreeAndNil(Form)


 
Desdechado ©   (2007-03-27 15:05) [4]

if( Application.MessageBox( "Существует ли форма?", "Дорогой юзер",
                                     MB_YESNO or MB_ICONQUESTION or
                                     nDefButton or MB_APPLMODAL ) = IDYES ) then
существует;


 
smaller   (2007-03-27 15:08) [5]

Благодарю за помощь, спасибо.


 
niko_ ©   (2007-03-27 15:08) [6]

if FindWindow("TForm", Форма.Caption) then <существует>


 
Плохиш ©   (2007-03-27 15:12) [7]


> clickmaker ©   (27.03.07 15:05) [3]
> Для полной гарантии форма должна убиваться FreeAndNil(Form)

Form := TForm.Create(nil);
Form2 := Form;
FreeAndNil(Form);
If Assigned(Form2) then ...

;-)

PS. EAccesViolation 100% гарантирует, что форма или её компонент не существует...


 
Desdechado ©   (2007-03-27 15:15) [8]

Плохиш ©   (27.03.07 15:12) [7]
А может это уже и не форма вовсе...


 
niko_ ©   (2007-03-27 15:37) [9]

Маленькая поправочка [6]:

if Boolean(FindWindow("TForm", Форма.WindowText) then <существует>


 
Reindeer Moss Eater ©   (2007-03-27 15:46) [10]

Маленькая поправочка [6]:

form1 := TForm.Create(nil);
form2 := TForm.Create(nil);
form1.caption := "Предвед";
form2.caption := "Предвед";

form1.free;
form2 := nil;


 
niko_ ©   (2007-03-27 16:00) [11]

Reindeer Moss Eater ©   (27.03.07 15:46) [10]

Ну да, согласен - был не прав :(


 
Loginov Dmitry ©   (2007-03-27 16:00) [12]

В качестве одного из сотен вариантов:

Регистрируй формы при создании в глобальном списке и удаляй их из этого списка при уничтожении. Соответственно, если форма есть в списке, значит она существует. Можешь и не создавать своего списка. Все формы при создании регистрируются в Screen.Forms.


 
Reindeer Moss Eater ©   (2007-03-27 16:06) [13]

В качестве одного из сотен вариантов:

Если серьезно, то вариантов этих вообще не должно быть, если кодировать правильно.


 
Loginov Dmitry ©   (2007-03-27 16:11) [14]

> Если серьезно, то вариантов этих вообще не должно быть,
> если кодировать правильно.


Варианты всегда есть. Просто о них уже не думаешь :)


 
Leonid Troyanovsky ©   (2007-03-27 18:23) [15]


> Loginov Dmitry ©   (27.03.07 16:00) [12]

> форма есть в списке, значит она существует. Можешь и не
> создавать своего списка. Все формы при создании регистрируются
> в Screen.Forms.

Не "можешь и не", а "и не надо".
Далее - по тексту.

--
Regards, LVT.


 
evvcom ©   (2007-03-27 18:28) [16]

Ну с формой понятно, а если ж все ж объект иным может быть, то ответ [4] хорош уж больно :)


 
RASkov   (2007-03-27 19:22) [17]

Тупой способ :)
function ExistForm(Frm: TForm): Boolean;
begin
 try
  Result:=Frm.Tag=0; //или как нибудь по другому попытаться обратиться к свойствам формы...
  Result:=True;
 except Result:=False; end;
end;

Вобще таких вопросов не должно возникать если все правильно организовывать в программе....


 
Loginov Dmitry ©   (2007-03-27 20:19) [18]

> [17] RASkov   (27.03.07 19:22)


Думаешь, обращение к Tag для несуществующей формы приведет к ошибке? Ошибаещся.


 
Loginov Dmitry ©   (2007-03-27 20:23) [19]

Надежные способы определение жизнеспособности объекта, которые мне известны:
регистрация в списке (см [12]), а для своих классов можно предусмотреть GUID-поле (c) мой.
В любом случае, работа с битой ссылкой уже обязана приводить к исключению.


 
Leonid Troyanovsky ©   (2007-03-27 20:38) [20]


> Loginov Dmitry ©   (27.03.07 20:23) [19]

> регистрация в списке (см [12]), а для своих классов можно
> предусмотреть GUID-поле (c) мой.

Предусмотрительность в смысле GUID, неотличима от
иных видов предусмотрительности, например, [2],
однако, также негарантирована.

--
Regards, LVT.


 
Loginov Dmitry ©   (2007-03-27 20:42) [21]

Использование GUID-поля - надежная технология. Проверено :)


 
Плохиш ©   (2007-03-27 22:08) [22]


> Регистрируй формы при создании в глобальном списке и удаляй
> их из этого списка при уничтожении.

Это уже в генофонде реализовано.


 
Anatoly Podgoretsky ©   (2007-03-28 23:56) [23]

> clickmaker  (27.03.2007 15:05:03)  [3]

100 процентный вариант (гарантированый) есть - это screen.forms



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.045 c
8-1154954395
ArtemESC
2006-08-07 16:39
2007.04.15
Как считать изображение, находящееся за...


4-1163969418
Dmitry_177
2006-11-19 23:50
2007.04.15
Прозрачное STATIC-окно


15-1174150455
Real
2007-03-17 19:54
2007.04.15
Микроволновка - что можно приготовить?


15-1174447946
Slider007
2007-03-21 06:32
2007.04.15
С днем рождения ! 21 марта


2-1175002454
Tor
2007-03-27 17:34
2007.04.15
ComboBox с таблицей





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