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

Вниз

Запись/Чтение неопубликованных свойств компонента   Найти похожие ветки 

 
olegz77   (2006-01-20 15:50) [0]

Пишу компонент-панель, в которую вставлены две панели - на одной выводится текст (caption), а другая используется как клиентская для вставки других контролов. Обе вложенные панели описаны в разделе private. Как правильно сохранить/загрузить в DFM файл компоненты, вложенные в клиентскую панель???


 
Digitman ©   (2006-01-20 16:09) [1]

см. TPersistent.DefineProperty, TFiler.Read/WriteXXXX


 
Юрий Зотов ©   (2006-01-20 16:15) [2]

Предвижу проблемы с сохранением в DFM. Похоже, придется разбираться с GetParentCompoment, GetChildren и иже с ними. Гораздо проще сделать фрейм и зарегистрировать его в палитре.


 
olegz77   (2006-01-20 16:20) [3]

Да, думаю проще сделать компонент без вложенных панелей, просто ограничив клиентскую область с помощью AdjustClientRect и вставлять дочерние контролы прямо в саму панель. Тогда никаких проблем. Нашел тут в сборнике Delphi World 6 старый пример (наверное для delphi2 или даже delphi1). Но пример не работает:
unit RzPnlPnl;

interface

uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, ExtCtrls;

type
 TSubPanel = class(TPanel)
 protected
   procedure ReadState(Reader: TReader); override;
 end;

 TPanelPanel = class(TPanel)
 private
   FSubPanel: TSubPanel;
 protected
   procedure WriteComponents(Writer: TWriter); override;
   procedure ReadState(Reader: TReader); override;
 public
   constructor Create(AOwner: TComponent); override;
 end;

procedure Register;

implementation

procedure TSubPanel.ReadState(Reader: TReader);
var
 OldOwner: TComponent;
begin
 OldOwner := Reader.Owner;
   { Сохраняем старого владельца, что необходимо для PanelPanel }
 Reader.Owner := Reader.Root; { Задаем в качестве владельца форму }
 try
   inherited ReadState(Reader);
 finally
   Reader.Owner := OldOwner;
 end;
end;

constructor TPanelPanel.Create(AOwner: TComponent);
const
 Registered: Boolean = False;
begin
 inherited Create(AOwner);

 FSubPanel := TSubPanel.Create(Self);
 FSubPanel.Parent := Self;
 FSubPanel.SetBounds(20, 20, 200, 100);
 FSubPanel.Name := "SomeName";

 if not Registered then
 begin
   Classes.RegisterClasses([TSubPanel]);
     { так TSubPanel может храниться в файле формы }
   Registered := True;
 end;

end;

procedure TPanelPanel.ReadState(Reader: TReader);
var
 OldOwner: TComponent;
 I: Integer;
begin
 for I := 0 to ControlCount - 1 do
   Controls[0].Free;

 OldOwner := Reader.Owner;
 Reader.Owner := Self;
   {Для чтения субкомпонентов, установите данный экземпляр в качестве родителя}
 try
   inherited ReadState(Reader);
 finally
   Reader.Owner := OldOwner;
 end;
end;

procedure TPanelPanel.WriteComponents(Writer: TWriter);
var
 I: Integer;
begin
 for I := 0 to ControlCount - 1 do
   Writer.WriteComponent(Controls[I]);
end;

procedure Register;
begin
 RegisterComponents("Samples", [TPanelPanel]);
end;

end.


Допустим, что метода WriteComponents уже нет. Скорее всего это метод WriteState. Но все равно не работает :(



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

Форум: "Компоненты";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.043 c
8-1140450767
SPy
2006-02-20 18:52
2006.08.20
VSync (Вертикальная синхронизация)


15-1153471122
tButton
2006-07-21 12:38
2006.08.20
Мексика


4-1145866945
EarlVadim
2006-04-24 12:22
2006.08.20
Постоянное разбухание памяти, занимаемой программой


15-1153744232
IceBeerg
2006-07-24 16:30
2006.08.20
Вот и Гугел порадовал...


15-1153917251
Германн
2006-07-26 16:34
2006.08.20
Что такое DOCSIS?





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