问题标签 [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.
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
class - 如何在类中创建类的属性?
对于 Delphi XE6,我正在创建一个名为 TAccountSearch 的类。它有少量的属性,和一个 TObjectList 类。我的问题是我似乎无法将 TObjectList 类公开为属性。
代码片段...创建我将用于 TObjectList 的类
现在创建包含 TObjectList 实例的类...
TAccountSearch.SearchPhrase 是一个有效的属性。TAccountSearch.MyList 不是....
从 accountSearch 类中,如何让调用程序访问 SearchHits 作为属性?其次,如果我没有在 PROPERTY 行中包含 WRITE 定义,则该属性被认为是只读的。
那准确吗?这是制作只读属性的正确方法吗?
delphi - 如何获取 TObjectList 的子项类型Delphi 中纯粹通过 RTTI 信息(即不使用任何实际对象实例)?
我正在使用 RTTI 实现用于流式传输任意 Delphi 对象的通用代码,为了让它工作(更具体地说,为了让加载部分工作),我需要以某种方式获取TObjectList<T>
字段的子项类型不使用任何实际的对象实例。
要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我不会有任何实例在加载完成之前完全可用 - 我宁愿只能访问相关类的纯 RTTI 数据。
我希望能够加载的此类的一个示例如下:
我想要的是能够得出结论,该test_list
字段是通用的TList<T>
where T
is string
(即,为了了解子项的流中期望的数据)。
如果该类确实如下所示:
我可以使用字段的RTTI 类的ElementType()
方法纯粹通过 RTTI 来提取这些信息,但是我找不到任何对应的这种显式 RTTI 类型。TRttiDynamicArrayType
test_arr
TObjectList<T>
另一个 Stack Overflow 问题(Delphi Rtti: how to get objects fromTObjectList<T>
)是相关的,但确实使用 RTTI 数据反映的对象的实际实例来“作弊”以获取子项目,这又一次,对我来说不是一个选择,因为当时我必须知道这些子项目不存在。
确实感觉应该有某种方法可以通过仅使用类的 RTTI 信息来做到这一点,因为无论对象实例化如何,所有类型信息都在编译时显然存在。
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
如何解决这种内存泄漏而不影响服务?
class - TObjectList<> 获取项目错误
我正在尝试在 Delphi XE8 中创建 TObjectList 类,但是当我尝试获取值时出现错误。
编译器错误消息:“[dcc32 错误]:无法访问私有符号 {System.Generics.Collections}TList.GetItem”
这是我的代码:
测试代码是:
我怎样才能让它工作?
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 中使用它来维护顺序?
delphi - 如何使用 TObjectList 的 Contains、Remove 或 IndexOf 等方法
当 T 是以下示例代码中的自定义类型时,我在使用类似 或 类Contains
的方法时遇到Remove
问题IndexOf
。TObjectList<T>
TSocket
我首先实现了一个自定义TSocket
类型,并尝试在这样的类型列表中使用它TObjectList<TSocket>
:
我期望Contains
,IndexOf
并Remove
利用该Equals
程序的程序TMyObject
并覆盖该程序的执行。Equals
因此,我在我的 TSocket 类中添加了以下实现:
使用此代码Contains
返回 false 但应为 true,IndexOf
返回 -1 但应为 0 并且Remove
不删除对象但应删除它。我希望这些方法会使用他们没有使用的Equals
方法。TSocket
阅读文档后,我发现TObjectList
可以使用 IComparer 的实现来调用构造函数。因此我实现了一个TEqualityComparer<TSocket>
为了使用我的Equals
方法。不幸的是,构造函数TObjectList
不支持IEqualityComparer
接口,而是使用IComparer
接口。
问题:在 Delphi 中使用自定义类型时
如何使用Contains
,Remove
或IndexOf
of 之类的方法?TObjectList<T>
在其他编程语言(如 Java 或 C#)Equals
中,用于比较列表类型中的对象。Delphi 使用什么机制来比较对象?
更新 感谢您的全面反馈。我已经适当地更新了我的问题和代码。我详细说明了我在运行代码时的期望,并添加了更多代码以使我的意图更加清晰。@DavidHeffernan:实施确实是错误的。我向 TInterfacedObject 添加了继承,以了解有关引用计数的更多信息。我从代码中删除了 TInterfacedObject。
delphi - Lazarus 找不到使用泛型
为什么我不能使用Generics.Collections
,Generics.Default
甚至不能Generics
在 Lazarus 中使用?
找不到项目检查器的 uTest 使用的 Generics.Collections。
找不到项目检查器的 uTest 使用的 Generics.Defaults。
找不到项目检查器的 uTest 使用的泛型。
delphi - Delphi 发送 TObjectList like var 参数
我有课
我有类型
然后我尝试使用这种类型
当我尝试发送我的 TObject 列表之类的参数时
我收到错误“实际和正式 var 参数的类型必须相同”。我做错了什么?
delphi - 为什么释放 TObjectList 也会删除控件?
我使用 TObjectList 来处理特定的标签列表。但是当我在 Try Final 中执行推荐的 .Free 时,它也会从列表中删除控件。
带有 3 个标签的简单示例:
在这种情况下,当我执行此代码时,我最终会丢失标签控件-它们已从表单中删除,并且在调试中我看到控件为零。
我不应该 .Free TObjectList 吗?我怎样才能释放 TObjectlist 并仍然保留控件?