Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизПравильно ли так проверять, создан ли компонент? Найти похожие ветки
← →
ButtonExplorer (2006-02-15 16:37) [0]Нет ли подводных камней, всегда ли это будет работать?
procedure TForm1.FormCreate(Sender: TObject);
VAR B:TButton;
begin
B:=nil;
B:=TButton.Create(self);
B.Caption:="Test";
B.OnClick:=B_Cl;
B.Parent:=self;
B.Left:=20;B.Top:=20;
IF B<> nil then beep;
end;
Ещё можно tag присвоить и проверить.
А какие есть ещё способы?
← →
Jeer © (2006-02-15 16:42) [1]А значит ли, что до
IF B<> nil then beep;
не нужно было проверять на nil ?
Может все же через try ?
Способы чего ?
← →
ButtonExplorer (2006-02-15 16:58) [2]Это просто пример.
>Способы чего ?
Способы узнать, был ли создан компонент или ещё нет или уже уничтожен, т.е. текущее состояние узнать в произвольный момент в программе, что бы случайно не создать дубликат компонента. Меня просто смущает, что переменная B изначально не равна nil, и непонятно её поведение после уничтожения объекта (B.Free).
← →
McSimm © (2006-02-15 17:04) [3]
> Способы узнать, был ли создан компонент или ещё нет или
> уже уничтожен
вы создаете, вы уничтожаете - все в ваших руках.
Лучше, безусловно, построить логику так, чтобы не возникало ситуации, когда вы сами не знаете что там с объектом.
Но если так сделать нельзя по каким-то причинам -
можно инициализировать при старте и при уничтожении nil.
можно изолировать класс объекта и создавать экземпляр не напрямую, через вызов функции (см. пример Clipboard() в исходниках)
← →
Ega23 © (2006-02-15 17:05) [4]
> Меня просто смущает, что переменная B изначально не равна
> nil, и непонятно её поведение после уничтожения объекта
> (B.Free).
>
Ну и приравнивай её потом к nil
if Assigned(MyObject) then
begin
MyObject.Free;
MyObject:=nil
end;
← →
ButtonExplorer (2006-02-15 17:41) [5]>можно инициализировать при старте и при уничтожении nil
>Ну и приравнивай её потом к nil
Ясно.
← →
begin...end © (2006-02-15 18:21) [6]> Ega23 © (15.02.06 17:05) [4]
> if Assigned(MyObject) then
Это лишнее.
← →
Marser © (2006-02-15 18:39) [7]> if Assigned(MyObject) then
> begin
> MyObject.Free;
Assigned и Free, в принципе, делают одно и тоже. Только Free при положительном реззультате вызывает Destroy. Поэтому [6] begin...end ©
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c