替换delphi中的组件类

2024-02-21

我知道我在某个地方看到过一个 hack 的例子,用于定义现有 VCL 组件的自定义版本,例如TButton or TEdit,具有相同的类名,并执行一些操作,以便 DFM Streamer 实例化您的版本而不是原始版本。不幸的是,我所处的情况是我需要能够做到这一点,但我找不到这篇文章。有谁知道在哪里可以找到有关如何实现此目标的信息?


在您的表单中,您可以覆盖ReadState像这样的方法:

type
  TMyForm = class(TForm)
  protected
    procedure ReadState(Reader: TReader); override;
  end;

procedure TMyForm.ReadState(Reader: TReader);
begin
  Reader.OnFindComponentClass := FindComponentClass;
  inherited;
end;

procedure TMyForm.FindComponentClass(Reader: TReader; const ClassName: string;
  var ComponentClass: TComponentClass);
begin
  if ComponentClass=TButton then begin
    ComponentClass := TMySuperDuperButton;
  end else if ComponentClass=TEdit then begin
    ComponentClass := TMyTotallyAwesomeEdit;
  end;
end;

可能还有很多其他方法可以做到这一点,但这就是我的做法!

编辑:检查TReader.GetFieldClass(Instance: TObject; const ClassName: string)梅森回忆起的黑客行为。第一行设置ClassType := Instance.ClassType。所以我怀疑通过更改 pas 文件中的声明Button1: TButton to Button1: MyUnit.TButton将导致您的按钮被创建。或者也许黑客是添加MyUnit到最后的 use 子句,以便您的 TButton 版本是在范围内的版本。然而,这些听起来都不实用。

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

替换delphi中的组件类 的相关文章

  • 在 tlistbox 中绘制缩略图

    在 DelphiXE 中 我使用 tFileOpenDialog 选择一个文件夹 然后在 tListBox 中列出该文件夹中的所有 jpg 文件 我允许将列表项拖放到列表中进行自定义排序 以便稍后按顺序显示它们 我希望能够在文件名旁边绘制图
  • SSL 错误 1409442E 使用 TIdHTTP 通过 HTTPS 下载文件 [重复]

    这个问题在这里已经有答案了 我正在使用德尔福10 3 3 下面的代码曾经有效 但现在尝试通过 HTTPS 下载文件时遇到错误 连接 SSL 错误错误 1409442E SSL 例程 SSL3 READ BYTES tlsv1 警报协议版本
  • 如何使用 VCL 类的接口 - 第 2 部分 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 继续我之前关于使用 VCL 接口的调
  • 有没有办法在 TRttiField 中 FieldType 为零的结构中获取 real48 和短字符串变量的 RTTI 提示?

    我发现 Delphi 中的扩展 RTTI 功能有一个奇怪的疏忽 可能是故意的 我想转储包含大约 1500 个不同字段的记录类型中的所有字段 是的 认真的 其中一些是 real48 类型 一些是短字符串 对于这两种类型 在运行时这些类型的 F
  • 如何安装DBMonitor

    这可能是一个非常简单的问题 但就是这样 我刚刚更新了 Firebird 的 DevArt DBExpress 驱动程序的许可证 帮助文件说我可以使用他们的免费软件 DBMonitor 应用程序 但由于我使用的是 D2006 所以我必须使用以
  • Delphi RTTI,已发布的属性出现两次

    我想对属性使用属性 但这些属性偶尔会在继承的类中发生更改 这是一个示例代码 非常简化 TBaseClass class TObject private FFoo string published BaseAttirib hello prop
  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • 无法通过Delphi替换Word应用程序中的页脚文本

    我正在尝试替换页脚中的文本 我使用以下代码 通过它我可以替换正常内容 正文 但不能替换页脚 页眉中的内容 myWinWordApp CreateOLEObject Word Application myWinWordApp visible
  • 在 Inno Setup 中使用 StringToColor

    我想为表单上的标签 TNewStaticText 属性颜色 TColor 读写 分配一些颜色 我将颜色存储为 RRGGBB 字符串 我想使用 Delphi 函数 StringToColor 将其转换为 TColor 但如果我在脚本中使用此函
  • 为什么我不能在接收数组参数的函数中使用 SetLength?

    我正在尝试使用以下函数来设置动态数组 即 var 参数 的长度 当我尝试编译代码时只有一个错误 dcc64 错误 lolcode dpr 138 E2008 不兼容类型 function execute var command array
  • 创建FileStream时如何处理异常

    我有一个这样的函数 我想重构它 function Myfunction sUrl sFile String Boolean var GetData TFileStream begin Result False if the line bel
  • ComboBox.Sorted 发生了什么:= True;在德尔福 10.2 中?

    最近我的最后一个问题获得了 风滚草 徽章 我不确定是否应该问更多问题 但这里是 我正在填充一个TComboBox使用 sqlite 表中的项目 效果很好 在我以前的 Delphi 版本中 我能够使用ComboBox1 Sorted True
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 在运行时创建 TQReport 元素

    在运行时创建 TQReport 元素 嗯 至少尝试一下 我不知道这份报告中应出现哪些标题或数据 我得到一个代表数据行和列的 TString 的 TList 我在组的带打印事件中植入 创建 指令 并在主数据行带的 OnNeedData 事件中
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 Vista 上安装 Delphi 7

    我多次尝试在 Vista 上安装 Delphi 7 但 Vista 告诉我此应用程序 Delphi 7 存在已知问题 从而阻止了我这样做 我公司的其他几个人在 Vista 上安装 D7 时遇到了问题 由此得出的结论是 我们的 D7 应用程序
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • Delphi TImageList 位图更改

    我正在使用 Delphi XE2 Update 3 Update 4 与我们的一些第 3 方组件不兼容 因此我们尚未更新 我在我的应用程序中使用 TImageList 我注意到很多时候当它从源视图切换到表单视图 F12 时 突然之前未修改的
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl

