Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизКак узнать: была ли уже создана форма или нет ? Найти похожие ветки
← →
eruc (2002-09-07 15:12) [0]Как узнать: была ли уже создана форма или нет ?
← →
Grande (2002-09-07 15:16) [1]А ты создаёшь её в своём приложении?
← →
eruc (2002-09-07 15:18) [2]да
← →
eruc (2002-09-07 15:19) [3]т.е. нужно знать : существует ли данная форма или нет
← →
eruc (2002-09-07 15:20) [4]в данный момент
← →
Grande (2002-09-07 15:23) [5]ЭлементарЭлемОбработчик события формы OnCreat (OnActivate), далее что-нибудь типа ShowMessage("Приплыли...");
That"s all!
← →
Grande (2002-09-07 15:24) [6]Элементарно: Обработчик события формы OnCreat (OnActivate), далее что-нибудь типа ShowMessage("Приплыли...");
That"s all!
← →
eruc (2002-09-07 15:49) [7]а чего нибудь такого нету (КАКОЙ нибудь ФУНКЦИИ):
EXIST(Form1)
чтобы возвращала
true OR fALSE
← →
Grande (2002-09-07 16:13) [8]Слушай, а в чём, собственно, проблема?
← →
Anatoly Podgoretsky (2002-09-07 16:37) [9]Объект Screen свойство Forms содержит полный список всех твоих созданных форм
← →
Anatoly Podgoretsky (2002-09-07 16:40) [10]Ой ответ мой не совсем верный, она не позволяет узнать была ли, а только существует ли в данный момент
← →
Просто прохожий (2002-09-07 20:45) [11]Assigned(MyForm) = True, если форма MyForm создана.
← →
Kopetr (2002-09-07 20:53) [12]>> Просто прохожий:
Если форма создана, а потом уничтожена (Form.Free), то
Assigned(Form) все равно будет = True, хотя формы-то уже и нет.
← →
Юрий Зотов (2002-09-07 20:58) [13]OnCreate:
if Form1 = nil then Form1 := Self;
OnDestroy:
if Form1 = Self then Form1 := nil;
Проверка:
if Form1 <> nil then ... // форма существует
← →
Просто прохожий (2002-09-07 21:03) [14]> Kopetr (07.09.02 20:53)
Тогда можно после каждого уничтожения присваивать MyForm := nil
← →
Kopetr (2002-09-07 21:12) [15]>> Просто прохожий:
Тогда проще FreeAndNil(..)
← →
Kopetr (2002-09-07 21:27) [16]>> Юрий Зотов:
А зачем
OnCreate:
if Form1 = nil then Form1 := Self;
?
← →
Юрий Зотов (2002-09-07 21:30) [17]> Kopetr © (07.09.02 21:27)
Чтобы избежать утечек памяти, если вздумается создать несколько таких форм одновременно.
← →
Kopetr (2002-09-07 21:35) [18]>> Юрий Зотов :
Круто. А я уж думал, просто так :)
← →
Kopetr (2002-09-07 21:47) [19]>> Юрий Зотов :
А как в таком случае избежать утечек памяти?
Ведь мы в любом случае теряем адреса всех созданных форм, кроме одной. И Form1 := Self происходит при создании в любом случае.
← →
Юрий Зотов (2002-09-07 22:41) [20]> И Form1 := Self происходит при создании в любом случае.
Не в любом, а только если Form1 еще рано nil (для того там и поставлен if). То есть, если ни одна такая форма еще не создана. Аналогично при уничтожении - переменную Form1 будет очищать только та форма, на которую это переменная и ссылается.
В итоге переменную Form1 будет менять только ПЕРВЫЙ экземпляр формы. Он ее проинициализирует (в OnCreate), он же ее и очистит (в OnDestroy) - а все остальные экземпляры ее НЕ ТРОНУТ (потому что для них переменная Form1 будет уже и не nil, и не Self). Что и позволяет избежать ГАРАНТИРОВАННОГО перезатирания каждой новой формой ссылки на предыдущую.
А за остальное, естественно, отвечает программер. Например, если ему это нужно, он может создать массив (или список) форм. Или может прописать Action := caFree в OnClose. Или может показывать формы модально и тут же убивать их:
with TForm1.Create(...) do
try
if ShowModal = mrOK then
begin
...
end
finally
Free
end;
Существует еще целая куча способов и рецептов. Но универсальный, на все случаи жизни лишь один - внимательность и аккуратность.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c