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

Вниз

создание формы динамически   Найти похожие ветки 

 
dreamse   (2006-10-09 22:25) [0]

Как проверить что форма уже создана ?

Динамически создаёться форма, как проверить что она уже создала или нет ?

Код Form = nil выдаёт ошибку


 
Ketmar ©   (2006-10-09 22:28) [1]

ты создаёшь -- ты это и запоминай. в чём проблема-то?


 
Джо ©   (2006-10-09 22:30) [2]

> Код Form = nil выдаёт ошибку

Переменные, в оговоренных в спецификации языка случаях, нужно инициализировать. А вообще:  [1] Ketmar ©


 
dreamse   (2006-10-09 22:30) [3]

Просто как то муторно переменную какую то ставить на создание на удаление ... порево какое то

Нельзя просто проверить чтоли ?


 
Джо ©   (2006-10-09 22:33) [4]

> [3] dreamse   (09.10.06 22:30)
> Просто как то муторно переменную какую то ставить на создание
> на удаление ... порево какое то

Прочитай, если не сложно, еще раз 1-е предложение в [2].


 
Ketmar ©   (2006-10-09 22:35) [5]

я всегда говорил, что переменные выдумали идиоты. описывай их, присваивай чего-то... дурь. то ли дело метла -- вжик да вжик, никаких проблем...


 
dreamse   (2006-10-09 22:35) [6]

Код :


var
 FLogin:TFrmLogin;

begin

// Проверка ... КАК ?

 FLogin := TFrmLogin.Create(self);

  if FLogin.ShowModal = mrOk then
   begin
    // .....
   end;

 FLogin.Free;



Торможу что то  :(


 
dreamse   (2006-10-09 22:36) [7]

var
FLogin:TFrmLogin;

Глобальная


 
Ketmar ©   (2006-10-09 22:39) [8]

FreeAndNil(fLogin)

проверка -- if fLogin <> nil (или not Assigned(fLogin), что в данном случае понятней %-)


 
Ketmar ©   (2006-10-09 22:39) [9]

ну и -- лучше написать явно: var fLogin: TFrmLogin = nil;


 
dreamse   (2006-10-09 22:48) [10]

Разобрался ! Всем спасибо

Проверка : Assigned(fLogin),

+ обязательно уничтожение формы не free а : FreeAndNil(FLogin);


 
Kolan ©   (2006-10-09 22:49) [11]


> free

Это и есть уничтожение.
> FreeAndNil

просто переменную обnilит


 
Leonid Troyanovsky ©   (2006-10-10 14:06) [12]


> dreamse   (09.10.06 22:25)  

> Как проверить что форма уже создана ?


http://www.rsdn.ru/Forum/?mid=382117

--
Regards, LVT.


 
dreamse   (2006-10-10 18:26) [13]

> Leonid Troyanovsky ©   (10.10.06 14:06) [12]

То же вариант. Но когда форма видна на экране как я понял, а если существует но скрыта ?


 
MetalFan ©   (2006-10-10 19:35) [14]

а формы не лучше ль Release"ом "убивать"?


 
Ketmar ©   (2006-10-10 19:38) [15]

>[14] MetalFan(c) 10-Oct-2006, 19:35
>а формы не лучше ль Release"ом "убивать"?
это если из обработчиков. а так -- можно и Free(). %-)


 
Leonid Troyanovsky ©   (2006-10-10 20:29) [16]


> dreamse   (10.10.06 18:26) [13]

>  а если существует но скрыта ?


В Screen.Forms все формы, созданные любым способом
(в т.ч. и невидимые).

--
Regards, LVT.


 
Ketmar ©   (2006-10-10 20:31) [17]

вот мне интересно, что понималось в [3] под "просто проверить". без переменной. %-)


 
Leonid Troyanovsky ©   (2006-10-10 20:58) [18]


> dreamse   (09.10.06 22:25)  

> Динамически создаёться форма, как проверить что она уже
> создала или нет ?


Допустим, что некоторая форма нуждается в ссылке на
некоторую другую форму. И нужно знать валидность
этой ссылки, при условии, что другая форма может быть
разрушена в произвольный момент.

Так как любая форма есть компонент, то для обеспечения
валидности ссылки можно воспользоваться механизмом Notification.


type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   FForm: TForm; // отслеживаемая ссылка
 public
   { Public declarations }
   procedure Notification(AComponent: TComponent; oper: TOperation); override;
 end;

implementation

{$R *.DFM}

uses
 unit2;

procedure TForm1.Notification;
begin
 inherited;
 if (oper = opRemove) and (AComponent = FForm) then
    FForm := nil; // обниляем ссылку
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 FForm := Form2; {например, форма, разрушаемая при закрытии}
 Form2.Show;
end;


Ну, а любые действия с ссылкой FForm должны предваряться
if Assigned(FForm) then .. , {поля TForm1 инициируются nil автоматом}.

--
Regards, LVT.


 
KSergey ©   (2006-10-11 09:23) [19]

> Ketmar ©   (10.10.06 19:38) [15]
> >[14] MetalFan(c) 10-Oct-2006, 19:35
> >а формы не лучше ль Release"ом "убивать"?
> это если из обработчиков. а так -- можно и Free(). %-)

Уточню - из собственных обработчиков формы.


 
TrainerOfDolphins ©   (2006-10-11 12:58) [20]


> вот мне интересно, что понималось в [3] под "просто проверить".
>  без переменной. %-)

Понималось, вероятно, что можно завести некую логическую переменную в которой хранить Да, если форма была создана и Нет, если не была создана или была уничтожена... Так вот, чтобы без этого...
И что Вы, в самом деле, всё на мётлы намекаете? Человек задал нормальный для новичка вопрос... :)


 
Плохиш ©   (2006-10-11 13:06) [21]


> Да, если форма была создана и Нет, если не была создана
> или была уничтожена... Так вот, чтобы без этого


 for i:=0 to Screen.FormCount-1 do
   if Screen.Forms[I] is TSuperMyForm then <Форма уже показана>


 
Ketmar ©   (2006-10-11 17:46) [22]

>[20] TrainerOfDolphins(c) 11-Oct-2006, 12:58
>И что Вы, в самом деле, всё на мётлы намекаете? Человек
>задал нормальный для новичка вопрос... :)
ну так ответили же. %-)



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

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

Наверх





Память: 0.5 MB
Время: 0.04 c
1-1158435217
TStas
2006-09-16 23:33
2006.10.29
Можно ли как-то программно записать файлы на CD?


2-1161007194
dim2001
2006-10-16 17:59
2006.10.29
stringgrid фокус ввода


2-1160727006
horse
2006-10-13 12:10
2006.10.29
System error code 1400. Недопустимый дескриптор окна.


15-1160470659
Cash
2006-10-10 12:57
2006.10.29
Новое слово в креплении кулеров!


15-1160282011
Reporter
2006-10-08 08:33
2006.10.29
Посоветуйте генератор отчетов





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