Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.04 c
2-1161018380
Kolan
2006-10-16 21:06
2006.10.29
Как передать объект в виде Integer, а затем это число ..


15-1159886191
Some
2006-10-03 18:36
2006.10.29
Правильно ли я поступил


15-1160219233
MikePetrichenko
2006-10-07 15:07
2006.10.29
Наша медецина


15-1160499614
ArtemESC
2006-10-10 21:00
2006.10.29
Си


2-1160736800
tyo
2006-10-13 14:53
2006.10.29
размер шрифта