for attribute in rttiType.GetAttributes() do
begin
Inc(total_count);
if attribute is ObjectId_1 then Inc(count_1);
if attribute is ObjectId_2 then Inc(count_2);
end;
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
09-02-2025 23:31
>>>как получить атрибуты экземпляра класса внутри метода
Для Delphi XE, посмотрите пример "\RadStuduo\Samples\Object Pascal\RTL\AttributesAndRTTI\rtti_browser". В нём, в процедуре TMainForm.RefreshListView(ANode: TTreeNode), строки после:
for prop in FContext.GetType(obj.ClassType).GetProperties do
Хотя, список published полей объекта, можно получить и "по старинке" (работает, и на D7, и на D XE):
//— Список published полей объекта
function GetPropertiesList(aObject: TObject; aList: TStrings): boolean;
var
i, nCount: integer;
wTypeData: PTypeData;
wTypeInfo: PTypeInfo;
wPropList: PPropList;
begin
Result := False;
wTypeInfo := aObject.ClassInfo;
if (wTypeInfo = nil) or (wTypeInfo^.Kind <> tkClass)
then Exit;
wTypeData := GetTypeData(wTypeInfo);
nCount := wTypeData^.PropCount;
if nCount > 0
then begin
GetMem(wPropList, SizeOf(PPropInfo) * nCount);
try
GetPropInfos(wTypeInfo, wPropList);
for i := 0 to nCount - 1
do aList.Add(wPropList[i].Name + ': ' + wPropList[i].PropType^.Name);
finally
FreeMem(wPropList, SizeOf(PPropInfo) * nCount);
end;
end;
Result := True;
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.