Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Вася   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.066 c
15-1269552602
Юрий
2010-03-26 00:30
2010.08.27
С днем рождения ! 26 марта 2010 пятница


2-1272603366
oleg1963lora
2010-04-30 08:56
2010.08.27
А что у нас сегодня в DataSet e?


15-1267488778
Дмитрий
2010-03-02 03:12
2010.08.27
игры на delphi


15-1263990046
fford
2010-01-20 15:20
2010.08.27
что меньше нагружает сервер


2-1269350538
Nik
2010-03-23 16:22
2010.08.27
DevExpress VerticalGrid cxMemo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский