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

2024-03-18

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

问题是,当用户使用练习模式时,我们必须让他们非常清楚地看到一些东西,以便他们知道他们正在练习模式下工作。最理想的解决方案是在每个表单的内边缘周围放置一个红色边框。但表格太多了,我不想每一项都修改。

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

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

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


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

甚至尝试修补TComponent.ReadState内存中的方法很难正确执行,因为它是一个虚拟方法,并且没有 TCustomForm 的重写,因此您所做的任何更改都可能影响所有组件,而不仅仅是表单。

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

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

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

随机推荐