Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Вниз

Добавление "детей" в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.033 c
4-1125140770
NikNet
2005-08-27 15:06
2005.10.30
Как правельно использовать GetFullPathName?


14-1128580186
Мазут Береговой
2005-10-06 10:29
2005.10.30
Сделал открытие века! Такой вот я непоседа!


14-1128678431
__DATA__
2005-10-07 13:47
2005.10.30
Удаление через коммандную строку папки,содержащей пробелы в имени


8-1113670496
Comrade
2005-04-16 20:54
2005.10.30
Яркость, Цвет, Контрастность Видео


1-1128432113
Dell3r
2005-10-04 17:21
2005.10.30
Find in DBRichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский