问题标签 [tobjectlist]

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 投票
0 回答
651 浏览

json - 当JSonToObject时消失的SubDetail TObjectList

这是我的第一个问题。对不起我的英语。

我有这样的课程:

我尝试将 TSFis_M 对象转换为 JSon 并为我的 datasnap 应用程序恢复为对象。我对我的数据类型(TObjectList 和 TObjectList)使用转换和恢复器

最后,例如,我在表格上放了 1 个按钮和 2 个备忘录。我尝试将我创建的对象转换为 Json,将 Json.ToString 转换为 Memo1。并将该 JSONValue 转换为 Object。

但是当我这样做时。TSFis_S 正在消失。在第一步(ObjectToJSon)没有问题。

但是当我尝试恢复到对象时,恢复器出错了。

我找不到问题。我有什么错。

谢谢

PS:如果我没有解释,这里的示例代码:http: //goo.gl/3QnSw

0 投票
1 回答
121 浏览

class - 如何在类中创建类的属性?

对于 Delphi XE6,我正在创建一个名为 TAccountSearch 的类。它有少量的属性,和一个 TObjectList 类。我的问题是我似乎无法将 TObjectList 类公开为属性。

代码片段...创建我将用于 TObjectList 的类

现在创建包含 TObjectList 实例的类...

TAccountSearch.SearchPhrase 是一个有效的属性。TAccountSearch.MyList 不是....
从 accountSearch 类中,如何让调用程序访问 SearchHits 作为属性?其次,如果我没有在 PROPERTY 行中包含 WRITE 定义,则该属性被认为是只读的。
那准确吗?这是制作只读属性的正确方法吗?

0 投票
2 回答
2412 浏览

delphi - 如何获取 TObjectList 的子项类型Delphi 中纯粹通过 RTTI 信息(即不使用任何实际对象实例)?

我正在使用 RTTI 实现用于流式传输任意 Delphi 对象的通用代码,为了让它工作(更具体地说,为了让加载部分工作),我需要以某种方式获取TObjectList<T>字段的子项类型不使用任何实际的对象实例。

要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我不会有任何实例在加载完成之前完全可用 - 我宁愿只能访问相关类的纯 RTTI 数据。

我希望能够加载的此类的一个示例如下:

我想要的是能够得出结论,该test_list字段是通用的TList<T>where Tis string(即,为了了解子项的流中期望的数据)。

如果该类确实如下所示:

我可以使用字段的RTTI 类的ElementType()方法纯粹通过 RTTI 来提取这些信息,但是我找不到任何对应的这种显式 RTTI 类型。TRttiDynamicArrayTypetest_arrTObjectList<T>

另一个 Stack Overflow 问题(Delphi Rtti: how to get objects fromTObjectList<T>)是相关的,但确实使用 RTTI 数据反映的对象的实际实例来“作弊”以获取子项目,这又一次,对我来说不是一个选择,因为当时我必须知道这些子项目不存在。

确实感觉应该有某种方法可以通过仅使用类的 RTTI 信息来做到这一点,因为无论对象实例化如何,所有类型信息都在编译时显然存在。

0 投票
1 回答
856 浏览

delphi - 如何通过 DataSnap 发送/接收 TObjectList 解决内存泄漏?

客户端应用程序和 DataSnap 服务器的原型。我想将TObjectList从服务器传输到客户端。

这是可行的,但我传达的所有对象都保留在服务器和客户端的内存中。

我究竟做错了什么 ?

生命周期 = 会话

TPessoa 对象实现了另一个类(TConta)的 TObjectList:

ServerMetodsUnit 中的公共方法:

客户:

结果正确,但是在服务器和客户端中显示内存泄漏消息(System.ReportMemoryLeaksOnShutdown := true;):

Unexpected Memory Leak 发生了意外的内存泄漏。意外的小块泄漏是:

1 - 12 字节:TMoveArrayManager x 1,未知 x 1 13 - 20 字节:TConta x 1,UnicodeString x 1 37 - 44 字节:TObjectList x 1

如何解决这种内存泄漏而不影响服务?

0 投票
1 回答
960 浏览

class - TObjectList<> 获取项目错误

我正在尝试在 Delphi XE8 中创建 TObjectList 类,但是当我尝试获取值时出现错误。

编译器错误消息:“[dcc32 错误]:无法访问私有符号 {System.Generics.Collections}TList.GetItem”

这是我的代码:

测试代码是:

我怎样才能让它工作?

0 投票
2 回答
587 浏览

delphi-xe - TObjectList 重新排序

