如何枚举对象中的所有属性并获取它们的值?

2023-11-26

我想枚举所有属性:私有、受保护、公共等。我希望使用内置设施而不使用任何第三方代码。


Serg 的答案很好,但最好通过跳过某些类型来避免异常:

uses
  Rtti, TypInfo;

procedure TForm4.GetObjectProperties(AObject: TObject; AList: TStrings);
var
  ctx: TRttiContext;
  rType: TRttiType;
  rProp: TRttiProperty;
  AValue: TValue;
  sVal: string;
const
  SKIP_PROP_TYPES = [tkUnknown, tkInterface];
begin
  if not Assigned(AObject) and not Assigned(AList) then
    Exit;

  ctx := TRttiContext.Create;
  rType := ctx.GetType(AObject.ClassInfo);
  for rProp in rType.GetProperties do
  begin
    if (rProp.IsReadable) and not (rProp.PropertyType.TypeKind in SKIP_PROP_TYPES) then
    begin
      AValue := rProp.GetValue(AObject);
      if AValue.IsEmpty then
      begin
        sVal := 'nil';
      end
      else
      begin
        if AValue.Kind in [tkUString, tkString, tkWString, tkChar, tkWChar] then
          sVal := QuotedStr(AValue.ToString)
        else
          sVal := AValue.ToString;
      end;

      AList.Add(rProp.Name + '=' + sVal);
    end;

  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何枚举对象中的所有属性并获取它们的值? 的相关文章

  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • 有什么办法可以将2个数组添加到一个数组中吗?

    有没有一种简单通用的方法可以将两个数组添加到一个数组中 在下面的情况下 不可能简单地使用C A B陈述 我想避免每次都为它制定算法 TPerson record Birthday Tdate Name Surname string end
  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 错误:使用 Microsoft WebService.dll 通过 Delphi7 规范化 XML

    我正在使用 Delphi7 修改旧项目以添加使用证书和签名 经过一番搜索后我发现XML 规范化函数 https learn microsoft com en us previous versions dd815358 v vs 85 但我无
  • 如何将我的图标添加到组件选项板页面中的组件? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi非可视化组件图像 https stackoverflow com questions 3319276 delphi non visual component image 如何将我的图标添加
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 如何以编程方式安排任务

    如何使用 delphi 7 像 Google updater 一样安排任务 我没有使用注册表 因为它被卡巴斯基防病毒软件检测为误报 我在注册表中作为启动项添加的任何内容都会被检测为特洛伊木马 因此我决定使用任务计划 下面的代码展示了如何删除
  • 如何在Delphi XE中通过名称获取类类型引用?

    我实际上正在尝试使用 Rtti 来实现通用方法调用程序 它应该像这样工作 我将提供类名 方法名和参数 调用者将通过调用此类的指定方法来完成其工作 因此 我需要类引用才能获取其 Rtti 信息并寻找我想要调用的方法 有没有办法在不实现我想要使
  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • 如何将 REST API 与 FireMonkey 结合使用?

    我需要在 FireMonkey 中实现 REST API 来获取一些信息 但我不确定如何做到这一点 REST API使用OAuth2 我可以访问两个代码 Consumer Key和Consumer Secret 之后 我需要获得一个临时的
  • 德尔福数据结构

    我可能需要在 Delphi 中做一个项目 并且是该领域的初学者 目前 我正在网上搜索资源 但由于资源站点太少而感到困惑 首先 你能给我一些好的网站 其中包含我迄今为止错过的 Delphi 资源吗 我也在 Delphi 中搜索数据结构 想知道
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

    在我的 32 位应用程序中 我使用FindRegisteredPictureFileFormats 单元由 Cosmin Prund 提供 https stackoverflow com a 14677532 505088 gt 如何从图形
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许

随机推荐

  • 有没有办法使用 javascript 检测元素所在的 CSS 网格列和行?

    有没有一种方法可以在 JavaScript 中动态检测 CSS 网格中元素所在的网格列和行 我有一个网格 我设置了三个断点 使其具有 4 3 或 2 列 我想要做的是 如果用户单击某个单元格 则将单元格中的新元素立即动态覆盖到被单击的单元格
  • 如何检测 jQuery 中新元素的创建?

    假设我有以下代码 它返回页面上锚元素的数量 function getLinkCount alert Links a length 如果我在文档准备好后调用它 它将按预期工作 但是 如果现在通过 Javascript 动态地将新链接插入到页面
  • 在 Android Studio 1.3+ 自动完成中隐藏 android.R 资源

    是否可以将Android Studio配置为仅显示 drawable里面的资源project folder 我正在做的项目是一个行业项目 很少需要我使用R资源 我不认为你实际上可以做到这一点 只有库开发人员可以选择将资源隐藏在他们的aar分
  • 函数不改变传递的指针 C++

    我有我的职责并且我正在充实targetBubble那里 但调用这个函数后它没有被填充 但我知道它被填充在这个函数中 因为我有输出代码 bool clickOnBubble sf Vector2i mousePos std vector
  • 对 PHP 的非阻塞 Ajax 请求

    我正在使用 PHP 从远程服务器下载一个 大 文件 并且通过单击网页上的下载按钮来触发此下载 所以当我点击download网页上的按钮 然后Ajax请求 有角度 http 被制作为 PHP 函数 该函数使用触发下载cURL 同时 我想使用
  • 如何在 PHP 中创建一个带有反斜杠的字符串? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我需要一个反斜杠作为字符串的一部分 我该怎么做 当反斜杠 不转义字符串的终止引号或以其他
  • 查找与给定条件匹配的元素的索引

    给定一个数组 如何找到与给定条件匹配的元素的所有索引 例如 如果我有 arr x o x o x 查找该项目所在的所有索引x 我可以做 arr each with index map a i a x i nil compact gt 0 2
  • 可以使用异常来检查数组边界吗?

    我想检查给定的坐标是否在数组内 public boolean checkBounds int x int y try Object val array x y return true catch ArrayIndexOutOfBoundsE
  • 将图像从 URL 加载到表视图单元格中的图像视图的更快方法

    我用它来加载 URL 到图像视图 let url NSURL string URL let data NSData contentsOfURL url self releasephoto image UIImage data data 但是
  • 检测当前 iPhone 输入语言

    有谁知道 我可以获得iPhone应用程序中当前的输入语言和 或键盘布局吗 输入语言更改时我还能收到通知吗 在 iOS 4 2 及更高版本中 您可以使用UITextInputMode类来确定当前用于文本输入的主要语 言 UITextInput
  • 使用 roxygen2 构建 R 包时出错

    我有 2 个文件 File R 和 Cpp File c Cpp File c 中的内容 include
  • 如何编写线程安全的自动化测试

    我有一个不是线程安全的类 class Foo Abstract base class code which is not thread safe 此外 如果您有 foo1 和 foo2 对象 则在 foo2 gt anotherFunc 返
  • 构建适用于 Android 的 OpenCV 并将其与 NDK 一起使用

    背景 我目前正在 Android Studio 上为 Moverio BT 200 增强现实眼镜开发一个应用程序 我正在使用 OpenCV 特别是该库的 arUco 模块 该模块必须与 NDK 一起使用 另外 它不在稳定版本中 所以我自己编
  • 使用 if/else 或字典更好的优化技术

    哪个优化更好 接收 字符串 的一系列 if else 语句会为其返回适当的函数 大约 40 50 个 if else 语句 维护键值对的字典 键作为字符串 值作为函数对象 以及一个用于搜索和返回函数对象的主函数 使用上述方法实际返回函数对象
  • 从 4 个角颜色插值的二维色带(256x256 矩阵)

    我想要实现的是以编程方式创建由 256x256 颜色值矩阵表示的二维色带 预期结果可以在附图中看到 我的起点是矩阵的 4 个角颜色 应从中插值中间剩余的 254 种颜色 虽然我在对一个轴的颜色进行插值方面取得了一些成功 但二维计算却给我带来
  • 使用 Azure Active Directory - 一个用于本地登录和发布时登录的应用程序

    我正在使用 Azure Active Directory 身份验证构建 MVC 应用程序 当我在本地开发时 我希望能够登录以进行测试 开发 应用程序网址就像http localhost 43400 这也被编码在 AD 应用程序中Sign O
  • 如何更改 JS 中子元素的顺序?

    我有这个html table tr td Set right order td td span style display block asd a href uarr a a href darr a span span style disp
  • UICollectionView 无法滚动查看整个最后一行

    我有一个 UICollectionView 其大小 768x1024顶部有一个导航栏 我的定制UICollectionViewCells有尺寸的200x200 问题是 当我继续添加单元格并到达底行时 我只能看到部分200x200细胞 在它弹
  • Twig 忘记了数组键

    我在 Symfony2 中遇到了一个关于 twig 的奇怪问题 我正在使用以下数组 days gt Array 1 gt Array money gt 9 2 gt Array money gt 21 3 gt Array money gt
  • 如何枚举对象中的所有属性并获取它们的值?

    我想枚举所有属性 私有 受保护 公共等 我希望使用内置设施而不使用任何第三方代码 Serg 的答案很好 但最好通过跳过某些类型来避免异常 uses Rtti TypInfo procedure TForm4 GetObjectPropert