![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойства как элементы массива-записи
abu © (2005-11-14 15:45:00)Здравствуйте!
Объясню ситуацию.
Есть, к примеру, такие типы: некоторая запись
TMyRec = record
a, b: Double;
end;
и массив
TMyRecArray = array of TMyRec;
Кроме того, есть класс
TMyClass = class
private
FMyRecArray: TMyRecArray;
function GetMyProp(ANumber: Integer): TMyRec;
procedure SetMyProp(ANumber: Integer; AValue: TMyRec);
public
property MyProp[ANumber: Integer]: TMyRec read GetMyProp write SetMyProp;
end;
...
// описания упрощенные, безо всяких проверок
function TMyClass.GetMyProp(ANumber: INteger): TMyRec;
begin
Result := FMyRecArray[ANumber];
end;
procedure TMyClass.SetMyProp(ANumber: Integer; AValue: TMyRec);
begin
FMyRecArray[ANumber] := AValue;
end;
...
// попытка обращения (предполагается, что MyClass: TMyClass где-то описан и создан)
procedure TForm1.SomeProc;
var
x: Double;
begin
x := MyClass.MyProp[0].a; // без ошибки
MyClass.MyProp[1].a := x; // возникает ошибка
end;
Вопрос: как переделать пример, чтобы было возможно обращение к элементам MyProp[i] по отдельности?
BOA_KAA (2005-11-14 16:08:00) [1]
> Digitman © (14.11.05 16:04) [1]
Все понял, спасибо!
Anatoly Podgoretsky (2005-11-14 16:06:00) [2]В приведенном коде ошибки нет, ошибка в другом месте. При том секретная.
Digitman (2005-11-14 16:04:00) [3]PMyRec = ^TMyRec;
TMyRec = record
a, b: Double;
end;
TMyRecArray = array of TMyRec;
..
private
FMyRecArray: TMyRecArray;
function GetMyProp(ANumber: Integer): PMyRec;
procedure SetMyProp(ANumber: Integer; AValue: PMyRec);
public
property MyProp[ANumber: Integer]: PMyRec read GetMyProp write SetMyProp;
..
function TMyClass.GetMyProp(ANumber: INteger): PMyRec;
begin
Result := @FMyRecArray[ANumber];
end;
procedure TMyClass.SetMyProp(ANumber: Integer; AValue: PMyRec);
begin
FMyRecArray[ANumber] := AValue^;
end;
procedure TForm1.SomeProc;
var
x: Double;
begin
x := MyClass.MyProp[0].a;
MyClass.MyProp[1].a := x;
end;