Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 14:45   #1
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
Вопрос Сериализация

Добрый всем день. Вопрос в следующем. Есть компонент A. Он содержит в секции published компонент B. B создается в конструкторе A Как организовать сериализацию A вместе с B и его потрохами в Dfm ? Читал на rsdn статью про fix -up. не совсем понял. я так понимаю нужно в эту сторону копать. если есть примерчик, буду очень признателен. спасибо.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 13.04.2011, 14:56   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Курить методы TPersistent.DefineProperties и TPersistent.DefineProperty
mss вне форума Ответить с цитированием
Старый 14.04.2011, 09:27   #3
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

ребяты а не поможите с простеньким примером примером где компонент в компоненте и который сохраняется в dfm? или ссылку. а то что не пробую какая то ерунда получается.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 14.04.2011, 13:18   #4
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Простой пример: http://www.delphisources.ru/pages/fa...roperties.html
Посложнее: http://www.delphikingdom.com/asp/vie...?catalogid=888
eduard93 вне форума Ответить с цитированием
Старый 14.04.2011, 15:07   #5
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

вот такой код
Код:
unit MyComponents;

interface
uses
  ExtCtrls, StdCtrls, Classes;
type
  TMyComponent = class(TPanel)
  strict private
    FButton: TButton;

  protected
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Button: TButton read FButton write FButton;
  end;
procedure Register;

implementation

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  FButton := TButton.Create(Self);
  FButton.Visible := false;
end;

destructor TMyComponent.Destroy;
begin
  FButton.Free;
  inherited;
end;

procedure TMyComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
  Proc(FButton);
end;

procedure Register;
begin
  RegisterComponentsProc('MyCOMPONENTS-', [TMyComponent]);
end;

end.
1.при запуске формы с этим компонентом пишет что 'class TButton not found'. 2.Вроде сохраняется в DFM. после того как я выхожу из режима View as Text кнопка становится видимой. почему? я ведь парента ей не назначил.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 14.04.2011, 15:20   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
я ведь парента ей не назначил
Полагаю, в ран-тайм ты ее и не увидишь по этой самой причине)
mss вне форума Ответить с цитированием
Старый 14.04.2011, 17:11   #7
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Цитата:
Сообщение от Gregor Посмотреть сообщение
1.при запуске формы с этим компонентом пишет что 'class TButton not found'.
Добавьте в инициализацию модуля вызов Classes.RegisterClass
eduard93 вне форума Ответить с цитированием
Старый 15.04.2011, 13:45   #8
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Товарищи, кто нибудь . когда нибудь сериализовал подкомпонент(TComponent)? те ссылки, которые были даны выше не совсем про то. там в роли подкомпонент не TComponent!
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 15.04.2011, 23:01   #9
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

RegisterClass не помог?
eduard93 вне форума Ответить с цитированием
Старый 16.04.2011, 11:16   #10
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Написал вот такой конструктор
Код:
constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  FButton := TButton.Create(Self);
  FButton.Name := 'SubButton';
  FButton.Parent := Self;
  FButton.SetSubComponent(true); //помогло вот это.
//  FButton.Visible := false;
end;
В принципе то что нужно. И в дереве Structure его нет и все изменения сохраняются в Dfm, только вот из-за Parenta становиться сразу видимой в дизайн тайме когда бросаешь панель, я я бы хотел сделать её дизайн тайме невидимой. закоментированная строчка не помогает. в dfm стоит Visible = false, но кнопку видно. может какой то метод переопределить? не могу сообразить.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сериализация Вов@ныч Общие вопросы Delphi 2 06.07.2009 09:54
xml сериализация ???? Maladoj Общие вопросы .NET 2 28.03.2009 12:06
сериализация и десериализация radiantor Работа с сетью в Delphi 7 02.08.2008 00:27
сериализация Crucian Общие вопросы C/C++ 5 18.11.2007 16:37