Компонент со вложенной панелью

Компонент со вложенной панелью Автор: Ray Konopka Следующий небольшой компонент представляет собой панель, содержащую другую, вложенную панель. Во вложенной панели могут быть размещены другие компоненты, читаться они будут правильно. Ключевым моментом здесь является перекрытие методов WriteComponents и ReadState.

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.

http://delphiworld.narod.ru/ DelphiWorld 6.0

Выдает ошибки

procedure WriteComponents(Writer: TWriter); override;

Метод не найден в базовом классе

Registered := True;

на присвоение значения константе

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...