Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связка TabControl и других элементов 
:(
    Опции темы
Rennigth
Дата 20.2.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(MetalFan @  6.1.2008,  10:13 Найти цитируемый пост)
конечно имеет, если понимать, зачем это делаешь.
в вышеупомянутом случае можем получить утечку памяти... когда TTabSheet "закрывается", то "лежащие" на нем контролы, у которых владелец Application, продолжут себе жить...

так-так-так, подождите... если парент уничтожается то и все его дети тоже вроде уничтожаются...  smile  ща глянем полутше, может я ошибаюсь.

Добавлено через 8 минут и 17 секунд
Цитата(Rennigth @  20.2.2008,  13:32 Найти цитируемый пост)
может я ошибаюсь

Не, не ошибаюсь smile 
Код

destructor TWinControl.Destroy;
var
  I: Integer;
  Instance: TControl;
begin
  Destroying;
  if FDockSite then
  begin
    FDockSite := False;
    RegisterDockSite(Self, False);
  end;
  FDockManager := nil;
  FDockClients.Free;
  if Parent <> nil then RemoveFocus(True);
  if FHandle <> 0 then DestroyWindowHandle;
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy;
    I := ControlCount;
  end;
  FBrush.Free;
{$IFDEF LINUX}
  if FObjectInstance <> nil then WinUtils.FreeObjectInstance(FObjectInstance);
{$ENDIF}
{$IFDEF MSWINDOWS}
  if FObjectInstance <> nil then Classes.FreeObjectInstance(FObjectInstance);
{$ENDIF}
  FPadding.Free;
  inherited Destroy;
end;


Ну это конечно только если есть парент.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MetalFan
Дата 20.2.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Rennigth @  20.2.2008,  13:32 Найти цитируемый пост)
если парент уничтожается то и все его дети тоже вроде уничтожаются...  

не путай парента и овнера.
при уничтожении овнера все принадлежащие ему компоненты будут автоматически уничтожены.
парент же служит контерйнером, в котором отображается контрол.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Rennigth
Дата 20.2.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(MetalFan @  20.2.2008,  15:31 Найти цитируемый пост)
не путай парента и овнера.

А я и не путаю smile
Цитата(MetalFan @  20.2.2008,  15:31 Найти цитируемый пост)
при уничтожении овнера все принадлежащие ему компоненты будут автоматически уничтожены.

Тоже можно сказать и про парента. Я имею ввиду что Owner имеет список Components, Parent список Controls, и эти списки косвенно взаимосвязаны.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MetalFan
Дата 20.2.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



хм... хотя я не прав. посмотрел ДНК.
Код

...
procedure TControl.SetParent(AParent: TWinControl);
begin
  if FParent <> AParent then
  begin
    if AParent = Self then
      raise EInvalidOperation.CreateRes(@SControlParentSetToSelf);
    if FParent <> nil then
      FParent.RemoveControl(Self);
    if AParent <> nil then
    begin
      AParent.InsertControl(Self); ///// <--------------------------
      UpdateAnchorRules;
    end;
  end;
end;
....
procedure TWinControl.InsertControl(AControl: TControl);
var
  Item: TControlListItem;
begin
...
  Insert(AControl);
...
end;
...
procedure TWinControl.Insert(AControl: TControl);
begin
  if AControl <> nil then
  begin
    if AControl is TWinControl then
    begin
      ListAdd(FWinControls, AControl);
      ListAdd(FTabList, AControl);
    end else
      ListAdd(FControls, AControl);
    AControl.FParent := Self;
  end;
end;


в итоге получается, что при установке парента отвечать за жизнь элемента будет и парент и овнер  smile

Добавлено через 1 минуту и 59 секунд
Цитата(Rennigth @  20.2.2008,  15:35 Найти цитируемый пост)
А я и не путаю smile

ага, это я путал) сорь)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Esperito
Дата 20.2.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 1
Всего: 3



MetalFan, а где в этом коде виден Owner?
PM MAIL   Вверх
Rennigth
Дата 20.2.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Esperito @  20.2.2008,  17:04 Найти цитируемый пост)
MetalFan, а где в этом коде виден Owner? 

В этом коде Owner и не виден. С ним и так все понятно. В этом коде видно что и Parent тоже контролирует свих детей.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Esperito
Дата 20.2.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 1
Всего: 3



Цитата(Rennigth @ 20.2.2008,  17:56)
В этом коде Owner и не виден. С ним и так все понятно. В этом коде видно что и Parent тоже контролирует свих детей.

Ну да, содержит ссылки в своём массиве. Но освобождением памяти ведь не занимается.
PM MAIL   Вверх
Rennigth
Дата 20.2.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Esperito @  20.2.2008,  20:20 Найти цитируемый пост)
Ну да, содержит ссылки в своём массиве. Но освобождением памяти ведь не занимается. 

Освобождение происходит в дестрое. Я уже приводил код в этом топике.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Esperito
Дата 21.2.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 1
Всего: 3



Цитата(Rennigth @ 20.2.2008,  21:06)
Освобождение происходит в дестрое. Я уже приводил код в этом топике.

Ааа, прошу прощения. Пропустил smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.