![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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