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

Вниз

Динамическое создание компонент   Найти похожие ветки 

 
Garfunkel   (2004-11-01 02:15) [0]

Если я создаю динамически компоненту (допустим кнопку) вот так:

var
 MyButton:TButton;
begin
 MyButton:=TButton.Create(Self);
 MyButton.Left:=100;
 MyButton.Top:=100;
 MyButton.Parent:=Form1;
end;

освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально. И еще вопрос что значит Self? А Owner? Что лучше, какая разница? И так и так работает.


 
©   (2004-11-01 07:23) [1]

>освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально.

Да освободятся. Не надо специально уничтожать. Более того будет
ошибка если это сделать. А по второй части лучше почитать книжку.


 
©   (2004-11-01 07:51) [2]

Да и лучше использовать такую конструкцию
begin
with TButton.Create(Self) Do begin
Left:=100;
Top:=100;
Parent:=Self;//Я думаю видно что такое Self
Caption:=Owner.Name;//и Owner
end;
end;


 
Reindeer Moss Eater ©   (2004-11-01 08:30) [3]

Более того будет
ошибка если это сделать.


С какого перепугу будет ошибка?


 
©   (2004-11-01 08:59) [4]

>С какого перепугу будет ошибка?
1.Лишнее действие.
2.Для некоторых случаев вызовит исключение.


 
Reindeer Moss Eater ©   (2004-11-01 09:06) [5]

Бред


 
©   (2004-11-01 09:21) [6]

>Бред
Что бред?


 
Reindeer Moss Eater ©   (2004-11-01 09:22) [7]

Более того будет
ошибка если это сделать.


Вот это и есть бред.


 
©   (2004-11-01 09:46) [8]

OK !
Во всех случаях
необходимо в деструкторе компанента(класса)
предусмватривать inherited
...............
destructor Destroy; override;
.................

destructor TMyComp.Destroy;
begin
inherited;//вот это обязательно и если нет что произойдет в реализации(в используемой программе) при уничтожении компанента
r1.Free;//что то
r2:=nil;//уничтожаем
end;

или же можно так

destructor TMyComp.Destroy;
begin
r1.Free;
r2:=nil;
end;


 
Reindeer Moss Eater ©   (2004-11-01 09:57) [9]

Лучше лоб потрогай.


 
KSergey ©   (2004-11-01 10:17) [10]

> r1.Free;//что то
> r2:=nil;//уничтожаем

Или теряем ссылку во второй строке???

> [8] R ©   (01.11.04 09:46)
> OK !
> Во всех случаях
> необходимо в деструкторе компанента(класса)

А это тут вообще при чем??? Как это к вопросу относится??

> [4] R ©   (01.11.04 08:59)
> >С какого перепугу будет ошибка?
> 1.Лишнее действие.
> 2.Для некоторых случаев вызовит исключение.

Лишнее действие - не есть ошибка периода выполнения.
По второму пункту - можно поподробнее? В каких случаях?

Автору
Читать тут:
http://www.delphikingdom.com/helloworld/runtime_comp.htm


 
©   (2004-11-01 11:19) [11]

>Reindeer Moss Eater ©  
>Лучше лоб потрогай.
Когда не хотят разобраться кидают такие и подобные фразы.
Я могу быть не прав но это не означает что необходимо
играть словами(бред и т.п.) без подтверждения их конкретными
примерами или объяснениями.

>KSergey ©  
>Или теряем ссылку во второй строке???
Вы меня не поняли.
r1 и r2- разные объекты.
r2-например дин. массив используемый
в компаненте, в деструкторе его уничтожаем.
Привел я их для примера. Собственно зря привел.
Разобраться же я хотел - inherited необходим во всех случаях
в деструкторе или же нет
, после этого я отвечу на второй комментарий, а именно
>А это тут вообще при чем??? Как это к вопросу относится??

и

>По второму пункту - можно поподробнее? В каких случаях?


 
Reindeer Moss Eater ©   (2004-11-01 11:44) [12]

Ты все же лоб потрогай.
И пойми разницу между компонентами (наследниками TComponent) и просто экземплярами классов - членами других классов.

Автор вопроса ведет речь про первые.


 
KSergey ©   (2004-11-01 11:57) [13]

> [11] R ©   (01.11.04 11:19)
> >KSergey ©  
> >Или теряем ссылку во второй строке???
> Вы меня не поняли.
> r2-например дин. массив используемый

Телепаты, знаете ли, в отпуске...

> Разобраться же я хотел - inherited необходим во всех случаях
> в деструкторе или же нет, после этого я отвечу на второй
> комментарий

А если разобраться - так может знаки вопросиков поставить хотя бы? ;)
По поводу нужности.
Ну что будет если не поставить - догадаетесь сами.
По поводу практического применения, мое мнение: можно, конечно, разобраться в каком конкретном случае оно не обязательно (например, реализация в предке пуста), однако по-моему это слишком геморойно. Проще вызвать всегда - и дело с концом ;) (если оно в предке вообще есть, конечно)



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

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

Наверх




Память: 0.5 MB
Время: 0.048 c
14-1098912027
AD_infiniTUM
2004-10-28 01:20
2004.11.14
MemProof


14-1098600944
Stef
2004-10-24 10:55
2004.11.14
Какое то маленькое окошко со списком имен


1-1099045919
А_н_о_н_и_м
2004-10-29 14:31
2004.11.14
"Свой" OpenDialog


3-1097581615
Term
2004-10-12 15:46
2004.11.14
ERwin как подключиться к базе MSSQL2000


14-1099068698
aga
2004-10-29 20:51
2004.11.14
как можно найти ключ?