Самописный class и ObjectInspector

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

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

Ответить
skobanev
новенький
Сообщения: 33
Зарегистрирован: 24.02.2016 22:55:01
Откуда: Ростов-на-Дону
Контактная информация:

Самописный class и ObjectInspector

Сообщение skobanev »

Добрый.
В общем. Ломаю голову целый день.
1. есть самописный объект.

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

 type
   ta=class(tPersistent)
  private
    FAnInteger: integer;
  public
  published
    property AnInteger: integer read FAnInteger write FAnInteger;     
end;

Как подключить его в редакторе (не в Run-Time) к штатному инспектору объектов ?
Курю мануалы, но что то не сильно помогает.

Если по русски, то хочется чтобы класс был по дефолту виден в инспекторе объектов, и RTTI компоненты могли его выбирать в инспекторе.

Желательно увидеть рабочий код. Lazarus 1.8.4
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

skobanev писал(а):RTTI компоненты могли его выбирать в инспекторе.

Желательно по-русски или на примере.
skobanev
новенький
Сообщения: 33
Зарегистрирован: 24.02.2016 22:55:01
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение skobanev »

iskander писал(а):Желательно по-русски или на примере.

Ссылка на изображение: https://1drv.ms/u/s!Au8IbmCanO9Pg4AAlKwjZJEmqWpDmA
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Это называется "добавить в палитру компонентов"(если я правильно понял).
Идете в меню "Пакет" > "Новый пакет" создаете и сохраняете его в удобном месте.
Идете в меню "Пакет" > "Открыть файл пакета" открываете созданный пакет и в редакторе пакетов говорите:
"Добавить" >"Новый файл">"Модуль Паскаля" (примерно такого содержания):

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

unit my_ta;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

type
   ta=class(tComponent) //TComponent - это важно
  private
    FAnInteger: integer;
  public
  published
    property AnInteger: integer read FAnInteger write FAnInteger;
end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('scobanev', [ta]);
end;

end.

Ставите галку "Зарегистрировать модуль".
Дальше - компилировать - установить. Компонент искать на новой вкладке "scobanev".Всё.
skobanev
новенький
Сообщения: 33
Зарегистрирован: 24.02.2016 22:55:01
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение skobanev »

Спасибо огромное.
А вопрос еще по теме. Я же могу уже править зарегистрированный компонент ? или мне придется при каждом редактировании класса его заного регистрировать?
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

skobanev писал(а):или мне придется при каждом редактировании класса его заного регистрировать?

Все гораздо хуже, если редактирование подразумевает добавление/удаление published свойств, то
придется заново пересобирать Лазарь. Если я правильно путаю, конечно.

upd: по-идее, если компонент еще не сохранен в файле формы, то все должно обойтись.
Последний раз редактировалось iskander 27.02.2019 21:52:11, всего редактировалось 1 раз.
skobanev
новенький
Сообщения: 33
Зарегистрирован: 24.02.2016 22:55:01
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение skobanev »

Ок. Спасибо большое
Аватара пользователя
zoltanleo
постоялец
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Сообщение zoltanleo »

iskander писал(а):Все гораздо хуже, если редактирование подразумевает добавление/удаление published свойств, то
придется заново пересобирать Лазарь. Если я правильно путаю, конечно.

Не должно. Насколько я помню, ставится (регистрируется) компонент один раз, но после изменения кода каждый раз требуется перекомпиляция проекта компонента, чтобы новые свойства отображались корректно.
Ответить