随机推荐

  • CoreMotion 陀螺仪苹果手表

    我正在尝试访问苹果手表的陀螺仪 据我所知 它可以在 watchos 3 中使用 不幸的是我无法让它工作 它不断返回 陀螺仪不可用 因此 MotionManager isGyroAvailable 始终为 false 这是我的代码 任何帮助
  • Kotlin 本地函数必须在使用前声明

    在这个简单的代码示例中 fun testLocalFunctions aLocalFun compiler error unresolved reference at aLocalFun fun aLocalFun aLocalFun no
  • 如何保持领域数据与输入的顺序相同

    我有一个应用程序 需要将数据按照输入的顺序保存 数据被输入到 List 属性中 一切都很顺利 直到我必须删除一个项目 当删除发生时 列表中的最后一项将取代被删除的一项 UITableView 显示正确的项目数 但与领域列表不同步 一个例子是
  • R中的顺序混淆矩阵

    我根据 3 个类别的观察结果及其预测创建了一个混淆矩阵 classes c Underweight Normal Overweight 当我计算混淆矩阵时 它会按字母顺序组织表中的类 这是我的代码 Confusion matrix Obse
  • 为什么此解释中没有使用密钥?

    我期望这个查询使用密钥 mysql gt DESCRIBE TABLE Foo Field Type Null Key Default Extra id bigint 20 NO PRI NULL auto increment name v
  • 如何正确编写 Swift UI Toggle 的 UI 测试

    有谁知道如何正确编写 Toggle 的 UI 测试 即使在一个全新的项目中 整个 UI 中只有一个切换而没有其他内容 我仍然会收到此类错误 Failed to get matching snapshot Multiple matching
  • OpenCV detectorMultiScale() 参数的推荐值

    推荐的参数是什么CascadeClassifier detectMultiScale http docs opencv org modules objdetect doc cascade classification html cascad
  • 如何在 Node.js 中将 JPG 图像转换为 WEBP 格式?

    我正在尝试使用react Js上传图像并使用multer中间件将该图像保存在node Js中 这是完美的 但现在我想使用 webp converter 将该图像转换为 WEBP 格式 反之亦然 但我收到此错误 Error Command f
  • JavaScript 数字到单词

    例如 我正在尝试将数字转换为英语单词1234会成为 一千二百三十四 我的策略是这样的 将数字分成三位并将它们放入数组 finlOutPut 从右到左 转换每个组 每个单元格中finlOutPut数组 的三个数字到一个单词 这就是triCon
  • 使用 PHP、活动目录以及 IE/Firefox 对 ldap 进行身份验证

    下面的代码根据 ldap 检查用户的凭据
  • Tensorflow 不会在 CUDA 支持下构建

    我已经尝试从源代码构建张量流 如安装指南 https www tensorflow org install install sources 我已经成功地使用仅 cpu 支持和 SIMD 指令集构建了它 但在尝试使用 CUDA 支持构建时遇到
  • 在 ARM/Thumb (IOS) 上解码 BLX 指令

    我已经阅读了大部分 ARM 文档 但在解码 BLX 指令时仍然遇到问题 下面是两个例子 text 0000347C 02 F0 B2 ED BLX objc msgSend text 0000469C 01 F0 A2 EC BLX obj
  • 允许机器人访问 Telegram Group 消息[重复]

    这个问题在这里已经有答案了 比之前更进了一步如何将机器人添加到 Telegram 群组 https stackoverflow com questions 37338101 如何以管理员身份将机器人添加到 Telegram 群组 我已将我的
  • “strcpy”和“strcpy_s”之间的区别?

    当我尝试使用时strcpy复制字符串给了我一个编译错误 error C4996 strcpy This function or variable may be unsafe Consider using strcpy s instead T
  • 将数组的元素向左旋转

    我正在尝试解决来自的 JavaScript 挑战杰希罗网 挑战是这样的 编写一个旋转函数来旋转数组的元素 全部 元素应向左移动一位 第 0 个元素 应该放在数组的末尾 旋转后的数组应该是 回 旋转 a b c 应该返回 b c a 我能想到
  • 使用 HDF5 进行大型数组存储(而不是平面二进制文件)是否具有分析速度或内存使用优势?

    我正在处理大型 3D 数组 我经常需要以各种方式对其进行切片以进行各种数据分析 典型的 立方体 可以约为 100GB 并且将来可能会变得更大 看来Python中大型数据集的典型推荐文件格式是使用HDF5 h5py或pytables 我的问题
  • 使用 Visual Studio 2010 Express 将 .doc 保存/转换为 .html

    我有一个 Word 文档文件夹 我想将其转换为 html 以便进一步处理 我只有 Visual Studio 2010 Express 版本 可以使用 Express 版本吗 我找到了如何进行转换的示例 但它们需要 Microsoft Of
  • 如何反转 Julia 中的字典?

    如果我有一本字典 比如 my dict Dict A gt one B gt two C gt three 反转键 值映射的最佳方法是什么 一种方法是使用推导式通过迭代键 值对并一路交换它们来构建新字典 julia gt Dict valu
  • Qt 和 QMake 构建目录

    我想从源代码树中构建 qt 和 qt 应用程序 你知道如何使用configure和qmake从命令行设置 obj目录吗 如果我正确理解问题你应该设置对象目录 http qt nokia com doc 4 5 qmake variable
  • 替换delphi中的组件类

    我知道我在某个地方看到过一个 hack 的例子 用于定义现有 VCL 组件的自定义版本 例如TButton or TEdit 具有相同的类名 并执行一些操作 以便 DFM Streamer 实例化您的版本而不是原始版本 不幸的是 我所处的情