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

Вниз

Добавление "детей" в DesignTime в свой компонент   Найти похожие ветки 

 
khas   (2005-02-02 12:36) [0]

Доброго времени суток.
Подскажите, плс, как решить следующую проблему:
Создаю компонент на основе TPanel, сверху кладу TScrollBox.

Tpp = class(TPanel)
 published
   sb : TScrollBox;
 public
   constructor Create(AOwner: TComponent); override;
 end;

constructor Tpp.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 sb := TScrollBox.Create(self);
 sb.Parent := self;
end;

Регистрирую компонент.
Теперь если в DesignTime добавить в ScrollBox панель, то она пропадает при запуске приложения.
Если я добавляю панель в RunTime, то все в порядке.


 
OnThink ©   (2005-02-02 16:01) [1]

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


 
Юрий Зотов ©   (2005-02-02 19:46) [2]

Панель, положенная на ScrollBox, не сохраняется в DFM (сделайте View As Text - увидите сами).

Посмотрите, как обеспечивают свое сохранение TMenuItem или TField (GetParentComponent, GetChildren и пр.).


 
khas   (2005-02-03 12:49) [3]

To Юрий Зотов
Проблема еще в том, что и сам ScrollBox не сохраняется в dfm.
Что надо сделать, чтобы сохранить ScrollBox и все компоненты, лежащие на нем, в dfm?


 
Юрий Зотов ©   (2005-02-03 14:19) [4]

> khas   (03.02.05 12:49) [3]

sb := TScrollBox.Create(AOwner) - и скроллбокс сразу же начинает сохраняться в DFM. Посмотрите форму, как текст - увидите.

Но если после этого снова посмотреть DFM, как форму, то увидим уже два скролбокса. Что и понятно - один создается кодом коструктора, второй - при чтении DFM. Вывод - сам скроллбокс либо не надо создавать в конструкторе, либо не надо сохранять в DFM.

Положите на форму обычную панель и  набросайте на нее контролов - в том числе, другие контейнеры (панели, группбоксы, скроллбоксы и пр.), на которые тоже набросайте чего-нибудь. Затем просмотрите форму, как текст - и все поймете. Owner"ом у всех компонентов будет форма (поэтому они и попадают в DFM), а Parent"ы определяются в самом DFM, по вложенности. Обеспечивается такой механизм методами GetChild, GetChildren, GetParentComponent, SetParentComponent и т. п. Посмотрите, как они реализованы в классах TComponent, в связках TMenu+TMenuItem и TDataSet+TField, в TControl и TWinControl, в контейнерах (TPanel, TGroupBox, TFrame...) и в контейнепах верхнего уровня (TForm, TDataModule).

Вам нужно либо добиться такой же структуры DFM (замещая эти методы в своих классах), либо написать свое сохранение/чтение скроллбокса с его дочерними контролами (DefineProperties и т.д.).


 
icWasya ©   (2005-02-03 20:28) [5]

можно попробовать так - у меня в Delphi5 работает

constructor Tpp.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 if not (AOwner is TForm) then Exit;
 if csLoading in TForm(aOwner).ComponentState then Exit;
 if AOwner.Name="" then Exit;

 sb := TScrollBox.Create(AOwner);
 sb.Parent := self;

end;


 
Petr V. Abramov ©   (2005-02-04 03:30) [6]

Чуть не в тему.
 А может, фрейм?


 
OnThink ©   (2005-02-04 09:06) [7]

khas, [5], [6] - срочно RTFM
по поводу создания компонентов в дизайне и рантайме,
а то уважаемый Юрий Зотов© перед вами распинается, а вы -
не в теме абсолютно


 
khas   (2005-02-04 10:27) [8]

Всем большое спасибо за советы, особенно Юрий Зотов

to OnThink - согласен, я не совсем в теме, но для этого я и обратился к знающим людям, чтобы меня направили в нужном направлении, от Вас, к сожалению, ни одного полезного совета я не получил



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
14-1128107818
Loginov Dmitry
2005-09-30 23:16
2005.10.30
Matrix. Оцените новую систему матричных вычислений для Delphi


4-1125138258
lelik2005
2005-08-27 14:24
2005.10.30
Помогите с созданием окна по рисунку


1-1127888862
Vyachek
2005-09-28 10:27
2005.10.30
INI - файл и поток MemoryStream


2-1128645090
beglec
2005-10-07 04:31
2005.10.30
Как запустить приложение без формы?


1-1128439890
~SaM~
2005-10-04 19:31
2005.10.30
Арифметические действия с числами, записанными в строках.