修改VCL组件代码

2024-04-03

我需要更改组件中的功能。当您收到“您无法覆盖此”消息,或者您需要更改私有方法中的代码(“基类中不存在该方法”消息),导致组件无法下降时,您该怎么办?


如果我遇到这个问题,

  • 我首先尝试从组件或其 CustomXXX 祖先继承,看看是否可以解决问题。如果没有的话,
  • 我更深入,即尝试拦截传入的消息。这可以动态完成。如果事实证明这太深了,因为必须构建的代码太广泛,或者如果我仍然必须访问我无法访问的项目,
  • 我尝试黑客。一种技巧是将组件和依赖代码复制到具有不同名称的新单元,重命名组件并修改需要修改的内容。
  • 有时我只需要重做一两个方法就可以使我的新行为成为可能。

永远不要忘记给单元一个不同的名称,也给组件一个不同的名称(可能继承自原始组件或其祖先之一,因此它们保留在同一层次结构中)。做never修改原始源代码,然后重新编译VCL。这是维护的噩梦。

我不喜欢中介类,即与原始类具有相同名称但行为不同、继承自原始类的类。它们的功能取决于 use 子句中包含的顺序,这对我来说似乎很不稳定。我不能推荐这样做。

但我做什么很大程度上取决于问题。我认为人们不能(或应该)给出涵盖所有情况的一揽子建议。

但我的主要建议是:不修改原来的单位,总是把new code in a new unit并使用新班级名称。这样原始版本和修改版本就可以和平共存,在 IDE 中也是如此。

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

修改VCL组件代码 的相关文章

  • delphi分组框标题颜色变化

    我正在使用 BDS 2006 想知道您是否可以使用项目中存在的 XPmanifest 更改组框和单选按钮组标题的颜色 因为它始终是蓝色 唯一的方法是重写 Paint 方法TGroupBox http docwiki embarcadero
  • 如何使用 jQuery 和“长轮询”通过 Indy HTTP 服务器动态更新 HTML 页面?

    我读过这篇文章使用 JavaScript 和 jQuery 的简单长轮询示例 http techoctave com c7 posts 60 simple long polling example with javascript and j
  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 如何允许表单接受文件删除而不处理 Windows 消息?

    在 Delphi XE 中 我可以允许我的表单接受文件 拖放 但不必处理裸窗口消息吗 您不需要处理消息来实现这一点 你只需要实施IDropTarget并打电话RegisterDragDrop RevokeDragDrop 这真的非常非常简单
  • Delphi DataSnap REST 服务器从 TStream 返回 JSON 数组,而不是二进制

    我有一个与 Android 客户端通信的 REST 服务器 我将它从 XE3 ish 升级到 Berlin 其中一个服务器方法返回一个包含 jpeg 的 TStream 并且工作得很好 很高兴将图像作为二进制图像返回 升级到 Berlin
  • 从delphi应用程序调用.net4.0 com服务器后出现错误异常

    我们正在将代码库从 BDS2006 迁移到 Rad Studio XE 我们发现了一些非常奇怪的行为 如果我们在从 Net4 0 中实现的 COM 服务器创建一些对象后进行无效的浮点运算 即除以零 我们不会没有得到正常异常 即 EDivis
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 如何追踪手柄泄漏?

    在我的一个应用程序中 我观察到句柄数量不断增加 在不使用应用程序的情况下 该数字大约每秒增加一次 因此后台处理代码的某些部分一定存在句柄泄漏 我如何追踪此类泄漏 有什么工具可以帮助解决这个问题吗 跟踪句柄泄漏时要寻找哪些模式 导致手柄泄漏的
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 在Delphi 7中,为什么我可以给const赋值?

    我将一些 Delphi 代码从一个项目复制到另一个项目 发现它在新项目中无法编译 但在旧项目中可以编译 代码看起来像这样 procedure TForm1 CalculateGP const Price money 0 begin Pric
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • 如何在Delphi中显示Vista风格的气球提示?

    在输入验证时 我使用气球提示而不是消息框 我的问题是 在 Vista 上 它们具有带圆角的旧 XP 样式 而不是较新的矩形外观 我尝试使用 CreateWindowEx 创建它们并且tooltips class32或使用 SendMessa
  • 如何比较枚举类型集

    从某个时刻开始 我厌倦了编写设定条件 and or 因为对于更多的条件或更长的变量名 重新编写会变得笨拙且烦人 所以我开始写助手这样我就可以写ASet ContainsOne ceValue1 ceValue2 代替 ceValue1 in
  • CharInSet 不适用于非英文字母?

    我已经将应用程序从 Delphi 2007 更新到 Delphi 2010 一切都很顺利 除了一条编译正常但不起作用的语句 If Edit1 Text 1 in S then ShowMessage Found else ShowMessa
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove

随机推荐

  • JVM 退出代码 1073807364 的原因是什么?

    我构建了一个基于 RCP 的应用程序 我的一位用户在 Windows XP Sun JVM 1 6 0 12 上运行时 应用程序完全崩溃了 应用程序运行两天后 这不是新版本或其他任何东西 他得到了漂亮的灰色 JVM 强制退出框 退出代码 1
  • JAX RS,我的过滤器不起作用

    我的工作是 使用 JAX RS 和 Jersey 进行基于 REST 令牌的身份验证的最佳实践 https stackoverflow com questions 26777083 best practice for rest token
  • 开发 Excel Addin 时释放 COM?

    我知道在使用互操作时应该释放 COM 对象 开发和加载项 例如 Excel 时情况是否有点不同 这是我的一个循环 我很好奇是否Marshal ReleaseComObject是必要的 foreach var sheet in results
  • Regex / Preg:如果找到则不匹配

    我正在尝试做一些 PHP preg 但如果我想要一个没有任何东西的字符串 我似乎无法让它匹配 Example Hello My name is b Peter Jack b 如果找到 Peter Jack 的姓氏 则它将不匹配 但如果找到
  • 如何在 iOS 上发送短信而不需要用户同意?

    如何从 iOS 应用程序向某人发送文本消息 本地或通过使用 API 而无需他们事先与消息交互 该消息将被预先编写并通过点击屏幕发送 如果用户需要一次就可以了 但我需要一种发送消息的方法 而不必让用户每次都与他们的设备交互 例子 手机关机 我
  • 将值分配给 pandas 数据框值以获取另一列中的唯一值

    我有以下数据框 df pd DataFrame marks 40 60 90 20 100 10 30 70 students Jack Jack Jack Jack John John John John marks students 0
  • 如何使用 Python 从文本文件中绘制数据

    我有一个文本文件 其中包含来自连接到树莓派的传感器的近 50k 行数据 它看起来像这样 2014 07 16 15 57 35 536579 128 251 254 255 30 062 2014 07 16 15 57 37 763030
  • 在 Google Play 上发布新的生产版本而不影响 Beta 版

    我在 Google Play 商店中有一个生产应用程序 我还使用 Google Play 测试版功能向有限的群体发布了测试版 但是 如果我对生产应用程序进行更改 则需要重新构建并重新发布测试版应用程序 因为它会被新的生产版本覆盖 当我想在生
  • Jest TypeError:不是 Jest.mock 中的构造函数

    我正在尝试使用 jest 编写一个单元测试用例 并且需要模拟以下模式 我收到 TypeError 不是构造函数 用例 我的用例如下所述 我的组件 js import serviceRegistry from external service
  • 在 Windows 上运行在 Cygwin 中编译的 C++ 可执行文件

    The Idea我在 Cygwin 上使用 G 编译了一个 C exe 我希望能够通过 PHP 将该 exe 的输出放入我的 HTML 中 也就是说 假设我有一个 C 可执行文件 test exe 它输出 Hello World 运行时 那
  • 如何在自托管环境中对 ASP.NET Core 中的静态内容进行 gzip

    使用自托管环境发布 ASP NET Core 网站时 是否有方法提供 gzip 静态内容 编辑2016 11 13 还有另一种方式来提供 gzip 压缩文件来替代步骤 2 和 3 它基本上是相同的想法 但是有一个 nugetpackage
  • Jackson ObjectMapper:日期序列化和反序列化问题

    我想禁用宽松选项中Jackson Deserializer严格反序列化日期字段 基本上 我希望下面的代码抛出异常而不是 解析33 Aug 2016 as 02 Sep 2016 1 订单 java package com test date
  • 如何在项目中任意ViewController中全局访问Class中的数据

    我是斯威夫特的新手 目标 访问全球数据 如何使用Swift实现全局临时存储 使用下面的类来存储数据 In C 1 我使用具有静态属性的类 Class TransactionData public static DateTime dateTi
  • Python 2.7 - ttk 模块似乎无法在 Windows 8.1 中工作

    我的应用程序的 GUI 是Tkinter基于并且它非常实用 我一直在尝试使用 ttk 让它看起来更现代 我用Python 2 7在 Windows 8 1 中 输入ttk没有错误和编码 包括ttk在脚本中运行没有错误 然而 生成的界面看起来
  • android:删除ldpi/mdpi文件夹的陷阱

    我想知道删除我的 android 项目上的 ldpi mdpi hdpi 文件夹有什么陷阱 我可以只复制可绘制文件夹中的所有图像吗 我确实看到了以下关于 android UI 开发的链接http developer android com
  • SSL 套接字连接超时

    如何在 Java 中配置 SSL 套接字的连接超时 对于普通套接字 我可以简单地创建新的套接字实例 而无需使用任何目标端点new Socket 然后调用连接 SocketAddress端点 int超时 http download oracl
  • struts2 异步操作

    希望使用带有 Serlvet 3 0 异步支持的 Struts2 我的第一个方法是只处理写入操作中的输出流并返回 null 然而 这会返回 404 资源不可用 我试图在 struts 操作中调整 Bosh servlet 使用 Servle
  • 更新应用程序的最佳方式

    我正在使用 WPF 技术开发游戏 我想每三天向游戏添加新功能 更新的大小对我来说很重要 我的游戏需要联网才能启动 就像网络游戏一样 另一个挑战是更新的大小 最重要的注意事项 我需要更新程序不需要停止 你的建议是什么 clickonce 是个
  • 如何将 XYSplineRenderer 图中的正方形形状更改为点

    In JFreeChart XYSplineRenderer Graph I need to display small dots instead of small squares to display XY coordinates How
  • 修改VCL组件代码

    我需要更改组件中的功能 当您收到 您无法覆盖此 消息 或者您需要更改私有方法中的代码 基类中不存在该方法 消息 导致组件无法下降时 您该怎么办 如果我遇到这个问题 我首先尝试从组件或其 CustomXXX 祖先继承 看看是否可以解决问题 如