gpt4 book ai didi

delphi - 移动表单上的其他组件时更新自定义组件

转载 作者:行者123 更新时间:2023-12-03 19:45:14 26 4
gpt4 key购买 nike

我正在考虑用 Delphi 的表单设计器替换旧的自定义表单设计器。我们的应用程序使用自定义程序来生成可用于我们自己的报告编写器的表单。旧的应用程序很难维护,使用 Delphi 作为表单设计器似乎是一个不错的选择。使用这种表单的应用程序也是用 Delphi 编写的,但这些表单实际上不会显示为真实的表单,我们将只遍历组件并生成我们的报告。

当前表单设计器的功能之一是“邻居列表”。邻居列表跟踪表单上每个单元格的下一个顶部、底部、右侧和左侧单元格。在设计阶段保存表单时,旧设计器会更新此列表。

我需要非常轻松地跟踪映射到您的典型控件属性(位置、高度、宽度等)的所有其他内容。我不知道如何在 dfm 中生成和保存这种类型的邻居信息。

在设计时,表单上的组件有什么方法可以在表单上的任何内容发生更改时触发事件?还是保存表单时的事件?

我考虑了两种解决问题的方法
1) 将邻居信息保存在每个单独的控件中。这会起作用,但是当表单上的其他控件被移动时仍然存在不同步的问题,除非我能得到一个让我知道何时更新的事件。

2) 有一个只跟踪列表的非可视组件。我可以添加一个自定义属性编辑器页面,该页面上有一个“更新”按钮,可以重新生成列表,但是我需要记住在保存最终版本之前单击它。我可以看到这一步被错过了,我宁愿有一些可以正常工作的东西。

我还可以更改应用程序以在运行时动态查找邻居,但我希望我能找到一种方法让它在设计时工作。

任何版本的 Delphi 的解决方案都可以工作。

任何关于为什么这是一个坏主意的评论也将不胜感激,因为我还没有 100% 地说服自己这是正确的方法。 :-)

最佳答案

创建一个新的 TForm 后代并覆盖 DefineProperties作为流处理的一部分加载和保存列表的函数。 Marco Cantù 在他的 Delphi Developer's Handbook 中介绍了添加新设计时间表单的细节。 ,但您可能只需调用 RegisterCustomModule在您的注册程序中。

或者,您可以创建一个 TApplicationEvents对象 (AppEvnts.pas),分配 OnMessage处理程序,并注意任何 WM_SIZE消息。然后您可以使用 FindControl获取消息所针对的 TWinControl 并检查它是否为您的表单的父级。确保您在此处执行的任何过滤都很快,因为 OnMessage 将看到整个 IDE 的每条消息。

关于delphi - 移动表单上的其他组件时更新自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463346/

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