delphi - TCategoryPanel 到 TCategoryPanelGroup 的顺序

标签 delphi delphi-2010

我得到了一个完整的 Delphi 应用程序,其中包含 32 种不同的数据输入表单。我有 1 个主 TCategoryPanelGroup,上面有 115 个不同的 TCategoryPanel。

我们在每个表单上找到了 6 个主要 TCategoryPanel(main1 到 main6),并且我们向每个表单添加了一些特定的(具体 1、2、3 等)TCategoryPanel。

所有表单都已在应用程序中预构建,而不是在运行时构建。

这就是我管理这些表单的方式(32 个表单,每个表单平均有 10 个信息面板)

  • 在运行应用程序之前,所有面板均显示为 false,并且所有面板的顺序均正确;
  • 用户选择了 32 种表单之一;
  • 我确实按顺序显示(可见 true)这些面板: 主要1、主要2、主要3、具体1、具体2、主要4、主要5和主要6;
  • 然后我向用户展示表单;
  • 关闭表单时,我按顺序隐藏(visible false):main6、main5、main4、具体 2、具体 1、main3、main2 和 main1;

用户可能会打开另一个不同的表单(从 32 开始),并且相同的过程会再次进行。但不知何故,面板的顺序并不总是与我显示的(可见真实)它们相同。

有时,specific1 面板出现在 main1 之前,甚至在 main6 之后。 第一个打开的表单总是好的,打开和关闭不同的表单后,所有面板订单都混淆了。

我花了一些时间在网上查找,试图了解 TCategoryPanelGroup 在显示和隐藏面板时管理面板顺序的方式,然后你就可以了,我需要帮助。

嗯,问题很简单,是否有不同的方法来管理 TCategoryPanelGroup 上的面板顺序以满足我的需求?我们可以简单地让它们可见,而不是重新排列顺序吗?

到目前为止,我主要关注这两个链接,以获得类似的内容,但无法理解:

http://www.devsuperpage.com/search/Articles.aspx?G=2&ArtID=92075 http://codeverge.com/embarcadero.delphi.vcl.using/order-of-tcategorypanels-on-tcat/1066818

My MCVE

Download it here

特定面板的数量:

  • 表格 #1 = 4
  • 表格 #2 = 2
  • 表格#3 = 3
  • 表格#4 = 2

测试A:

  1. 打开表格 #1 {好的}
  2. 关闭
  3. 打开表格#3{好的}
  4. 关闭
  5. 打开表单 #1 {不行,因为从最低 nb 的特定面板中还有 1 个面板尚未打开}
  6. 关闭
  7. 打开表格#4{好吧}他现在是特定开放小组中最低的 nb,得分为 2。
  8. 关闭
  9. 打开表格 #3 {不行,因为有 3 个特定面板,而目前打开的最低面板数已降至 2}
  10. 关闭应用程序。

测试B:

  1. 打开表格#3{好的}
  2. 关闭
  3. 打开表格 #4 {好的,具体的最低 nb 现在为 2}
  4. 关闭
  5. 打开表格 #3 {不行,因为有 3 个特定面板,而目前打开的最低面板数已降至 2}
  6. 关闭
  7. 打开表格 #2 {好的,因为我们现在已经等于 nb 的特定最低值,即 2}
  8. 关闭它
  9. 打开表格 #3 {不行,因为有 3 个特定面板,而现在打开的最低面板已降至 2 个。这里我们有另一种情况,因为特定的 #2、#6 和 #4 现在混合在一起,也没有重新分组}
  10. 关闭应用程序。

2种不同的整体情况:特定面板未重新分组以及特定面板顺序混淆。在逐个打开表格之前我确实了解发生了什么,但找不到解决方法。

最佳答案

好吧,我自己搞定了

TCategoryPanelGroup 使用 TOP 属性管理 TCategoryPanel 的顺序。

如果您始终有相同数量的面板以相同的顺序显示,则以相反的顺序隐藏(可见:假)它们并按顺序显示(可见:=真)它们可能会起作用。

我发现这篇文章与启发我的 TOP 属性相关:How to reorder categories in TCategoryPanelGroup (Delphi XE) 。在这篇文章中,解决方案是为第一个面板提供从 0 开始的精确 TOP 值,第二个面板等于第一个面板的高度值,依此类推。

我发现在显示所有面板之前给它们相同的 TOP 值会更容易...小心,为了防止面板困惑,您需要给出一个大于 TCategoryPanelGroup 中最长形式的 TOP 值面板折叠为 false。

因此,无论确切的顺序如何,隐藏所有面板并向每个面板赋予 TOP 值 := 10000 现在已修复。

回顾:

  • 所有面板都是不可见的{无论您以何种顺序使它们不可见}。
  • 所有面板都有相同的 TOP 值 := 10000; {比最长形式更有值(value)}
  • 按照从上到下的确切顺序显示面板;

我们就这样完成了!

My MCVE with the solution included download it here

关于delphi - TCategoryPanel 到 TCategoryPanelGroup 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397488/

相关文章:

delphi - Team Foundation Server 上的 SVN - Delphi 2010

delphi - Delphi 泛型类可以从其类参数派生吗?

delphi - 如何在jenkins节点上设置多个delphi版本?

windows - Delphi 10.2 for Win64 Release Target 下的 FillChar 和 StringOfChar

delphi - InStrB VB6 到 Delphi

database - 如何从 TDBAdvListView 中删除选定的数据库记录?

Delphi:以某种结构存储数据

delphi - 对 delphi 2010 代码进行逆向工程 - UML 工具

delphi - 需要 Delphi 6 示例在 TIdSmtp 发送操作期间更新进度条,特别是对于大型附件

delphi - Delphi中如何消除重复常量?