Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать, существует ли компонент?


Страницы:   1 2

Вася ©   (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;


и во второй проверке (если она может быть отдельно) соответственно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо