【发布时间】:2014-07-22 11:08:48
【问题描述】:
我正在使用 Delphi XE5。我想将 VCL 样式添加到我的一个项目中,但遇到了问题。设置新的 vcl 样式后,所有句柄都会更改。例如,如果已经有项目并且如果我有活动的 tcp 套接字,那么我对 listview 有问题,它们不再工作了。我需要重新启动应用程序并在启动时选择样式,或者我需要重新创建所有内容,但这很烦人。我现在无法粘贴任何代码,因为我不在我的开发电脑上。不过相信你也遇到过这个问题吧?
谁能告诉我在运行时更改 vcl 样式的最佳和最安全的方法?
谢谢
【问题讨论】:
-
这是您不应该将数据与 UI 控件绑定的另一个原因。如果你有一个集合并在虚拟模式下使用列表视图,你就不会有这样的问题。
-
但是套接字呢?
-
有关套接字的信息与列表视图项无关。有些数据直接存储到项目中,不是吗?拥有像
TList<TSocketInfo>这样的集合将解决这个问题,无论TSocketInfo包含什么(它可能包含对列表视图的引用,或者如果您的视图显示每个项目的连接,则有关套接字的信息)。 -
@TLama Windows 异步套接字接收 Windows 消息。为此,他们需要一个窗口句柄。使用可重新创建的窗口句柄是一种常见的故障模式。
-
@David,所以您认为 OP 子类化列表视图可以从异步套接字接收消息? blacksun,你使用的底层设计是什么?