Параметры компонента в Инспекторе объектов

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

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

Ответить
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Параметры компонента в Инспекторе объектов

Сообщение alaken »

хочу сгруппировать параметры по тематике в своем компоненте, столкнулся с сложностью, не могу реализовать подобное.
как описать свой компонент чтобы в инспекторе объектов параметры раскрывались в поддерево
(например как параметр Font у компонента TEdit) (см вложение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось alaken 04.05.2010 10:30:24, всего редактировалось 3 раза.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

В данном случае свойство Font является классом наследованным от TPersistent.
Инспектор объектов для класса TPersistent имеет особый редактор, который реализует сворачивание/разворачивание свойтв класса.

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

type
  TMy = class(TPersistent)
  ...
  published
    property Test: Integer read fTest write fTest;
  ...
  end;

  TMyComp = class(TComponent)
   ....
  published
   property Item: TMy read fItem write fItem;
   ....
  end;
GrayEddy
постоялец
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение GrayEddy »

Объект должен быть классом + объявлен как published property

Добавлено спустя 3 минуты 19 секунд:
mr. Smart прав, забыл дописать, класс д.б. производным от TPersistent, чтобы считать/записывать
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

все это я учел, но почему то ничего не появилось в инспекторе объектов...
объявление класса:

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

  TColors = class
  private

    FActive: TColor;
    FActiveHighLighted: TColor;
    FHighLighted: TColor;
    FInactive: TColor;

    procedure SetActive
              (
                const AValue: TColor
              );

    procedure SetActiveHighLighted
              (
                const AValue: TColor
              );

    procedure SetHighLighted
              (
                const AValue: TColor
              );

    procedure SetInactive
              (
                const AValue: TColor
              );

  public
    constructor Create;
    destructor Destroy;

  published

    property Active: TColor
             read FActive
             write SetActive;

    property Inactive: TColor
             read FInactive
             write SetInactive;

    property HighLighted: TColor
             read FHighLighted
             write SetHighLighted;

    property ActiveHighLighted: TColor
             read FActiveHighLighted
             write SetActiveHighLighted;

  end;

  { TColorsProperty }

  TColorsProperty = class (TPersistent)
  private

    FBorder: TColors;
    FGradientEnd: TColors;
    FTabFace: TColors;
    FText: TColors;

    procedure SetBorder
              (
                const AValue: TColors
              );

    procedure SetGradientEnd
              (
                const AValue: TColors
              );

    procedure SetTabFace
              (
                const AValue: TColors
              );

    procedure SetText
              (
                const AValue: TColors
              );

  public

    constructor Create; //override;

    destructor Destroy; //override;

  published

    property Border: TColors
             read FBorder
             write SetBorder;

    property TabFace: TColors
             read FTabFace
             write SetTabFace;

    property GradientEnd: TColors
             read FGradientEnd
             write SetGradientEnd;

    property Text: TColors
             read FText
             write SetText;
  end;


и в классе компонента в разделе published

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

    property Colors: TColorsProperty
             read FColors
             write SetColors;   
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

так класс TColors должен быть тоже наследником TPersistent.
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

Спасибо, вопрос решен.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

не буду начинать новую ветку, продолжу тут.
параметр TPicture выдет AV при нажатии кнопок "..." в Инспекторе объектов.
Помогите разобраться.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

alaken
Как объявлено и инициализируется свойство Picture?
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

Mr.Smart писал(а):alaken
Как объявлено и инициализируется свойство Picture?


Свойство было только объявлено, но не иницированно.

Добавил инициацию в секцию конструктора компонента, все стало работать как надо.

Но получается объект TPicture будет висеть в памяти даже если я его не связал с изображением...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Конечно
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

это расточительно.

как сделать свойство-список?

вроде как наследник должен быть TCollection, но незнаю с чего начать...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

alaken писал(а):как сделать свойство-список?

В смысле? Выподающий список? ComboBox?
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

Mr.Smart писал(а):
alaken писал(а):как сделать свойство-список?

В смысле? Выподающий список? ComboBox?

нет

посомтрите свойство TStringGrid.Columns,такое как там...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить