在 Delphi 中通过名称获取类

2023-12-11

我想编写一个接受类名并产生相应结果的函数TClass。我注意到,System.Classes.GetClass如果类名未注册,该函数将不起作用。

Example:

if(GetClass('TButton') = nil)
then ShowMessage('TButton not found!')
else ShowMessage('TButton found!');

前面的代码总是显示:

未找到 TButton!

是不是少了点什么?


您可以通过扩展 RTTI 获取 Delphi 应用程序中使用的未注册类。但是您必须使用完全限定的类名来查找该类。TButton还不够,你必须寻找Vcl.StdCtrls.TButton

uses
  System.Classes,
  System.RTTI;

var
  c: TClass;
  ctx: TRttiContext;
  typ: TRttiType;
begin
  ctx := TRttiContext.Create;
  typ := ctx.FindType('Vcl.StdCtrls.TButton');
  if (typ <> nil) and (typ.IsInstance) then c := typ.AsInstance.MetaClassType;
  ctx.Free;
end;

注册类可确保该类被编译到 Delphi 应用程序中。如果类未在代码中的任何地方使用并且未注册,则它不会出现在应用程序中,并且扩展 RTTI 在这种情况下将有任何用处。

将返回任何类(注册或未注册)的附加函数,而不使用完全限定的类名:

uses
  System.StrUtils,
  System.Classes,
  System.RTTI;

function FindAnyClass(const Name: string): TClass;
var
  ctx: TRttiContext;
  typ: TRttiType;
  list: TArray<TRttiType>;
begin
  Result := nil;
  ctx := TRttiContext.Create;
  list := ctx.GetTypes;
  for typ in list do
    begin
      if typ.IsInstance and (EndsText(Name, typ.Name)) then
        begin
          Result := typ.AsInstance.MetaClassType;
          break;
        end;
    end;
  ctx.Free;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Delphi 中通过名称获取类 的相关文章

  • DELPHI 和 WANT 或 NANT

    We use 巡航控制 net http confluence public thoughtworks org display CCNET Welcome to CruiseControl NET在 Delphi 2006 应用程序中进行持
  • 查找Delphi项目中的所有编译错误

    我正在对我的 Delphi 项目进行一些重构 我希望能够做出改变 然后看看all项目中因该更改而中断的地方 类似于 Eclipse 列出项目的所有编译错误 在 Java 中 在 Delphi 中 我可以进行更改 然后重新编译我的项目 但编译
  • 如何从 Delphi 中的函数返回对象而不导致访问冲突?

    我有一个返回 TStringList 的 delphi 函数 但是当我返回一个值并尝试使用它时 我收到一个访问冲突错误 即 myStringList FuncStringList myStringList Items Count lt Th
  • 在Delphi 7中,为什么我可以给const赋值?

    我将一些 Delphi 代码从一个项目复制到另一个项目 发现它在新项目中无法编译 但在旧项目中可以编译 代码看起来像这样 procedure TForm1 CalculateGP const Price money 0 begin Pric
  • 使用 jQuery 更改 CSS 类属性

    有没有办法使用 jQuery 更改 CSS 类的属性 而不是元素属性 这是一个实际的例子 我有一个 div 类red red background red 我想转班级red背景属性 而不是具有类的元素red分配的背景 如果我用 jQuery
  • 内联函数以及类和头文件

    头文件中定义的任何函数都会自动内联吗 如果我在类中声明一个函数并使用关键字 inline 在外部给出定义 那么这个函数会是内联的吗 如果是 为什么这不违反内联函数应在声明时赋予主体的法律 类定义中定义的任何函数都是内联的 任何标记的功能in
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 调用类实例方法 onclick javascript

    我有一个 javascript 文件 其中包含包含方法函数的类 我想知道如何从 onClick 事件调用类实例方法 function MyClass this instanceData Display Me this DisplayData
  • 如何在Delphi中显示Vista风格的气球提示?

    在输入验证时 我使用气球提示而不是消息框 我的问题是 在 Vista 上 它们具有带圆角的旧 XP 样式 而不是较新的矩形外观 我尝试使用 CreateWindowEx 创建它们并且tooltips class32或使用 SendMessa
  • 将图像加载到 TImageList 并读取它们?

    我试图通过将 jpg 转换为 bmp 然后将其保存到 imagelist1 来将 jpg 加载到图像列表中 从上到下的代码片段 Selectdir 有效 fileexists 部分有效 这用于加载文件夹中的所有图像 所有图像都以 0 jpg
  • 时间:2019-03-17 标签:c#backgroundworker和partialclass

    我在实现从堆栈溢出获得的代码时遇到问题 它是关于终止后台工作进程的 我的代码如下 using System using System Collections Generic using System Data using System Dr
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • Delphi - 如果没有创建类,为什么这个函数可以工作?

    考虑这个类 unit Unit2 interface type TTeste class private texto string public function soma a b integer string end implementa
  • 为什么 Delphi 中的 ADO Next 记录处理速度变慢?

    我有一个多年前开发的 Delphi 4 程序 它使用Opus 直接访问 http sourceforge net projects directaccess 按顺序搜索 Microsoft Access 数据库并检索所需的记录 Delphi
  • 类方法作为 JavaScript 中的事件处理程序?

    JavaScript 中是否有最佳实践或通用方法将类成员作为事件处理程序 考虑以下简单示例
  • 自定义类的重写 bool() [重复]

    这个问题在这里已经有答案了 我想要的只是 bool myInstance 返回 False 并且 myInstance 在 if or and 等条件下计算为 False 我知道如何覆盖 gt 我试过这个 class test def bo
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • 如何在表单上绘制半透明图像?

    我想在 Delphi 窗体上绘制半透明图像 但由于某种原因它不起作用 Here is the original PNG border is semi transparent 我将图像加载到TImage object Image1 Trans
  • 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

    如果我需要通过某些方式获取 URL 我该如何获取 URLproxy 它必须有一个timeout最大 n 秒 和一个用户代理 require nokogiri require net http require rexml document d
  • Delphi - Indy - 保存 GMail 草稿

    我一直在 Delphi 下使用 Indy 通过 gmail 帐户发送消息 使用 TIdSMTP 和 TIdMessage 组件 这绝对没问题 但是 我的客户请求将消息保存到 DRAFTS 文件夹 以便他在实际发送消息之前对 以编程方式创建的

随机推荐

  • 通过数组运算有效搜索包含子排列的排列?

    我有一组整数 比如 S 1 10 以及两个矩阵 N 和 M 它们的行是 S 阶元素的一些 但不一定是所有可能的 排列 比如 3 和分别为 5 个 例如N 1 2 3 2 5 3 M 1 2 3 4 5 2 4 7 8 1 排列 P 的子排列
  • Spark 中的嵌套并行化?正确的做法是什么?

    嵌套并行化 假设我正在尝试在 Spark 中执行相当于 嵌套 for 循环 的操作 就像在常规语言中一样 假设我在内部循环中有一个例程 可以以这种方式估计 PiPi Average Spark 示例确实如此 请参阅估计 Pi i 1000
  • Python lmfit 约束:a < b < c

    我在用lmfit在Python中拟合一些数据 其中包括拟合变量a b和c 我需要确保 a http cars9 uchicago edu software python lmfit MinimizerResult constraints h
  • Android 和 Proguard?

    我正在尝试在我的 Android 应用程序中使用 proguard proguardGui 接受一个输入和一个输出 输入需要一个 jar 文件 但是android的APK文件不包含任何jar 我尝试传递 apk 文件以及 apx 内的 de
  • 登录失败时如何在没有数据绑定的情况下清除PasswordBox的内容?

    我有一个 wpf 应用程序 由于我无法控制的原因 我正在仔细遵循 mvvm 模式 出于我无法控制的安全原因 我不想将数据绑定到我的密码框 登录失败时如何清除密码框内容 我更喜欢在 xaml 中这样做的方法 您可以创建您的attached D
  • 如何在 WebView 中上传多个图像?

    如何使我的应用程序的 WebView 中的文件上传行为与浏览器应用程序中的行为相同 我正在尝试在我的 Android 应用程序中创建一个 WebView 允许上传用相机拍摄的多张图像 当我在浏览器应用程序中打开下面的 HTML 代码时 我可
  • 使用 Javascript 加载其他外部 Javascript

    我有一个 JS 代码库可以从文件夹中加载 而不是键入HTML 文档的标记中一行一行 有没有一种方法可以仅链接一个 Javascript 文件来组织并自动加载其他 javascript 文件 我知道 Dojotoolkit 正在使用这种技术
  • 使用实体框架级联删除 - EF 删除的相关实体

    我在实体框架中遇到删除问题 简而言之 EF 显式尝试从数据库中删除实体 即使我已显式配置 EF 以在数据库中使用级联删除 我的设计 我有三种实体类型 MainEntity EntityTypeA and EntityTypeB EF已配置删
  • Google 地图嵌入 + 搜索框

    我正在尝试为我的网站制作一张地图 它将显示一些餐馆的标记 我还希望人们能够搜索地图 这样他们就可以查找地址并能够看到该地区的餐馆 我得到了带有我想要的标记的地图代码
  • 右浮动和绝对位置不能一起工作

    我希望 div 始终位于其父 div 的右侧 所以我使用float right 有用 但我也希望插入时不影响其他内容 所以我使用position absolute Now float right不起作用 我的 div 始终位于其父 div
  • 如何让 UITextView 检测网站、邮件和电话号码的链接

    我有一个 UITextView 对象 UIView 中的文本有电话号码 邮件链接 网站链接 我想将它们显示为具有以下功能的链接 当有人点击 URL 时 Safari 应打开该网站 当有人点击电子邮件链接时 邮件应该打开 并且我的地址位于字段
  • 将 CCMenu 与网格对齐

    有谁知道让 CCMenuItems 数组与网格对齐的最佳实践方法 这是一个cocos2d问题 例如 int levelCount 10 CCMenu menuArray CCMenu menuWithItems nil for int x
  • 使用ajax设置PHP会话变量

    想要更改 SESSION 变量 fullname 的值而不刷新页面 我使用ajax的实现 第 1 页 html
  • java swing应用程序中的快速搜索?

    我正在思考什么组件最适合在 swing 中显示快速搜索结果 我想创建这样的东西 创建一个文本字段 用户可以在其中输入一些文本 在输入过程中我将改进数据库的后端快速搜索 并且我想在文本框下方显示数据 他将能够浏览结果并按输入结果将显示在表格中
  • 在ASP.NET中添加动态控件,1.1和2.0有区别吗?

    我非常确定在 ASP NET 1 0 1 1 时代 需要在运行时创建的控件之前添加Page Load事件的页面生命周期 即里面Page Init 这是 Microsoft 的一篇文章 针对 NET 1 0 1 1 如何 在 ASP NET
  • 将 UWP 应用上传到 Windows 应用商店时出错:无法合并 PRI 文件 \Resources_split.scale-100.pri

    我正在将应用程序的最新版本上传到 Windows 商店 但我的应用程序抛出错误 包接受验证错误 我们遇到了致命错误 解析包时 MyApp UWP 2 33 0 0 x86 x64 ARM AppStore appxbundle 失败 合并
  • java中txt文件格式验证

    验证 txt 文件是否为以下内容的最佳方法是什么 事实上 是一个 txt 文件 而不是其他类型的文件 仅更改了扩展名 txt 文件的格式与指定的格式匹配 因此能够正确解析 包含所有相关信息等 这一切都是在 Java 中完成的 其中将检索文件
  • 未捕获的引用错误:..未定义..但我可以在错误字符串中看到该变量

    这行代码var sTest 返回 未捕获的引用错误 未定义 对于这个问题 如果我们假设我传递的 ID 为 ABC 当我使用 Chrome 中的开发人员工具并检查资源时 我可以看到 GEThas有效 因为它显示了变量值 本例中的错误消息是 未
  • 在mysql中使用单个where条件和单个关键字搜索表的所有列

    我有一个由 64 个不同字段组成的表 我将使用其中的单个关键字进行搜索 结果应与任何字段中的关键字匹配 给一些建议 SELECT FROM some table WHERE CONCAT WS column1 column2 column3
  • 在 Delphi 中通过名称获取类

    我想编写一个接受类名并产生相应结果的函数TClass 我注意到 System Classes GetClass如果类名未注册 该函数将不起作用 Example if GetClass TButton nil then ShowMessage