Как группировать свойства компонента в инспекторе объекта

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Как группировать свойства компонента в инспекторе объекта

Сообщение qivi »

Что то не могу разобраться как можно сгруппировать свойства "самодельного компонента вот так:
1.jpg
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Создаёте класс наследник TPersistent содержащий необходимые published свойства.

Код: Выделить всё

type
  TMyProps=class(TPersistent)
  published
    property My1: ....
    property My2: ....
  end;

  TMyComp = class(Tcomponent)
  published
   ...
   property MyProps: TMyProps;
  end;
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Это свойство типа "множество".
Оно автоматически показывается в виде "группы".
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Mr.Smart писал(а): TMyProps=class(TPersistent)
published
property My1: ....
property My2: ....
end;


А как быть если я хочу сгруппировать свойства для потомка TGraphicControl, и после изменения каждого из этих свойств нужно вызвать Invalidate? Хотелось бы сохранить возможность во время исполнения менять любое значение а не целиком переменную типа TMyProps.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Код: Выделить всё

type
  TMyComp = class;

  TMyProps=class(TPersistent)
  private
    fComp: TMyComp;

   procedure SetMy1(const aVal: ...);
  published
    property My1: .... write SetMy1;

  end;

  TMyComp = class(Tcomponent)
  private
   procedure Invalidate;
  published
   ...
   property MyProps: TMyProps read fMyProps write fMyProps;

  public
    constructor Create(aOwner: TComponent); override;
  end;

procedure TMyComp.SetMy1(....;
begin
  ...
  fComp.Invalidate;
  ...
end;

constructor TMyComp.Create(aOwner: TComponent);
begin
  inherited;
  fMyProps:=TMyProps.Create;
  fMyProps.fComp:=self;
end;
Ответить