Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

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

 
Вася   (2010-03-17 10:54) [0]

Уважаемые Мастера, просвятите идиота.

Есть код:

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:02) [1]

никаким.
нет возможности по ссылке узнать есть ли на "том конце" ссылки валидный объект.
кроме конечно логики программиста, который должен за этим следить. и например, т.к. ты знаешь, что у тебя 2 ссылки ссылаются на один объект писать

 if Assigned(Panel)
   then begin
     Panel.Free;
     Panel:=nil
     Panel1:=nil
   end;


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


 
sniknik ©   (2010-03-17 11:05) [2]

а вообще, т.к. у объекта есть парент, то можно не парится с его освобождением... он освободится сам когда будет уничтожена парент форма.


 
Юрий Зотов ©   (2010-03-17 11:14) [3]

> Вася   (17.03.10 10:54)

У меня в записной книжке есть адрес: г.X, ул.Y, д.Z, кв.D.
Известно, что когда-то по этому адресу жил Сидоров Сидор Сидорыч.

Зная только этот адрес и больше ничего, предлагается определить, живет ли он там сейчас. Как Вы думаете, это возможно?

Он мог переехать, умереть и т.п. - но от этого адрес в моей записной книжке от этого не изменился и не исчез, так ведь?

Ваш вопрос - ровно на ту же самую тему. Есть переменная, которая хранит адрес чего-то. Потом это "чего-то" исчезло - а разве значение переменной от этого изменилось? Его же никто не менял, с чего ему меняться? Оно по-прежнему хранит тот же самый адрес, только по этому адресу больше никто не живет - поэтому при попытке обратиться к нему получаем AV.


 
Вася   (2010-03-17 11:21) [4]

Спасибо, господа. Буду как-то выкручиваться.


 
Вася   (2010-03-17 11:23) [5]


> а вообще, т.к. у объекта есть парент, то можно не парится
> с его освобождением... он освободится сам когда будет уничтожена
> парент форма.

Тоже верно...


 
Плохиш ©   (2010-03-17 12:12) [6]


> var
>  Form1: TForm1;
>  Panel, Panel1: TPanel;
>

Убивать за такой стиль идиота.


 
Вася   (2010-03-17 13:00) [7]


> Убивать за такой стиль идиота.

А за какой стиль не убивать? Научите, как верно реализовать такую задачу.


 
Игорь Шевченко ©   (2010-03-17 13:13) [8]


> Т.о. имеем два указателя (Panel и Panel1) на один и тот
> же объект.
>
> Каким образом узнать, существует ли объект, на который указывает
> Panel1? Потому как сейчас я имею AV на Palel1.Free.


Убивать. Медленно и с наслаждением.


 
Вася   (2010-03-17 13:35) [9]


> Убивать. Медленно и с наслаждением.

Не вопрос, но только после того, как меня убъёт Плохиш.


 
oleg1963lora   (2010-03-17 13:36) [10]


> А за какой стиль не убивать? Научите, как верно реализовать
> такую задачу.

Могу дать мылом несколько своих примеров(простейший, простой и посложнее)
Написано в Code Gear, но будет работать и с Д6, Д7.


 
Leonid Troyanovsky ©   (2010-03-17 13:42) [11]


> Вася   (17.03.10 13:00) [7]

http://podgoretsky.com/OtherParts/DM/BadWill.aspx
http://podgoretsky.com/OtherParts/DM/BadTips.aspx

Там, на сайте АП есть приличная библиотека.

Ну, а если кратко, то контролы д.б. быть полями формы.
В случае, если некто, получивший ссылку на это поле
имеет возможность  разрушить оный контрол, необходимо
использовать механизм Notification, RTFM.

--
Regards, LVT.


 
Вася   (2010-03-17 13:49) [12]

Благодарю, буду учить матчасть.


 
Вася   (2010-03-17 14:05) [13]


> Могу дать мылом несколько своих примеров

Спасибо, с удовольствием посмотрю. Если не сложно, выложите Ваши примеры одним архивом на какой-нибудь Яндекс.Файлы.


 
Leonid Troyanovsky ©   (2010-03-17 14:15) [14]


> Вася   (17.03.10 14:05) [13]

> Спасибо, с удовольствием посмотрю.

Если они хорошие, то можно было бы и сюда запостить,
для пользы будущих поколений.

А если есть сомнения, то лучше смотреть на, скажем,
примеры by Peter Below, есть на сайте АП.

--
Regards, LVT.


 
Вася   (2010-03-17 14:29) [15]


> есть на сайте АП

Простите, а что такое "сайт АП"?


 
Anatoly Podgoretsky ©   (2010-03-17 14:43) [16]

> Вася  (17.03.2010 14:29:15)  [15]

Вася героев надо знать в лицо


 
oleg1963lora   (2010-03-17 14:44) [17]


>  Если не сложно, выложите Ваши примеры одним архивом

Выложил. Вот ссылка
http://narod.ru/disk/18838758000/CompD709.ZIP.html


 
Игорь Шевченко ©   (2010-03-17 14:51) [18]

Leonid Troyanovsky ©   (17.03.10 14:15) [14]


> Если они хорошие, то можно было бы и сюда запостить,
> для пользы будущих поколений.


Только не это. Мне страшно за будущее поколение.


 
Leonid Troyanovsky ©   (2010-03-17 15:49) [19]


> oleg1963lora   (17.03.10 14:44) [17]

> Выложил. Вот ссылка

В печку ее! [ФФ]

> Вася   (17.03.10 14:29) [15]

> Простите, а что такое "сайт АП"?

Это сайт by
http://podgoretsky.com/OtherParts/DM/AP.aspx

Чего, наши ссылки не смотрим?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-03-17 15:56) [20]


> Игорь Шевченко ©   (17.03.10 14:51) [18]

> Только не это.

Ну, я предполагал, что мерилом будет Peter Below.

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-03-17 16:10) [21]


> Ну, я предполагал, что мерилом будет Peter Below.


Peter Below - это голова. Только он к выложенным компонентам к счастью не имеет никакого отношения :)


 
Вася   (2010-03-18 16:31) [22]


> Выложил. Вот ссылка
> http://narod.ru/disk/18838758000/CompD709.ZIP.html

Спасибо, смотрю.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.076 c
2-1274505496
_Alis_
2010-05-22 09:18
2010.08.27
несколько GroupBox-ов


15-1267350874
Дмитрий С
2010-02-28 12:54
2010.08.27
Можно ли внедрить dll в свой проект?


8-1204196768
Nikki
2008-02-28 14:06
2010.08.27
Как вывести картинку из буфера в DirectDraw?


4-1233081707
avi9526
2009-01-27 21:41
2010.08.27
Как получить доступ к скрытому за окном изображению?


15-1271655350
Валерий М.
2010-04-19 09:35
2010.08.27
Принтер и логи