![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание формы динамически [D7, WinXP]
dreamse © (2006-10-09 22:25:00)Как проверить что форма уже создана ?
Динамически создаёться форма, как проверить что она уже создала или нет ?
Код Form = nil выдаёт ошибку
Ketmar (2006-10-11 17:46:00) [1]>[20] TrainerOfDolphins(c) 11-Oct-2006, 12:58
>И что Вы, в самом деле, всё на мётлы намекаете? Человек
>задал нормальный для новичка вопрос... :)
ну так ответили же. %-)
Плохиш (2006-10-11 13:06:00) [2]
> Да, если форма была создана и Нет, если не была создана
> или была уничтожена... Так вот, чтобы без этого
for i:=0 to Screen.FormCount-1 do
if Screen.Forms[I] is TSuperMyForm then <Форма уже показана>
TrainerOfDolphins (2006-10-11 12:58:00) [3]
> вот мне интересно, что понималось в [3] под "просто проверить".
> без переменной. %-)
Понималось, вероятно, что можно завести некую логическую переменную в которой хранить Да, если форма была создана и Нет, если не была создана или была уничтожена... Так вот, чтобы без этого...
И что Вы, в самом деле, всё на мётлы намекаете? Человек задал нормальный для новичка вопрос... :)
KSergey (2006-10-11 09:23:00) [4]> Ketmar © (10.10.06 19:38) [15]
> >[14] MetalFan(c) 10-Oct-2006, 19:35
> >а формы не лучше ль Release'ом "убивать"?
> это если из обработчиков. а так -- можно и Free(). %-)
Уточню - из собственныхобработчиков формы.
Leonid Troyanovsky (2006-10-10 20:58:00) [5]
> 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.
Ketmar (2006-10-10 20:31:00) [6]вот мне интересно, что понималось в [3] под "просто проверить". без переменной. %-)
Leonid Troyanovsky (2006-10-10 20:29:00) [7]
> dreamse (10.10.06 18:26) [13]
> а если существует но скрыта ?
В Screen.Forms все формы, созданные любым способом
(в т.ч. и невидимые).
--
Regards, LVT.
Ketmar (2006-10-10 19:38:00) [8]>[14] MetalFan(c) 10-Oct-2006, 19:35
>а формы не лучше ль Release'ом "убивать"?
это если из обработчиков. а так -- можно и Free(). %-)
MetalFan (2006-10-10 19:35:00) [9]а формы не лучше ль Release'ом "убивать"?
dreamse (2006-10-10 18:26:00) [10]> Leonid Troyanovsky © (10.10.06 14:06) [12]
То же вариант. Но когда форма видна на экране как я понял, а если существует но скрыта ?
Leonid Troyanovsky (2006-10-10 14:06:00) [11]
> dreamse (09.10.06 22:25)
> Как проверить что форма уже создана ?
http://www.rsdn.ru/Forum/?mid=382117
--
Regards, LVT.
Kolan (2006-10-09 22:49:00) [12]
> free
Это и есть уничтожение.
> FreeAndNil
просто переменную об nilит
dreamse (2006-10-09 22:48:00) [13]Разобрался ! Всем спасибо
Проверка : Assigned(fLogin),
+ обязательно уничтожение формы не free а : FreeAndNil(FLogin);
Ketmar (2006-10-09 22:39:00) [14]ну и -- лучше написать явно: var fLogin: TFrmLogin = nil;
Ketmar (2006-10-09 22:39:00) [15]FreeAndNil(fLogin)
проверка -- if fLogin <> nil (или not Assigned(fLogin), что в данном случае понятней %-)
dreamse (2006-10-09 22:36:00) [16]var
FLogin:TFrmLogin;
Глобальная
dreamse (2006-10-09 22:35:00) [17]Код :
var
FLogin:TFrmLogin;
begin
// Проверка ... КАК ?
FLogin := TFrmLogin.Create(self);
if FLogin.ShowModal = mrOk then
begin
// .....
end;
FLogin.Free;
Торможу что то :(
Ketmar (2006-10-09 22:35:00) [18]я всегда говорил, что переменные выдумали идиоты. описывай их, присваивай чего-то... дурь. то ли дело метла -- вжик да вжик, никаких проблем...
Джо (2006-10-09 22:33:00) [19]> [3] dreamse (09.10.06 22:30)
> Просто как то муторно переменную какую то ставить на создание
> на удаление ... порево какое то
Прочитай, если не сложно, еще раз 1-е предложение в [2].
dreamse (2006-10-09 22:30:00) [20]Просто как то муторно переменную какую то ставить на создание на удаление ... порево какое то
Нельзя просто проверить чтоли ?