![]() |
| ||
|
|
Новости |
Поиск |
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.
Вася (2010-03-18 16:31:00) [1]
> Выложил. Вот ссылка
> http://narod.ru/disk/18838758000/CompD709.ZIP.html
Спасибо, смотрю.
Игорь Шевченко (2010-03-17 16:10:00) [2]
> Ну, я предполагал, что мерилом будет Peter Below.
Peter Below - это голова. Только он к выложенным компонентам к счастью не имеет никакого отношения :)
Leonid Troyanovsky (2010-03-17 15:56:00) [3]
> Игорь Шевченко © (17.03.10 14:51) [18]
> Только не это.
Ну, я предполагал, что мерилом будет Peter Below.
--
Regards, LVT.
Leonid Troyanovsky (2010-03-17 15:49:00) [4]
> oleg1963lora (17.03.10 14:44) [17]
> Выложил. Вот ссылка
В печку ее! [ФФ]
> Вася (17.03.10 14:29) [15]
> Простите, а что такое "сайт АП"?
Это сайт by
http://podgoretsky.com/OtherParts/DM/AP.aspx
Чего, наши ссылки не смотрим?
--
Regards, LVT.
Игорь Шевченко (2010-03-17 14:51:00) [5]Leonid Troyanovsky © (17.03.10 14:15) [14]
> Если они хорошие, то можно было бы и сюда запостить,
> для пользы будущих поколений.
Только не это. Мне страшно за будущее поколение.
oleg1963lora (2010-03-17 14:44:00) [6]
> Если не сложно, выложите Ваши примеры одним архивом
Выложил. Вот ссылка
http://narod.ru/disk/18838758000/CompD709.ZIP.html
Anatoly Podgoretsky (2010-03-17 14:43:00) [7]> Вася (17.03.2010 14:29:15) [15]
Вася героев надо знать в лицо
Вася (2010-03-17 14:29:00) [8]
> есть на сайте АП
Простите, а что такое "сайт АП"?
Leonid Troyanovsky (2010-03-17 14:15:00) [9]
> Вася (17.03.10 14:05) [13]
> Спасибо, с удовольствием посмотрю.
Если они хорошие, то можно было бы и сюда запостить,
для пользы будущих поколений.
А если есть сомнения, то лучше смотреть на, скажем,
примеры by Peter Below, есть на сайте АП.
--
Regards, LVT.
Вася (2010-03-17 14:05:00) [10]
> Могу дать мылом несколько своих примеров
Спасибо, с удовольствием посмотрю. Если не сложно, выложите Ваши примеры одним архивом на какой-нибудь Яндекс.Файлы.
Вася (2010-03-17 13:49:00) [11]Благодарю, буду учить матчасть.
Leonid Troyanovsky (2010-03-17 13:42:00) [12]
> Вася (17.03.10 13:00) [7]
http://podgoretsky.com/OtherParts/DM/BadWill.aspx
http://podgoretsky.com/OtherParts/DM/BadTips.aspx
Там, на сайте АП есть приличная библиотека.
Ну, а если кратко, то контролы д.б. быть полями формы.
В случае, если некто, получивший ссылку на это поле
имеет возможность разрушить оный контрол, необходимо
использовать механизм Notification, RTFM.
--
Regards, LVT.
oleg1963lora (2010-03-17 13:36:00) [13]
> А за какой стиль не убивать? Научите, как верно реализовать
> такую задачу.
Могу дать мылом несколько своих примеров(простейший, простой и посложнее)
Написано в Code Gear, но будет работать и с Д6, Д7.
Вася (2010-03-17 13:35:00) [14]
> Убивать. Медленно и с наслаждением.
Не вопрос, но только после того, как меня убъёт Плохиш.
Игорь Шевченко (2010-03-17 13:13:00) [15]
> Т.о. имеем два указателя (Panel и Panel1) на один и тот
> же объект.
>
> Каким образом узнать, существует ли объект, на который указывает
> Panel1? Потому как сейчас я имею AV на Palel1.Free.
Убивать. Медленно и с наслаждением.
Вася (2010-03-17 13:00:00) [16]
> Убивать за такой стиль идиота.
А за какой стиль не убивать? Научите, как верно реализовать такую задачу.
Плохиш (2010-03-17 12:12:00) [17]
> var
> Form1: TForm1;
> Panel, Panel1: TPanel;
>
Убивать за такой стиль идиота.
Вася (2010-03-17 11:23:00) [18]
> а вообще, т.к. у объекта есть парент, то можно не парится
> с его освобождением... он освободится сам когда будет уничтожена
> парент форма.
Тоже верно...
Вася (2010-03-17 11:21:00) [19]Спасибо, господа. Буду как-то выкручиваться.
Юрий Зотов (2010-03-17 11:14:00) [20]> Вася (17.03.10 10:54)
У меня в записной книжке есть адрес: г.X, ул.Y, д.Z, кв.D.
Известно, что когда-то по этому адресу жил Сидоров Сидор Сидорыч.
Зная только этот адрес и больше ничего, предлагается определить, живет ли он там сейчас. Как Вы думаете, это возможно?
Он мог переехать, умереть и т.п. - но от этого адрес в моей записной книжке от этого не изменился и не исчез, так ведь?
Ваш вопрос - ровно на ту же самую тему. Есть переменная, которая хранит адрес чего-то. Потом это "чего-то" исчезло - а разве значение переменной от этого изменилось? Его же никто не менял, с чего ему меняться? Оно по-прежнему хранит тот же самый адрес, только по этому адресу больше никто не живет - поэтому при попытке обратиться к нему получаем AV.