问题标签 [tcollectionitem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
651 浏览

delphi - 在 Delphi 编辑器中更改 TCollectionItem 的标签

我正在处理的组件使用 TCollection 来保存到其他组件的链接。在设计器中编辑项目时,它们的标签看起来像这样:

如何添加有意义的标签(可能是链接组件的名称)?例如

作为奖励,你能告诉我双击组件时如何使集合编辑器出现吗?

0 投票
1 回答
457 浏览

delphi - TCollectionItem 的继承

我打算收集存储在 TCollection 中的项目。

每个项目将派生TBaseItem自TCollectionItem,而这些项目又派生自TCollectionItem,

考虑到这一点,Collection 将TBaseItem在请求项目时返回。

现在每个TBaseItem都会有一个Calculate函数,在TBaseItemthis 中只会返回一个内部变量,但在每个函数的派生中都TBaseItem需要Calculate一组不同的参数。

Collection 将有一个Calculate All函数遍历集合项并调用每个Calculate函数,显然它需要将正确的参数传递给每个函数

我可以想到三种方法:

  1. 为基类中的每个计算函数创建一个虚拟/抽象方法并在派生类中覆盖它,这意味着使用对象时不需要类型转换,但这也意味着我必须创建大量虚拟方法并拥有一个大型 if...else 语句检测类型并调用正确的“计算”方法,这也意味着调用计算方法容易出错,因为您在编写代码时必须知道使用正确的参数以避免错误/EAbstractError。

  2. 创建一个包含所有可能参数的记录结构,并将其用作“计算”功能的参数。这具有将其传递给“计算所有”函数的额外好处,因为它可以包含所有所需的参数并避免可能很长的参数列表。

  3. 只需键入转换 TBaseItem 即可访问正确的计算方法。与第一种方法相比,这将整理 TBaseItem 很多。

处理这个集合的最佳方式是什么?

0 投票
3 回答
691 浏览

delphi - 是否可以?TCollection 后代实现存储任意内容的 TPanel 容器

我是 Delphi 组件开发的新手,因此想知道,是否有可能实现我的任务。

我需要创建一个基于 TScrollBox 的可视组件(用户控件),它将代表一堆 TPanel,所有这些面板都将在该 TScrollBox 内对齐为“顶部”,并且可以具有不同的高度。它必须充当 TCollection(添加、删除、重新排序),并且必须允许用户在设计时将其他控件添加到这些面板中。

我为组件创建了这些类:

该组件在设计时工作正常,我可以在堆栈中添加-删除面板,当我在任何面板上放置一些控件(例如 TCheckbox)时,它显示为“由该面板拥有”:例如我无法拖动此复选框面板外。

但此复选框不存储在 DFM 文件中,也不显示在“结构”窗口中。

我想TPanel的内容必须有一些手动序列化-反序列化,但我不知道该怎么做。在 Internet 上找不到任何示例。请给我一些指导,如果这样的实施是可能的。

加法

这是在网格中添加 3 个面板后我的 DFM 文件片段的样子:

如您所见,所有项目都是空的,但我将一个复选框和单选按钮放入项目#3。

0 投票
2 回答
316 浏览

c++ - 递归读取 TCollection

我对递归非常糟糕,以前从未使用过它。我知道它的理论.. 没有帮助:)) 对于我的问题,我有一个包含 TCollection 和 TCollectionItem 等的 TCollection 结构。我必须编写一个递归函数来读取我所有的 TCollectionItems。这是图形视图:

TCollection->TCollectionItem(s)->TCollection->TCollectionItem(s)

TCollection 可以有 1 个甚至 2,3 个 TCollection 在他下面,或者没有。

这里还有几个例子:

TCollection->TCollectionItem

TCollection->TCollectionItem->TCollection->TCollectionItem->TCollection->TCollectionItem

ETC ..

如果我描述的问题不好,请告诉我,我可能做了..请问是否有不清楚的地方:)

感谢您的支持!

0 投票
1 回答
434 浏览

delphi - Getting the index # of a TCollection Item when added to a TCollection

I know that when I add a collection item to a collection, the index is zero-based. I would like to make it one-based and show the value in a property called Id. Can someone tell me how I can go about this in code?

0 投票
1 回答
980 浏览

delphi - delphi中的TCollectionItem和析构函数方法

嘿,谁能告诉我以下示例中的析构函数的实现是否正确且相同?

// //这两个是一样的吗?

0 投票
1 回答
1690 浏览

delphi - TCollectionItem 未初始化默认属性值

我已经与这个疯狂的问题作斗争了好几个小时,却一无所获。我在使用 TCollection 的两个完全不同的项目中遇到了这个问题。添加新的集合项时,我需要初始化该项的值。但是,他们根本没有违约。我什至将它们设置在两个完全不同的地方,在项目的构造函数和集合的添加函数中——它们都不起作用。一旦项目在那里,我可以设置值,但我需要设置默认值。我过去做过收藏,从来没有遇到过这个问题,我一定在这里遗漏了一些东西......

0 投票
3 回答
3306 浏览

delphi - 如何重新排序 TCollection 中的项目?

我正在尝试实现 MoveItemUp 和 MoveItemDown 方法,它们将选定的行向上或向下移动一个索引TCollection

添加到我的 TCollection 子类的以下代码不起作用:

我相当肯定这在运行时必须是可能的,因为它在设计时由 Delphi IDE 本身完成,它提供了一种重新排序列表中集合项的方法。我希望通过简单地重新排序现有对象来做到这一点,而无需创建、销毁或分配任何对象。这可能来自 Classes.pas TCollection 的子类吗?(如果没有,我可能必须从源克隆制作自己的 TCollection)

0 投票
3 回答
5940 浏览

delphi - 创建具有命名子组件的组件?

我需要了解使组件生成和管理子组件的基础知识。我最初通过创建一个 来尝试这个TCollection,并尝试在每个TCollectionItem. 但我知道这并不像我希望的那么容易。

所以现在我要从头开始这个项目,这次我想把它做好。这些子组件不是可视组件,不应该有任何显示或窗口,只是基于TComponent. 包含这些子组件的主要组件也将基于TComponent. 所以这里没有任何东西是可视的,我不想在我的表单上(在设计时)为每个子组件添加一个小图标。

我希望能够以类似集合的方式维护和管理这些子组件。重要的是这些子组件应该被创建、命名并添加到表单源中,就像菜单项一样。这首先是这个想法的全部要点,如果它们不能被命名,那么这整个想法就是 kaput。

哦,还有一件重要的事情:作为所有子组件的父组件的主组件需要能够将这些子组件保存到 DFM 文件中。

例子:

而不是访问这些子项目之一,例如:

相反,我想做类似的事情:

所以我不必依赖于知道每个子项的 ID。

编辑:

我觉得有必要包含我的原始代码,以便可以看到原始集合是如何工作的。这只是从整个单元中剥离的服务器端收集和收集项目:

0 投票
1 回答
364 浏览

delphi - 如何更改从 TCollection 继承的类的 ItemClass

我有一个从 TCollection 继承的类(我们称之为“TMyCollection”),我必须从它继承一个新类(我们称之为“TMyItems”)

通常我们在 TCollection 的构造函数中传递 ItemClass 类型,但在我的情况下,TMyCollection 的构造函数被新的构造函数覆盖,它不接受 ItemClass,它只接受 Owner。

如果继承的构造函数不接受 ItemClass 参数,我需要知道如何更改“TMyItems”中的 ItemClass。

问候。