Сложности с нестандартным свойством в самописном компоненте

отредактировано June 2013 Раздел: FastReport 4.0
Здравствуйте!

Создаю компоненту для FastReport.
Для хранения бинарных данных создал новый тип (наследник TPersistent, про AsignTo не забыл).
Создал published свойство этого типа, для работы с ним в дизайнере написал Property Editor.

Но после 2-х дней безрезультатных экспериментов хочу спросить, как побороть эти затруднения:

- почему свойство не сохраняется в файл дизайна *.fr3 ?
- почему значение свойства обнуляется при копировании компонента в дизайнере ?
- почему значение свойства обнуляется при нажатии на Preview ?
- почему значение свойства обнуляется и в дизайнере при возвращении туда из Preview ?

Если можете навести на решение, буду очень признателен.

Комментарии

  • отредактировано 21:55
    Жалко, что за столько дней ни одного ответа.
  • отредактировано 21:55
    Раз вам мало ответов там, отвечу здесь.

    Ошибка в 17 строке
  • Stalker4Stalker4 123
    отредактировано June 2013
    skroik написал: »
    Здравствуйте!

    Создаю компоненту для FastReport.
    Для хранения бинарных данных создал новый тип (наследник TPersistent, про AsignTo не забыл).
    Создал published свойство этого типа, для работы с ним в дизайнере написал Property Editor.

    Если можете навести на решение, буду очень признателен.

    Рекомендую изучить исходный код FR4, в частности модуль frxChart.pas (обрати внимание на методы ReadData1/WriteData1 и DefineProperties). Я в свое время именно оттуда брал пример, как писать в fr4 коллекцию (надо было для своей обертки TfrxDbGridEh).
  • отредактировано June 2013
    Stalker4,

    за наводку на DefineProperties огромное спасибо, сижу разбираюсь, как готовить


    DimaBr,

    вы такие умные, я в восхищении
  • отредактировано June 2013
    Спасибо всем за ответы, особенно Stalker4, топик можно закрывать.

    Напомню, в качестве бинарного свойства использовался наследник TPersistent
    Для того, чтобы все проблемные пункты заработали, достаточно оказалось в этом классе перегрузить метод DefineProperties(Filer: TFiler)
    И в FastReport-компоненте для свойства определить как read, так и write (в сеттере естественно всего лишь Assign(), а не приравнивание)
    type
       TMyPropertyClass = class(TPersistent)
       private
          ...
          procedure ReadDataProp(Stream: TStream);
          procedure WriteDataProp(Stream: TStream);
          
       protected
          ...
          procedure DefineProperties(Filer: TFiler); override;
          ...
       public
          function IsEmpty(): boolean;
          procedure LoadFromStream(AStream: TStream);
          procedure SaveToStream(AStream: TStream);
       end;
    //------------------------------------------------------------------------------
    procedure TMyPropertyClass.DefineProperties(Filer: TFiler);
    begin
       inherited;
       
       Filer.DefineBinaryProperty('Data', 
                                  ReadDataProp, WriteDataProp, 
                                  not IsEmpty());
    end;
    //------------------------------------------------------------------------------
    procedure TMyPropertyClass.ReadDataProp(Stream: TStream);
    begin
       LoadFromStream(Stream);
    end;
    //------------------------------------------------------------------------------
    procedure TMyPropertyClass.WriteDataProp(Stream: TStream);
    begin
       SaveToStream(Stream);
    end;
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.