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

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

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

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

Сообщение alaken » 28.04.2010 13:44:32

хочу сгруппировать параметры по тематике в своем компоненте, столкнулся с сложностью, не могу реализовать подобное.
как описать свой компонент чтобы в инспекторе объектов параметры раскрывались в поддерево
(например как параметр Font у компонента TEdit) (см вложение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось alaken 04.05.2010 10:30:24, всего редактировалось 3 раз(а).
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

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

Сообщение Mr.Smart » 28.04.2010 14:31:00

В данном случае свойство 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;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение GrayEddy » 28.04.2010 14:32:42

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

Добавлено спустя 3 минуты 19 секунд:
mr. Smart прав, забыл дописать, класс д.б. производным от TPersistent, чтобы считать/записывать
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

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

Сообщение alaken » 28.04.2010 14:36:07

все это я учел, но почему то ничего не появилось в инспекторе объектов...
объявление класса:
Код: Выделить всё
  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;   
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

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

Сообщение Mr.Smart » 28.04.2010 14:51:53

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

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

Сообщение alaken » 28.04.2010 15:02:56

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

Re: Параметры компонента в Инспекторе объектов [Решено]

Сообщение alaken » 04.05.2010 10:28:35

не буду начинать новую ветку, продолжу тут.
параметр TPicture выдет AV при нажатии кнопок "..." в Инспекторе объектов.
Помогите разобраться.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

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

Сообщение Mr.Smart » 04.05.2010 10:39:59

alaken
Как объявлено и инициализируется свойство Picture?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение alaken » 04.05.2010 12:39:32

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


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

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

Но получается объект TPicture будет висеть в памяти даже если я его не связал с изображением...
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

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

Сообщение Mr.Smart » 04.05.2010 13:16:13

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

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

Сообщение alaken » 04.05.2010 13:22:54

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

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

вроде как наследник должен быть TCollection, но незнаю с чего начать...
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

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

Сообщение Mr.Smart » 04.05.2010 13:37:45

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

В смысле? Выподающий список? ComboBox?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение alaken » 04.05.2010 14:10:20

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

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

нет

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru