Форум: "Начинающим";
Текущий архив: 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.064 c