Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Свойства как элементы массива-записи   Найти похожие ветки 

 
abu   (2005-11-14 15:45) [0]

Здравствуйте!
Объясню ситуацию.

Есть, к примеру, такие типы: некоторая запись

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] по отдельности?


 
Digitman ©   (2005-11-14 16:04) [1]

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;


 
Anatoly Podgoretsky ©   (2005-11-14 16:06) [2]

В приведенном коде ошибки нет, ошибка в другом месте. При том секретная.


 
BOA_KAA ©   (2005-11-14 16:08) [3]


> Digitman ©   (14.11.05 16:04) [1]

Все понял, спасибо!



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
14-1131801241
Kerk
2005-11-12 16:14
2005.12.04
Купил FIFA Manager 2006


1-1131210798
gdaujk
2005-11-05 20:13
2005.12.04
Создание панелей инструментов


14-1131888086
Неважно
2005-11-13 16:21
2005.12.04
программа для измерения громкости звука


14-1131868987
QuasiLamo
2005-11-13 11:03
2005.12.04
mini DVD mp3 Player


3-1128271929
menart
2005-10-02 20:52
2005.12.04
Как законектится к MSSQL используя ADO с другим именем пользовате