Главная страница
    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.46 MB
Время: 0.04 c
14-1128479169
КаПиБаРа
2005-10-05 06:26
2005.10.30
Задача про таракана


14-1128678203
Труп Васи Доброго
2005-10-07 13:43
2005.10.30
Кто чем может похвалиться?


14-1129089827
КаПиБаРа
2005-10-12 08:03
2005.10.30
Жизненая пила


1-1128669787
Woolen
2005-10-07 11:23
2005.10.30
Access violation в TComboBox


4-1124648013
SpyBoy
2005-08-21 22:13
2005.10.30
NtOpenFile





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский