使用 Delphi Tokyo 10.2 通过 GetObjectProp 获取 TextSettings.Font.Style 属性

2024-01-14

我使用Delphi的GetObjectProp函数来获取表单组件的属性,我获取了几个组件的所有属性,但是我无法获取TLabel等组件的TextSettings.Font.Style(粗体,斜体,...)属性例如。我需要知道组件文本是粗体还是斜体。我正在尝试获取这些属性的过程如下:

procedure Tfrm1.aoClicarComponente(Sender: TObject);
var
  TextSettings: TTextSettings;
  Fonte: TFont;
  Estilo: TFontStyle;
  Componente_cc: TControl; 
begin
Componente_cc := TControl(Label1);
if IsPublishedProp(Componente_cc, 'TextSettings') then
    begin
      TextSettings := GetObjectProp(Componente_cc, 'TextSettings') as TTextSettings;
        if Assigned(TextSettings) then
           Fonte := GetObjectProp(TextSettings, 'Font') as TFont;
        if Assigned(Fonte) then
           Estilo := GetObjectProp(Fonte, 'Style') as TFontStyle; // <-- error in this line 
        if Assigned(Estilo) then
           Edit1.text := GetPropValue(Estilo, 'fsBold', true);
    end
end; 

我在上面标记的行上显示的错误是。

[dcc64 错误] uPrincipal.pas(1350): E2015 运算符不适用于此操作数类型

我究竟做错了什么?


GetObjectProp(Fonte, 'Style')不会工作,因为Style首先不是一个基于对象的属性,它是一个Set基于属性。和GetPropValue(Estilo, 'fsBold', true)完全是错误的(并不是说你无论如何都可以调用它),因为fsBold不是财产,它是成员TFontStyle枚举。要检索Style属性值,你必须使用GetOrdProp(Fonte, 'Style'), GetSetProp(Fonte, 'Style'), or GetPropValue(Fonte, 'Style')相反(作为integer, string, or variant, 分别)。

话虽如此,一旦您检索到TextSettings对象,您根本不需要使用 RTTI 来访问它Font.Style属性,直接访问属性即可。

试试这个:

procedure Tfrm1.aoClicarComponente(Sender: TObject);
var
  Componente_cc: TControl;
  TextSettings: TTextSettings;
begin
  Componente_cc := ...;
  if IsPublishedProp(Componente_cc, 'TextSettings') then
  begin
    TextSettings := GetObjectProp(Componente_cc, 'TextSettings') as TTextSettings;
    Edit1.Text := BoolToStr(TFontStyle.fsBold in TextSettings.Font.Style, true);
  end;
end; 

更好(也是首选)的解决方案是根本不使用 RTTI。 FMX 类具有TextSettings物业还实施ITextSettings http://docwiki.embarcadero.com/Libraries/en/FMX.Graphics.ITextSettings正是针对这种情况的接口,例如:

procedure Tfrm1.aoClicarComponente(Sender: TObject);
var
  Componente_cc: TControl;
  Settings: ITextSettings;
begin
  Componente_cc := ...;
  if Supports(Componente_cc, ITextSettings, Settings) then
  begin
    Edit1.Text := BoolToStr(TFontStyle.fsBold in Settings.TextSettings.Font.Style, true);
  end;
end; 

阅读 Embarcadero 的文档了解更多详细信息:

在 FireMonkey 中设置文本参数 http://docwiki.embarcadero.com/RADStudio/en/Setting_Text_Parameters_in_FireMonkey

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

使用 Delphi Tokyo 10.2 通过 GetObjectProp 获取 TextSettings.Font.Style 属性 的相关文章

  • 如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小?

    有谁知道如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小 我的 1080p 22 显示器的字体太小 无法阅读 而且会导致眼睛疼痛 一些笔记 它不尊重系统的 DPI 设置 因此更改系统设置没有帮助 而且 我现在已经使用 14
  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 如何将我的图标添加到组件选项板页面中的组件? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi非可视化组件图像 https stackoverflow com questions 3319276 delphi non visual component image 如何将我的图标添加
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何仅在调试模式下激活 ReportMemoryLeaksOnShutdown?

    我需要激活ReportMemoryLeaksOnShutdown报告应用程序内存泄漏的功能 但仅限于调试模式 当 Delphi IDE 运行时 我怎样才能做到这一点 如果您的意思是使用调试构建配置 D2007 编译的 调试模式 则您将定义
  • Indy 的 TIdHTTPProxyServer:如何过滤请求?

    我正在使用 TIdHTTPProxyServer 来实现一个简单的 HTTP 代理 但我现在想阻止一些与某些 URL 匹配的连接 哪个事件和 或组件最适合实现这一目标 Indy 文档并没有太多解释 Thanks 作为基本过滤器 您可以使用
  • 使用Delphi检查HTML代码中是否有对象属性值

    如何使用Delphi检查HTML代码中是否有输入对象属性值 there isn t value attribute
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

    我有一个自定义的 TDatasetProvider 它允许为其提供的任何数据创建新字段 因此 假设您在原始数据集上获得了以下字段 客户ID Name Age 您需要使用显示位图在 DBGrid 上选择它 好吧 你可以 因为我的 DSP 可以
  • 如何在运行时(Delphi/Windows)程序中添加代码?

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

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每

随机推荐

  • 带有服务帐户令牌的 Kubernetes kubeconfig

    我有一个调用的脚本kubectl server server certificate authority ca token token get pod all namespaces簇外 其中 token来自服务帐户my sa 在命名空间中m
  • 使用 Android APK 2.2 打开硬件加速(如果可用)(例如 Android 3+)

    我为Android 3 0开发了一个应用程序 它运行得很好 但客户端坚持兼容2 2设备 禁用硬件加速 使用 Android 兼容包 NIO 向后移植支持 对于任务和执行程序 以及 View 方法的一些重新实现 我能够将我的应用程序移植到 A
  • 如何使用其他端口在 Visual Studio Code 中离线调试无服务器?

    我有两个无服务器离线 服务器 我需要同时在本地运行 所以我需要更改其中一台服务器的端口 我使用 Visual Studio Code 调试器运行服务器 服务器的配置位于 launch json 文件中 如何更改无服务器离线应用程序的端口 以
  • android.app.Application 子类,onTerminate 未被调用

    从文档中android app Application 那些需要维护全局应用程序状态的基类 我正在使用自己的子类来维护一个用于查询服务器的对象 还来自文档 onTerminate 当应用程序停止时调用 然而 onTerminate 在我的班
  • Entity Framework Core 2.0 删除记录而不是更新记录

    我认为这可能是一个错误 但我认为我可能缺少一些可以解释该行为的东西 任何帮助 将不胜感激 Technical details EF Core version Microsoft EntityFrameworkCore 2 0 1 Datab
  • 工厂女孩什么时候在数据库中创建对象?

    我正在尝试使用模拟会话FactoryGirl shoulda 它可以与固定装置配合使用 但我在使用工厂时遇到问题 我有以下工厂 用户登录名和电子邮件都有unique验证 Factory define user do u u login qu
  • 将多种内容类型发布到 Web api

    我有一个 Web api 我想发布一个图像文件 一些数据 以便在服务器收到它时正确处理它 调用代码看起来像这样 using var client new HttpClient using var content new MultipartF
  • java nio 否定 glob 模式

    fileSystem getPathMatcher glob pattern matches path getFileName 我想匹配所有不匹配 ts 的内容 java 中 glob 的语法是什么 在有人建议我使用正则表达式之前 我需要使
  • 将现有私钥导入 BKS Keystore

    我有一个由 openssl 按以下方式生成的密钥对 openssl genrsa out private key pem 2048 我将其转换为 DER 格式如下 openssl pkcs8 topk8 inform PEM outform
  • 使用 BroadcastReceiver 关闭 Activity

    我的应用程序中有一个活动 Main java 打开 我想使用广播接收器关闭该活动 如何关闭该活动 首先 您的 Main java 需要注册为接收器 您可以在 Main java 的 onResume 中注册它 Override public
  • 将网站图标添加到网站[重复]

    这个问题在这里已经有答案了 可能的重复 HTML 标题图像 https stackoverflow com questions 3103490 html title image 有人可以告诉我如何让图标出现在 PHP 的浏览器选项卡上吗 我
  • 应用商店提交错误无效的捆绑结构

    当我尝试提交之前成功提交的应用程序版本升级时 我从 XCode 8 1 收到以下错误 错误 ITMS 90171 无效的捆绑包结构 不允许使用二进制文件 Particle app Particle armv7 除了受支持捆绑包的 CFBun
  • 如何在用户键入时获取 JTextField 内容的长度?

    JTextField 有一个 keyTyped 事件 但似乎在它触发时单元格的内容尚未更改 因此 如果在这里阅读 length 总是错误的 必须有一种简单的方法来获取用户在击键后显示的长度 这可能不是最佳方式 并且已经有一段时间了 但在过去
  • 单击 div 外部 - 当 div 具有触发事件的按钮时 - angularjs

    我使用以下指令来检测何时在 div 外部进行点击 app directive clickOut function window parse return restrict A link function scope element attr
  • 其他属性的 Maven 密码加密

    我想使用 Maven 的密码加密 例如它用于 Mojo 属性的节点 我尝试将加密密码粘贴到 mojo 的正确属性中 但它将其视为纯文本 我曾是hoping我可以在 Mojo 属性的注释上设置一个属性 该属性可以解释它可以被加密 如果可以 则
  • 如何从 C# 更新文件的更改时间?

    文件可以有更改日期 该日期与上次修改日期或上次访问日期不同 更改日期通过 UI 或 NET API 不可见 有两个 Win32 函数通过HandleEx获取文件信息 http msdn microsoft com en us library
  • 如何从不同的进程向 GUI 中的槽发出信号?

    语境 在 Python 中 主线程生成第二个进程 使用多处理模块 然后启动 GUI 使用 PyQt4 此时主线程会阻塞 直到 GUI 关闭 第二个进程始终处于处理状态 理想情况下应以异步方式向 GUI 中的特定插槽发出信号 问题 Pytho
  • 从高山图像中捕获 SIGTERM

    我试图从 docker 实例捕获 SIGTERM 信号 基本上是在调用 docker stop 时 但找不到方法 因为我执行的每次尝试都有不同的结果 以下是我的设置 Dockerfile FROM gitlab gitlab runner
  • Jasper 报告空白带仍然占用空间

    我的问题是 即使该行是空白的 它仍然占用带子高度的空间 因此在下一个带子之前有比平常更大的间隙 我的 jasper 文件中的乐队如下所示
  • 使用 Delphi Tokyo 10.2 通过 GetObjectProp 获取 TextSettings.Font.Style 属性

    我使用Delphi的GetObjectProp函数来获取表单组件的属性 我获取了几个组件的所有属性 但是我无法获取TLabel等组件的TextSettings Font Style 粗体 斜体 属性例如 我需要知道组件文本是粗体还是斜体 我