[これは以前に投稿された質問の更新バージョンです。前のタイトルはDelphiの仮想ツリービューのインデックスによるノードの選択でした。]
1日の大部分を終えると、Virtual Treeviewコンポーネント(強力ですが複雑)が単純な2つのテーブルのデータ対応方式で機能するようになったと思います。
ここで、最上位ノードの1,512番目(たとえば)を単純に選択しようとしています。最初のトップレベルノードを取得してから、ループでGetNextSibling 1,511を呼び出す以外に、これを行う方法はわかりません。
これは不必要に関係しているようです。もっと簡単な方法はありますか?
アップデート
ツリー内のノードを初期化するにはデータベースアクセスが必要なため、起動時にすべてのノードを初期化することはできません。ユーザーがレコードがまだ選択されていないフォームから開始する場合、それは問題ありません。ユーザーがツリーをスクロールすると、現在のウィンドウをツリーに表示するのに十分なノードが作成され、パフォーマンスは良好です。
ユーザーがデータベースレコードを選択した状態でダイアログモードでフォームを開始する場合、ユーザーがフォームを表示する前に、ツリーをそのノードに進める必要があります。レコードがツリーの終わりに向かっている場合、最初のノードからツリーを歩くのに10秒かかる可能性があるため、これは問題です。GetNextSibling()を実行できるたびに、ノードの大部分がユーザーに表示されていなくても、ノードが初期化されます。これらのノードの初期化を、ユーザーに表示されるようになるまで延期したいと思います。
レコードを選択せずにツリーを開き、垂直スクロールバーを使用して、1回の操作でツリーの中央に移動すると、初期化せずに正しいノードが表示されるため、より良い方法があるはずです。スキップしたノード。
これは、レコードを選択してツリーを開いたときに実現したい効果です。移動したいノードのインデックスはわかっていますが、インデックスでそこに到達できない場合は、いくつかのノードを前後にジャンプできると仮定して、ツリーでバイナリ検索を実行できます(直接スクロールして木の真ん中)。
あるいは、グリッドをトラバースするときに中間ノードを初期化しないままにする、ツリービューに作成できる状態設定があるかもしれません。Begin / End Updateを試しましたが、うまくいかないようです。