Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#10

AW: Feldwerte eines Records über den Feldindex abrufen

  Alt 11. Sep 2023, 21:33
Ich benötige über den Index den Namen und Feldwert.
Delphi-Quellcode:
function GetFieldNameAndValue(pmTypeInfo: Pointer; pmInstance: Pointer; pmFieldIdx: Integer; out pmoFieldName: String; out pmoFieldValue: TValue): Boolean;
var
  rttiType: TRttiType;
  rttiFields: TArray<TRttiField>;
begin
  if (pmTypeInfo <> Nil)
    and (pmInstance <> Nil)
    and (pmFieldIdx >= 0) then
  begin
    rttiType := TRttiContext.Create.GetType(pmTypeInfo);
    if rttiType <> Nil then
    begin
      rttiFields := rttiType.GetFields;
      if Length(rttiFields) > pmFieldIdx then
      begin
        pmoFieldName := rttiFields[pmFieldIdx].Name;
        pmoFieldValue := rttiFields[pmFieldIdx].GetValue(pmInstance);
        Exit(True);
      end;
    end;
  end;
  Result := False;
end;

var
  rec: TMyRecord;
  fieldName: String;
  fieldValue: TValue;
begin
  rec.FeldC := 'Test';
  if GetFieldNameAndValue(TypeInfo(TMyRecord), @rec, 2, fieldName, fieldValue) then
    ShowMessage(Format('Name: %s, Value: %s', [fieldName, fieldValue.ToString]));
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat