Главная страница
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.048 c
2-1132253496
DillerXX
2005-11-17 21:51
2005.12.04
получение сообщений в консольном приложении


14-1131483081
Алексей31
2005-11-08 23:51
2005.12.04
Прога


11-1113121884
Артём
2005-04-10 12:31
2005.12.04
работа с KOLEDB


2-1132330146
angelikas
2005-11-18 19:09
2005.12.04
Ошибка при компилирование программы – связанная с Tstrings.


2-1132210863
diwww
2005-11-17 10:01
2005.12.04
Ошибка при закрытии одной из одинаковых форм