Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.49 MB
Время: 0.006 c
3-61021
pvasya
2002-08-19 16:56
2002.09.19
как привязать DBLookupComboBox к DBGrid?


4-61352
Squ
2002-07-29 11:59
2002.09.19
ShellApi


6-61226
dimushkin
2002-07-13 22:51
2002.09.19
TClientSocket и 3 TServerSocket ?


4-61385
Eugene_Jek_Efimochkin
2002-07-17 23:37
2002.09.19
принимать ярлыки URL из IE


3-60985
koks
2002-08-28 16:30
2002.09.19
ключи...





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