На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Как правильно прописывать свойство TTestRecord в компоненте. , Как правильно прописывать свойство TTestRecord в компоненте.
    Добрый вечер!

    Вопрос по свойству record.
    Ниже код:

    ExpandedWrap disabled
      unit MyTestComponent;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
        Forms, Dialogs, StdCtrls, Buttons, JclUnicode, JclWideStrings;
       
      type
        TTestRecord = record
          List : TWideStrings;
        end;
       
        TMyTestComponent = class(TComponent)
        private
          FTestRecord : TTestRecord;
        public
          constructor Create(AOwner: TComponent); override;
          destructor Destroy; override;
          procedure Add(tr : TTestRecord);
        published
          property TestRecord : TTestRecord read FTestRecord write FTestRecord;
        end;
       
      implementation
       
      constructor TMyTestComponent.Create(AOwner: TComponent);
      begin
        inherited Create(AOwner);
        FTestRecord.List := TWideStrings.Create;
      end;
       
      destructor TMyTestComponent.Destroy;
      begin
        FTestRecord.List.Free;
        inherited;
      end;
       
      procedure TMyTestComponent.Add(tr : TTestRecord);
      begin
        tr.List.Add('Testing');
      end;
       
      end.


    Как правильно прописывать свойство TTestRecord в компоненте.
    В данной конструкции компилируется компонент нормально, но свойства TestRecord нет?
    Где необходимо прописывать FTestRecord.List := TWideStrings.Create, чтобы в процедуре можно было использвать запись типа TTestRecord?

    Спасибо
    Сообщение отредактировано: SkAndriy -
      Цитата SkAndriy @
      В данной конструкции компилируется компонент нормально, но свойства TestRecord нет?

      Ес-но, т.к. для рекордов нет общего механизма их загрузки из dfm. Можно ли прикрутить свой механизм сохранения\загрузки рекорда через DefineProperties - не знаю
        А как правильно прописывать процедуру записи и функцию чтения?

        Этот код вроде работает.

        ExpandedWrap disabled
          private
            ftr : TTestRecord;
          public
            property TestRecord : TTestRecord read GetTestRecord write SetTestRecord;
            procedure Add(tr : TTestRecord);
           
          function TMyTestComponent.GetTestRecord : TTestRecord;
          begin
            Result := ftr;
          end;
           
          procedure TMyTestComponent.SetTestRecord(Value : TTestRecord);
          begin
             ftr := Value;
          end;
           
          procedure TMyTestComponent.Add(tr : TTestRecord);
          begin
            ftr.List.AddStrings(tr.List);
          end;


        Это правильно?
        Какие в этом коде ошибки?

        Спасибо
        Сообщение отредактировано: SkAndriy -
          Сделайте наследника TPersistent, в который и перенести List : TWideStrings;
          ExpandedWrap disabled
            TTestProperty = class(TPersistent)
              published
                property List : TWideStrings read fList write SetList;
            end;
             
            TMyTestComponent = class(TComponent)
              published
                property TestProperty: TTestProperty read FTestProperty write SetTestProperty;
              end;
            Спасибо попробую.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0239 ]   [ 16 queries used ]   [ Generated: 25.04.24, 01:50 GMT ]