Форум: "Начинающим";
Текущий архив: 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