как я могу получить значение поля записи - PullRequest
3 голосов
/ 19 февраля 2011

как я могу получить значение поля записи? например,

извините, мое описание не ясно, у меня есть большая запись, подобная этой

type
myRec=record
a:byte;
c:single;
////  a lot of  fields
end;
var
nowmyrec:myrec;
tmystr:TMemoryStream;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
tmystr:tmemerystream.create;
tmystr.LoadFromFile(ExtractFilePath(Application.exename)+'1.data');
tmstr.Position:=0;
tmstr.readbuffer(nowmyRec,sizeof(myRec));
end;

если поля nowmyRec равны 1000, как я могу получить dll значения поля в 1000 form.edits, пожалуйста, не используйте точку записи, я хочу использовать rtti записи, но delphi2007 не поддерживает это. если я не пользуюсь delphi2010, у вас есть другие способы?

Blockquote

Ответы [ 3 ]

3 голосов
/ 19 февраля 2011

У вас вопрос "как использовать RTTI для доступа к полям записей в Delphi 2007?"Ответ в том, что вы не можете, вам нужен Delphi 2010.

2 голосов
/ 19 февраля 2011

Вы можете объявить запись следующим образом

type
    TmyRec = record
        a: byte;
        b: array [0 .. 35] of widechar;
        c: single;
    end;

И использовать ее следующим образом

var
    myRec1, MyRec2: TmyRec;
    ms: TMemoryStream;
    x: single;
begin
    ms := TMemoryStream.Create;
    try
        // Create a record
        myRec1.a :=1;
        myRec1.c :=1.50;

        // Save record to TMemoryStream
        ms.WriteBuffer(myRec1, SizeOf(TmyRec));

        // Read one record from TMemoryStream
        ms.Position := 0;
        ms.ReadBuffer(myRec2, SizeOf(TMyRec));

        // Get a value
        x := MyRec2.c;
        ShowMessage(FloatToStr(x));
    finally
        ms.Free;
    end;
end;
1 голос
/ 19 февраля 2011

вам нужно сначала объявить переменную записи как Rec1: myRec;

var
  Rec1: myRec;
  myValue: Single;
begin
  myValue := Rec1.c
end;

Это то, что вы хотите?

...