2013-04-16 73 views
1

Windows平台上的Delphi RAD Studio 2010:创建一个全局框架?

请原谅我的无知,并随时告诉我,如果我吠叫错误的树。

我只需要知道我的想法是否会在原则上工作?

我想在我的项目中创建框架'A'。无论何时初始化,帧“A”都会填充VirtualTree。我也有很多将使用框架'A'的形式。

我希望能够创建框架'A'并在项目加载时在内存中进行初始化。 然后,当调用任何使用框架'A'的表单时,我希望能够通过指针(或其他方式?)将“框架A”传递给该表单,并“替换”现有的框架与框架'A'完全形成。 (没有担心放置等)。

我的推理是Frame'A'在初始化时总是会做同样的事情。由于这个init可能需要很长时间,比如说'x',所以使用这个帧的每个表单将会花费'x'时间来加载结果。 如果该框架是预先填充的,那么这将节省大量时间,特别是如果frame init创建大小相当的VirtualTree时。

我希望我有道理。任何投入,将不胜感激的人谁可能已尝试类似于此之前的东西...

Coenraad

+0

这可能对您无效。这意味着当一个表单改变树形结构(展开一个节点,滚动条或其他)时,它也会改变该树的所有其他视图。 (但是VirtualTree永远不需要很长的时间来加载,你只需要在你需要的时候加载你需要的数据,而且你不可能立即需要100%的数据,如果你这样使用它,你'做错了。:-) –

回答

0

我有类似的东西,但使用普通TTreeView,而不是虚拟树。如果您的问题是加载数据而不是树本身的时间,那么只需获取该数据的副本。在我的情况下,我加载了一个CachedData类中的树视图,它完成了我所有的初始化。然后创建一个新的形式,当我刚分配.Items(TTreeNodes)是这样的:

CurrentTree.Items.Assign(CachedData.TreeView.Items); 

当使用虚拟树还有就是你的数据和树节点,所以有很多不同的方式有着明显的区别分享底层数据。根据数据的格式,您可以直接使用它或将其复制到新表单中。

一般而言,您描述的方法类型是可行的和有用的。如果你描述你的初始化代码在做什么,你正在加载什么类型的数据结构(数据集,字符串列表,数组,自定义对象等),你可能会得到更具体的答案。