Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.160.216] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер!
Вопрос по свойству record. Ниже код: 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? Спасибо |
Сообщ.
#2
,
|
|
|
Цитата SkAndriy @ В данной конструкции компилируется компонент нормально, но свойства TestRecord нет? Ес-но, т.к. для рекордов нет общего механизма их загрузки из dfm. Можно ли прикрутить свой механизм сохранения\загрузки рекорда через DefineProperties - не знаю |
Сообщ.
#3
,
|
|
|
А как правильно прописывать процедуру записи и функцию чтения?
Этот код вроде работает. 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; Это правильно? Какие в этом коде ошибки? Спасибо |
Сообщ.
#4
,
|
|
|
Сделайте наследника TPersistent, в который и перенести List : TWideStrings;
TTestProperty = class(TPersistent) published property List : TWideStrings read fList write SetList; end; TMyTestComponent = class(TComponent) published property TestProperty: TTestProperty read FTestProperty write SetTestProperty; end; |
Сообщ.
#5
,
|
|
|
Спасибо попробую.
|