2012-04-19 3 views
2

TTreeViewには、多くのノード(通常20,000ノード以上)があります。このTTreeViewは、ドッキングインターフェイス(DevExpress Docking Library)で使用されます。アプリケーション内のフォームがドッキングまたはドッキング解除されると、ドッキング可能なフォームのハンドルが変更されます。これは、すべてのフォームとコントロールのDestroyWndCreateWndプロシージャがコールされる結果になります。Delphi TreeView DestroyWnd/CreateWnd slow

TTreeViewの場合、DestroyWndはノードをストリームに保存し、CreateWndはそれらをリロードします。非常に大きなツリービューを持つアプリケーションでは、ノードがストリーミングされて戻っている間、長い遅延が発生します。

私の質問:この遅延を防ぐ方法は?私はTTreeViewの子孫ではないと信じている多くの人々がVirtual TreeViewを高く話していると聞いていますが、この問題を避けていますか? Developer Express TcxTreeViewを試しましたが、TTreeviewから降りて同じ問題が発生します。

答えて

11

20,000個のノードが標準に入れるには多すぎますTTreeViewTVirtualTreeViewを使用することは、多数のノードを表示するための方法です。主な利点は、ノードデータがTreeView自体に格納されていないことです。これは、表示とユーザーのやり取りに使用されます。メモリ内の他の場所にデータを保存して、ウィンドウの再作成の影響を受けないようにしてから、TVirtualTreeViewは、随時必要なデータだけを尋ねます。 TVirtualTreeViewウィンドウを再作成することは、現在のデータでウィンドウの表示を再描画することに過ぎません。

標準TTreeViewと異なり、TreeView自体にデータを格納します。したがって、TTreeView.DestroyWnd()TTreeView.CreateWnd()は、ウィンドウが再作成されるたびにすべてのノードデータのコピーを保存して復元する必要があります。より多くのノードが存在するほど、そのデータを管理するオーバーヘッドが増えます。