Форум: "Начинающим";
Текущий архив: 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