我需要根据一些规则重新排序 TObjectList。我怎样才能做到这一点?

所以我动态地将面板添加到 ScrollBox。当我添加它们时,我还会按照它们在运行时添加的顺序将它们添加到 ObjectList 中,以备将来使用。然后我可以通过拖放重新组织滚动框中的面板。我希望 ObjectList 镜像在运行时通过拖放设置的相同顺序。

这是我的代码:

在 ReOrderPanels 过程中我应该做什么?我正在考虑将 ScrollBox 的面板从下到上馈入新的 TObjectList (PanelListTMP),清除 PanelList 并从 PanelListTMP 重新添加它们,但是当我这样做时,出现错误:访问冲突和 EInvalidPointer - 无效的指针操作

所以这就是我的想法:

所以我假设因为 ObjectList 正在存储指向实际对象的指针,那么当我清除初始 ObjectList 时,实际对象被释放,所以第二个 ObjectList 包含一个不再可行的指针列表......但是那怎么能我实现了我想要的?

所以在 ButtonClick 上,我得到一个 ObjectList,其中包含按以下顺序排列的面板:

在 ScrollBox 内拖放面板后,我可以得到这样的订单(在 ScrollBox 中)

但是在ObjectList中,顺序和之前一样……

同样,我希望能够根据滚动框中的面板顺序对 ObjectList 进行排序。在重新排序过程中,我实际上按所需顺序获得了所有面板。我只需要在我的 ObjectList 中以相同的顺序排列它们。

有没有其他方法可以做到这一点?其他与我创建一个新类,该类将在 TPanel 旁边保存一个索引并在 ObjectList 中使用它来维护顺序?

0 投票
1 回答
2108 浏览

delphi - 如何使用 TObjectList 的 Contains、Remove 或 IndexOf 等方法

当 T 是以下示例代码中的自定义类型时,我在使用类似 或 类Contains的方法时遇到Remove问题IndexOfTObjectList<T>TSocket

我首先实现了一个自定义TSocket类型,并尝试在这样的类型列表中使用它TObjectList<TSocket>

我期望ContainsIndexOfRemove利用该Equals程序的程序TMyObject并覆盖该程序的执行。Equals因此,我在我的 TSocket 类中添加了以下实现:

使用此代码Contains返回 false 但应为 true,IndexOf返回 -1 但应为 0 并且Remove不删除对象但应删除它。我希望这些方法会使用他们没有使用的Equals方法。TSocket阅读文档后,我发现TObjectList可以使用 IComparer 的实现来调用构造函数。因此我实现了一个TEqualityComparer<TSocket>为了使用我的Equals方法。不幸的是,构造函数TObjectList不支持IEqualityComparer接口,而是使用IComparer接口。

问题:在 Delphi 中使用自定义类型时 如何使用Contains,RemoveIndexOfof 之类的方法?TObjectList<T>在其他编程语言(如 Java 或 C#)Equals中,用于比较列表类型中的对象。Delphi 使用什么机制来比较对象?

更新 感谢您的全面反馈。我已经适当地更新了我的问题和代码。我详细说明了我在运行代码时的期望,并添加了更多代码以使我的意图更加清晰。@DavidHeffernan:实施确实是错误的。我向 TInterfacedObject 添加了继承,以了解有关引用计数的更多信息。我从代码中删除了 TInterfacedObject。

0 投票
3 回答
2358 浏览

delphi - Lazarus 找不到使用泛型

为什么我不能使用Generics.CollectionsGenerics.Default甚至不能Generics在 Lazarus 中使用?

找不到项目检查器的 uTest 使用的 Generics.Collections。
找不到项目检查器的 uTest 使用的 Generics.Defaults。
找不到项目检查器的 uTest 使用的泛型。

0 投票
2 回答
536 浏览

delphi - Delphi 发送 TObjectList like var 参数

我有课

我有类型

然后我尝试使用这种类型

当我尝试发送我的 TObject 列表之类的参数时

我收到错误“实际和正式 var 参数的类型必须相同”。我做错了什么?

0 投票
2 回答
444 浏览

delphi - 为什么释放 TObjectList 也会删除控件?

我使用 TObjectList 来处理特定的标签列表。但是当我在 Try Final 中执行推荐的 .Free 时,它​​也会从列表中删除控件。

带有 3 个标签的简单示例:

在这种情况下,当我执行此代码时,我最终会丢失标签控件-它们已从表单中删除,并且在调试中我看到控件为零。

我不应该 .Free TObjectList 吗?我怎样才能释放 TObjectlist 并仍然保留控件?