Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

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

Delphi , Компоненты и Классы , TPanel

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

Автор: 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.

Статья Компонент со вложенной панелью раздела Компоненты и Классы TPanel может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


:: 2013-04-05 21:38:31 :: re:Компонент со вложенной панелью

пользователь: Хогирон.

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

procedure WriteComponents(Writer: TWriter); override;

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

Registered := True;

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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: TPanel ::


реклама

::


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
13.08.2020 23:18:09/0.0080020427703857/0