![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, существует ли компонент?
Вася © (2010-03-17 10:54:00)Уважаемые Мастера, просвятите идиота.
Есть код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
bCreate: TButton;
bDestroy: TButton;
procedure bCreateClick(Sender: TObject);
procedure bDestroyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Panel, Panel1: TPanel;
implementation
{$R *.dfm}
procedure TForm1.bCreateClick(Sender: TObject);
begin
Panel:=TPanel.Create(self);
with Panel do begin
Parent:=Self;
left:=10;
Top:=10;
Width:=20;
Height:=20;
Name:='MyPanel';
Color:=clBlack;
Visible:=true;
end;
Panel1:=Panel;
end;
procedure TForm1.bDestroyClick(Sender: TObject);
begin
if Assigned(Panel)
then begin
Panel.Free;
Panel:=nil
end;
if Assigned(Panel1)
then begin
Panel1.Free;
Panel1:=nil
end;
end;
end.
Т.о. имеем два указателя (Panel и Panel1) на один и тот же объект.
Каким образом узнать, существует ли объект, на который указывает Panel1? Потому как сейчас я имею AV на Palel1.Free.
sniknik (2010-03-17 11:05:00) [21]а вообще, т.к. у объекта есть парент, то можно не парится с его освобождением... он освободится сам когда будет уничтожена парент форма.
sniknik (2010-03-17 11:02:00) [22]никаким.
нет возможности по ссылке узнать есть ли на "том конце" ссылки валидный объект.
кроме конечно логики программиста, который должен за этим следить. и например, т.к. ты знаешь, что у тебя 2 ссылки ссылаются на один объект писать
if Assigned(Panel)
then begin
Panel.Free;
Panel:=nil
Panel1:=nil
end;
и во второй проверке (если она может быть отдельно) соответственно.