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

Вниз

Parent и Owner   Найти похожие ветки 

 
Ega23 ©   (2007-10-24 15:01) [0]

Это что же получается: я создал фрейм, Owner - nil, потом ему назначил в качестве Parent форму, потом эту форму убил. фрейм, получается, тоже погиб???


 
Palladin ©   (2007-10-24 15:04) [1]

нет... с чего бы...


 
Германн ©   (2007-10-24 15:04) [2]


> фрейм, получается, тоже погиб???

С чего бы ему погибать?


 
Сергей М. ©   (2007-10-24 15:09) [3]

"Погиб" - это когда Owner <> nil и ты убил этого Owner"а.

А в сабже фрейм просто останется бесхозным, неприкаянным)


 
Leonid Troyanovsky ©   (2007-10-24 15:11) [4]


> Ega23 ©   (24.10.07 15:01)  

> ему назначил в качестве Parent форму, потом эту форму убил.
>  фрейм, получается, тоже погиб???

Конечно, это обязанность Parent.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-10-24 15:13) [5]

т.е., если этого не хочешь,
предварительно сделай ему Parent := nil

--
Regards, LVT.


 
Сергей М. ©   (2007-10-24 15:26) [6]


> Leonid Troyanovsky ©   (24.10.07 15:11) [4]


> Конечно, это обязанность Parent.


Обязанность уничтожать фрейм как VCL-объект ?
Хм ..


 
Ega23 ©   (2007-10-24 15:28) [7]


> т.е., если этого не хочешь,
> предварительно сделай ему Parent := nil
>


Ага, это я уже понял. Просто я всё жизнь считал, что если Owner=nil, то Parent в убийстве никакой роли не играет...
А оно вон оно как, оказывается...


 
Palladin ©   (2007-10-24 15:33) [8]


> Leonid Troyanovsky ©   (24.10.07 15:11) [4]

Это обязанность Owner, обязанность Parent предоставить кусочек монитора (если он сам конечно имеет кусочек монитора), где контрол будет жить полноценной жизнью, а не таиться в черных темных пещерах оперативки...


 
Сергей М. ©   (2007-10-24 15:36) [9]


> Ega23 ©   (24.10.07 15:28) [7]


Интересно, на основании чего ты пришел к такому умозаключению ?

Ты перекрывал деструктор фрейма или обрабатывал его OnDestroy и стал очевидцем вызова деструктора или возникновения события при "убийстве родителя" ?


 
Palladin ©   (2007-10-24 15:37) [10]


> Ega23 ©   (24.10.07 15:28) [7]

ну так ты совершенно верно считал...


 
KSergey ©   (2007-10-24 15:38) [11]

Интересно: подерутся "голубые" или нет?


 
Leonid Troyanovsky ©   (2007-10-24 15:41) [12]


> Сергей М. ©   (24.10.07 15:36) [9]

See Control.pas: destructor TWinControl.Destroy

--
Regards, LVT.


 
Ega23 ©   (2007-10-24 15:44) [13]


> Интересно, на основании чего ты пришел к такому умозаключению
> ?
>
> Ты перекрывал деструктор фрейма или обрабатывал его OnDestroy
> и стал очевидцем вызова деструктора или возникновения события
> при "убийстве родителя" ?
>



unit uMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, uTreeViewFrame, uDBTreeViewFrame, StdCtrls, DB, ADODB;

type
 TFMain = class(TForm)
   btnDBTreeViewFrame: TButton;
   btnConnect: TButton;
   ADOConnMain: TADOConnection;
   adsClasses: TADODataSet;
   dsClasses: TDataSource;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure btnConnectClick(Sender: TObject);
   procedure btnDBTreeViewFrameClick(Sender: TObject);
 private
   { Private declarations }
 public
   DBTreeViewFrame : TDBTreeViewFrame;
 end;

var
 FMain: TFMain;

implementation

uses uModalForm;

{$R *.dfm}

//*****************************************************************************

procedure TFMain.FormCreate(Sender: TObject);
begin
 DBTreeViewFrame := TDBTreeViewFrame.Create(nil);
end;

//*****************************************************************************

procedure TFMain.FormDestroy(Sender: TObject);
begin
 TreeViewFrame.Free;
end;

//*****************************************************************************

procedure TFMain.btnConnectClick(Sender: TObject);
begin
 ADOConnMain.Connected := True;
 adsClasses.Open;
end;

//*****************************************************************************

procedure TFMain.btnDBTreeViewFrameClick(Sender: TObject);
begin
 Application.CreateForm(TModalForm, ModalForm);
 try
   DBTreeViewFrame.DataSource := dsClasses;
   ModalForm.InitFrame(DBTreeViewFrame);
   ModalForm.ShowModal;
 finally
   DBTreeViewFrame.Parent := nil;  // <-
   ModalForm.Free;
 end;
end;

//*****************************************************************************

end.


Если Parent фрейма не присвоить nil, то я попадаю на деструктор TDBTreeView, которой лежит на данном фрейме.


 
Сергей М. ©   (2007-10-24 15:46) [14]


> Leonid Troyanovsky ©   (24.10.07 15:41) [12]


Угу, вижу.

Ты был прав.


 
Palladin ©   (2007-10-24 15:48) [15]

нет... не подерутся... проверил... освобождается...
плохо...


 
Сергей М. ©   (2007-10-24 15:49) [16]


> Ega23 ©   (24.10.07 15:44) [13]


Виноват-с)... Это меня заклинило на ParentWindow


 
Leonid Troyanovsky ©   (2007-10-24 15:49) [17]


> Palladin ©   (24.10.07 15:37) [10]

> ну так ты совершенно верно считал...

RTFM: Delphi help. TControl.Parent. Note

--
Regards, LVT.



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

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

Наверх




Память: 0.51 MB
Время: 0.022 c
2-1193124346
QAlexey
2007-10-23 11:25
2007.11.18
TPopupMenu


15-1191913519
Ega23
2007-10-09 11:05
2007.11.18
В чём прикол class function?


2-1192870852
apic
2007-10-20 13:00
2007.11.18
Free vs Destroy


1-1188223446
SamProf
2007-08-27 18:04
2007.11.18
Как переопределить правильно конструктор?


1-1188385713
Андрей Пл
2007-08-29 15:08
2007.11.18
Метод Terminate в дополнительного потока