gpt4 book ai didi

delphi - 如何在不修改每个表单代码的情况下为应用程序中的每个表单添加边框?

转载 作者:行者123 更新时间:2023-12-03 15:45:05 24 4
gpt4 key购买 nike

我们有一个大型遗留数据库驱动的 VCL 应用程序,其中包含 300 多种不同的表单。我们希望提供一个练习(虚拟)数据库以及我们的软件,该软件与他们的生产数据库一起安装 - 能够在它们之间切换(用于培训/练习等)。

问题是,当用户使用练习模式时,我们必须向他们展示一些非常清晰的内容,以便他们知道自己正在练习模式下工作。最理想的解决方案是在每个表单的内边缘周围放置一个红色边框。但表格太多了,我不想逐一修改。

如何从一个全局位置沿着应用程序中每个表单的边缘添加这样一个框架(在 Windows 边框内部,而不是外部)?

我不能使用VCL样式,否则我会从那里实现它。我正在寻找全局范围内的东西,它可能会迭代每种形式并绘制此边界。但这也意味着捕获每个表单的调整大小消息并重新绘制此边框。

我能看到的最简单的方法是创建一个具有此功能的基本表单,并从此基本表单继承系统中的每个表单。但这仍然意味着确保每个表格都以此为基础。过去我们在修改现有表单的基本表单(另一个主题)时遇到了其他问题,因此如果有其他更简单的解决方案,我想避免使用该解决方案。

最佳答案

有多种方法可以连接到表单流系统,例如通过重写表单的 TComponent.ReadState 来将事件处理程序添加到处理流的 TReader 中,但它们要求您实际更改相关表单类中的代码。似乎没有任何方法可以在整个程序中全局修改 TReader 行为。因此,如果应用程序中的所有表单没有实际的基本表单类,则没有简单的方法可以做到这一点。

即使尝试在内存中修补 TComponent.ReadState 也很难正确完成,因为它是一个虚拟方法,并且没有 TCustomForm 的覆盖,因此您所做的任何更改都可能会影响所有组件,并且不仅仅是表格。

老实说,处理这个问题的最佳方法可能就是硬着头皮在代码库中运行全局搜索 class(TForm ) 并将它们全部更改为某个自定义表单类的子类表现出您正在寻找的行为。理论上可能还有其他方法来实现它,但它们需要一些非常复杂的运行时技巧,这些技巧可能会产生不可预测的副作用。

关于delphi - 如何在不修改每个表单代码的情况下为应用程序中的每个表单添加边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com