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

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

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


Страницы:   1 2

smaller ©   (2007-03-27 14:58:00) 

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


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

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

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


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


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

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


Loginov Dmitry   (2007-03-27 20:42:00) [3]

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


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


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

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

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

--
Regards, LVT.


Loginov Dmitry   (2007-03-27 20:23:00) [5]

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


Loginov Dmitry   (2007-03-27 20:19:00) [6]

> [17] RASkov   (27.03.07 19:22)


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


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

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

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


evvcom   (2007-03-27 18:28:00) [8]

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


Leonid Troyanovsky   (2007-03-27 18:23:00) [9]


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

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

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

--
Regards, LVT.


Loginov Dmitry   (2007-03-27 16:11:00) [10]

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


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


Reindeer Moss Eater   (2007-03-27 16:06:00) [11]

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

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


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

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

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


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

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

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


Reindeer Moss Eater   (2007-03-27 15:46:00) [14]

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

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

form1.free;
form2 := nil;


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

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

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


Desdechado   (2007-03-27 15:15:00) [16]

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


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


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

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

;-)

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


niko_   (2007-03-27 15:08:00) [18]

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


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

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


Desdechado   (2007-03-27 15:05:00) [20]

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


Страницы:   1 2

Наверх

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