Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCollection внутри TPersistent, не работает в DT, Не открывается редактор коллекции 
V
    Опции темы
Coriolis
Дата 31.10.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Привет всем.
Пишу свой компонент. Захотел спрятать группу настроек в отдельном объекте, наследнике TPersistent, как водицо. Одна из настроек - коллекция. На мой взгляд все правильно, но в DesingTime не открывается редактор коллекции - после нажатия на кнопку с тремя точками никакой реакции :(

Код компонента:
Код

unit uMTable;

interface

uses
  Classes,
  Controls,
  Graphics,
  Messages,
  SysUtils,
  Buttons,
  Windows;

type

  TMColumns = class;
  TMHeader = class;
  TMTableBase = class;

  TMColumn = class (TCollectionItem)
  private
    FCaption: TCaption;
    procedure SetCaption(const Value: TCaption);
  protected
    function GetOwner: TMColumns; reintroduce;
  published
    // свойства колонки
    {Текст в колонке}
    property Caption: TCaption read FCaption write SetCaption;
  end;

  TMColumns = class (TCollection)
  private
    FHeader: TMHeader;    
  protected
    function GetOwner: TPersistent; override;
    procedure Update(Item: TCollectionItem); override;
  public
    constructor Create(AOwner: TMHeader);
  end;

  {оболочка для настройки заголовка таблицы - хидера}
  TMHeader = class (TPersistent)
  private
    FOwner: TMTableBase;
    FColumns: TMColumns;
    procedure SetColumns(const Value: TMColumns);
  public
    constructor Create(AOwner: TMTableBase);
    destructor Destroy; override;
  published
    property Columns: TMColumns read FColumns write SetColumns;
  end;


  TMTableBase = class (TCustomControl)
  private
    // координаты рабочей области внутри бордюра
    FHeader: TMHeader;
    procedure SetHeader(const Value: TMHeader);
  protected
    {инфа о заголовке - хидере}
    property Header: TMHeader read FHeader write SetHeader;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;


  TMTable = class (TMTableBase)
  published
    property Header;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MSM', [TMTable]);
end;

{ TMTable }

constructor TMTableBase.Create(AOwner: TComponent);
begin
  inherited;
  FHeader := TMHeader.Create(Self);
end;

destructor TMTableBase.Destroy;
begin
  FHeader.Free;
  inherited;
end;

procedure TMHeader.SetColumns(const Value: TMColumns);
begin
  FColumns.Assign(Value);
end;

procedure TMTableBase.SetHeader(const Value: TMHeader);
begin
  FHeader.Assign(Value);
end;

{ TMColumns }

constructor TMColumns.Create(AOwner: TMHeader);
begin
  FHeader := AOwner;
  inherited Create(TMColumn);
end;

function TMColumns.GetOwner: TPersistent;
begin
  Result := FHeader;
end;

procedure TMColumns.Update(Item: TCollectionItem);
begin
  inherited;  
end;

{ TMColumn }

function TMColumn.GetOwner: TMColumns;
begin
  Result := Collection as TMColumns;
end;

procedure TMColumn.SetCaption(const Value: TCaption);
begin
  FCaption := Value;
end;

{ TMColHeader }

constructor TMHeader.Create(AOwner: TMTableBase);
begin
  inherited Create;
  FOwner := AOwner;
  FColumns := TMColumns.Create(Self);
end;

destructor TMHeader.Destroy;
begin
  FColumns.Free;
  inherited;
end;

end.

PM MAIL   Вверх
Coriolis
Дата 31.10.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Шо, никто не знает?  smile Я перерыл кучу инфы но не могу понять почему не открывается редактор :(
PM MAIL   Вверх
Coriolis
Дата 31.10.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Хаха. Нашел таки.
У TPersistent тожеть надо было завести FOwner и перекрыть функцию GetOwner: TPersistent;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.