Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TComponent & "read","write"


Stas_on ©   (2004-09-21 19:58:00) 

Господа, как в классе(наследник TComponent'a) правильно
  задать массив типа Record'a, и как нужно задавать ему
  "read" & "write" чтобы потом можно было его сохранить в файл.
Пр.:
 Tiles = (sea,earth,stone,...);
 fTitle = record
   a: array[1..9] of tiles;
   b: string;
   c: Integer;
 end;
 Some : class(TComponent)
 protected
   N : String;
 publishing    
 property массив[1..9] of fTitle read ?? write ??
                               //что нужно   писать?
 
 end;


GrayFace   (2004-09-28 14:20:00) [1]

А че такое rtti?


jack128   (2004-09-24 21:48:00) [2]

хотя ИМХО F1 тут


jack128   (2004-09-24 21:43:00) [3]

Stas_on ©   (24.09.04 13:51) [12]
TStream.Read/WriteComponent/ TFiler/TReader/TWriter + F1 хотя ИМХО в1 тут мало помогает. Более менее начинаешь представлять как это все работает только после анализа исходников. (естественно знание rtti необходимо ;-) )


Basken   (2004-09-24 15:57:00) [4]

Есть статейка на rsdn http://rsdn.ru/article/delphi/serialization.xml

И в исходниках можна посмотреть как перекрывается DefineProperties...


Stas_on   (2004-09-24 14:03:00) [5]

Как их перекрыть?


Basken   (2004-09-24 13:58:00) [6]


> Stas_on ©   (24.09.04 13:51) [12]


Посмотри в TPersistent...


Stas_on   (2004-09-24 13:51:00) [7]

> jack128 ©   (24.09.04 12:49) [11]
 Я чего-то о таких не слышал!
 Где их искать-то?


jack128   (2004-09-24 12:49:00) [8]

Stas_on ©   (24.09.04 12:38) [10]
естественно. Перекрой DefineProperties (если мы говорим о стандартных методах сохронения компонентов)


Stas_on   (2004-09-24 12:38:00) [9]

Public не сохраняется в файл!


GrayFace   (2004-09-23 19:58:00) [10]

Ну не по-человечески это - называть тип с буквы f.
Делай так:
TTitle = record .....

fTitles:array[0..9] of TTitle;
GetTitle(i:integer):TTitle;
SetTitle(i:integer; v:TTitle);

public // не published

property Titles[i: Integer]: fTitles read GetTitle write SetTitle;

implementation

GetTitle(i:integer):TTitle;
Result:=fTitles[i];

SetTitle
fTitles[i]:=v;


Defunct   (2004-09-23 19:44:00) [11]

А обязательно это свойство делать Published?
Сделайте

 Public
   [1]


jack128   (2004-09-23 19:42:00) [12]

Stas_on ©   (23.09.04 19:12) [6]
Error] SaveClass.pas(35): Publishedproperty 'Title' cannot
                             be of type ARRAY

перениси его в секцю public

> 2)Кто нибудь знает, что нужно писать в Get...(...) &
>Set...(...)?
> Прошу показательный пример(если не трудно)!
смотри в исходниках VCL


Stas_on   (2004-09-23 19:12:00) [13]

1)При попытке компиляции
Пишет -->
[Error] SaveClass.pas(35): Published property 'Title' cannot
                              be of type ARRAY
(35):
   property Tiles[Index: Integer]: fTiles read GetTypes write SetTypes;

 fTiles = record
   x,y : Integer;
   s : String;
   Tile : array [1..9] of Tiles;
 End;

Может что ни так делаю.
Есть ли у кого законченный пример?
Если нужна какая-то информация - пишите.

2)Кто нибудь знает, что нужно писать в Get...(...) & Set...(...)?
Прошу показательный пример(если не трудно)!


VMcL   (2004-09-21 20:08:00) [14]

>> Stas_on ©  (21.09.04 19:58)

property Title[Index: Integer]: TTitleRec
Ctrl+Shift+C


Stas_on   (2004-09-21 20:08:00) [15]

Спаибо!


Defunct   (2004-09-21 20:07:00) [16]

Stas_on ©   (21.09.04 20:02) [2]

TSomeClass : class(TComponent)
Private
 ...

 Procedure SetTitleRec(Index: Integer; ATitle: TTitleRec);
 Function  GetTitleRec(Index: Integer): TTitleRec;
 ...
Published
 [1]

End;


Stas_on   (2004-09-21 20:02:00) [17]

Что(и где )должно быть в Get... и Set...?


Defunct   (2004-09-21 20:00:00) [18]

Propery Title[Index: Integer]:TTitleRec Read GetTitleRec Write SetTitleRec


Наверх

Титульная страница Поиск, карта сайта Написать письмо