問題タブ [virtualtreeview]

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.

0 投票する
2 に答える
7527 参照

delphi - TVirtualStringTree を使用して複数行のアイテムと「展開された」選択アイテムを表示する方法は?

下の画像のような外観を作成しようとしています (これは TVirtualStringTree を使用して行われたことがわかっています) が、これを実現する方法に関するサンプル コードは見つかりませんでした。

以下の例のように複数行のアイテムを作成し、選択アイテムを「展開」してより多くの行を表示する方法を知っている人はいますか?

代替テキスト

0 投票する
2 に答える
4322 参照

delphi - VirtualStringTree ノードを隠す

VirtualStringTree で特定のノードを非表示にすることは可能ですか? 「フィルタリング」機能を実装しています (VST は列を持つリストとして機能します)。フィルターが変更されるたびにコンテンツをリロードするのは避けたいと思います。 ..解決策はありますか?

0 投票する
1 に答える
240 参照

delphi - セルが仮想ツリービューのビューポートにあるかどうかを判断するにはどうすればよいですか?

セルが仮想ツリービューのビューポートにあるかどうかを判断するにはどうすればよいですか?ありがとう。

0 投票する
2 に答える
2720 参照

delphi - ツリーがフォーカスされていない場合でも選択を強調表示する

同じフォームで複数の TVirtualStringTree を同時に使用しています。

ツリーに選択されたノードがあり、現在フォーカスが別のツリーにある場合、選択は薄い灰色で強調表示されます。

フォーカスされていない TVirtualStringTree の選択を通常の選択色 (私のコンピュータでは青) で強調表示する簡単な方法はありますか?

ありがとう

0 投票する
3 に答える
6263 参照

delphi - 仮想文字列ツリーの行の色を変更することはできますか?

仮想文字列ツリーの特定の行のテキストの色を変更したいと考えています。出来ますか?

0 投票する
4 に答える
3015 参照

delphi - Delphi-大量のノードで仮想文字列ツリーの遅いGetTextメソッド

私はまだTVirtualStringTreeコンポーネントの経験があまりないので、些細なことを見落としているかもしれません。

私のアプリはファイル情報をレコード(FileName、Path、Size)に収集し、仮想文字列ツリーにデータを表示します。

ノードがたくさんある場合(200K以上)、大幅な速度低下が発生すると、ツリー全体が基本的に遅れます。レコードデータだけではメモリフットプリントが非常に大きいことは承知していますが、ラグはVSTのOnGetTextメソッドが原因であることがわかりました。これにより、メソッドが実際のデータを読み取るか、CellTextを静的文字列に設定するか(たとえば、CellText:='Test';)、速度の低下は重要です。CellTextを設定せずにOnGetTextを終了すると、ツリーに1,000,000個ものノードがある場合でも正常に機能します。また、ノードの90%をこのように非表示にしてツリーを折りたたむと(FullCollapse)、OnGetTextは正常に動作するか、少なくともはるかに優れた動作をします。

私が理解している限り、OnGetTextは実際に表示される画面上のノードに対してのみ呼び出されるため、ツリー内のノードが大量にある場合にこれがこのような問題になる理由はわかりません。

誰かが私をある方向に向けるためのヒントがありますか?

編集:

Delphiバージョン:D2010 VSTバージョン:4.8.6

最も単純なテスト形式の私のコードは基本的に次のとおりです。

CellTextを設定すると遅れますが、終了しても遅れません。不思議なことに、下にスクロールするほど悪化します。

NodeDataとして割り当てられるものは次のとおりです。

どういうわけか拡張/折りたたみと再拡張が状況を改善するように見えることに気づきましたが、これが実際に何らかの影響を与える可能性がある理由を説明することは私を超えています。

0 投票する
1 に答える
442 参照

delphi - 仮想ツリー ビューのスクロール制限は?

onchange イベント中に virtualstringtree の X と Y の最大スクロールを取得するにはどうすればよいですか?

0 投票する
2 に答える
4683 参照

delphi - Explorer Shell から Delphi アプリケーションの VirtualTreeView コントロールにファイルをドラッグ アンド ドロップするにはどうすればよいですか?

Mike Lischke による VirtualTreeView には広範なドラッグ アンド ドロップ サポートがあり、ドラッグ アンド ドロップ イベントがいくつかある TVirtualStringTree を使用していますが、シェルのドラッグ アンド ドロップを受け入れる方法がわかりません。 Windowsエクスプローラーシェルからいくつかのファイルを私のアプリケーションに。ファイルがドロップ コントロールにドラッグされたときにファイルをロードしたい。

Anders Melander のサードパーティ コード セットを使用してドラッグ アンド ドロップを処理しようとしましたが、VirtualTreeView は既にドロップ ターゲットとして登録されているため、使用できません。

編集: 簡単な回避策を見つけました: VT.TreeOptions.MiscOptions で toAcceptOLEDrop をオフにします。サード パーティの OLE シェル ドラッグ ドロップ ライブラリを使用せずに VirtualTreeView を使用し、その広範な OLE ドラッグ アンド ドロップ サポートを使用して、シェルからドラッグされたファイル名のリストを抽出する方法を知っている人がいれば、すばらしいことです。

0 投票する
3 に答える
1948 参照

delphi - VirtualTreeview と OTL を使用したメモリ リーク

小さなマルチスレッド アプリケーションを作成しましたが、それを変換して OmniThreadLibrary を使用しようとしています。Virtualtreeview を使用して、ログとステータス/結果を表示しています。Vst ログには 2 つの列しかなく、レコードには 2 つの文字列フィールドしか含まれていません (非常に単純で、レコード内にオブジェクトはありません)。

OTL (スレッド プール #11) に付属する DEMO プロジェクトを使用して、リストボックスの代わりに VirtualTreeview を使用するようにプロジェクトを変更しました。デモから「タスクを実行」するとメモリ リークは発生しませんが、「タスクを実行」を複数回実行するとメモリ リークが発生します。タスクを複数回実行すると、メモリ リークが発生します。VirtualTreeView をまったく使用しない場合、いつでもメモリ リークは発生しません。VST を使用するときと、タスクを複数回実行するときだけです。

私は FreeNode イベントを使用して文字列をクリアし、さらに Finalize を使用してみました...

例:

タスクを複数回実行するとメモリ リークが発生するのはなぜですか? FastMM4 最新の Virtualtreeview と OTL を備えた Delphi 2010

0 投票する
2 に答える
5845 参照

delphi - Delphi VirtualTreeViewは複数の列を並べ替えますか?

私は VirtualTreeView コンポーネントについて多くの賞賛を聞いており、私たちが行っている書き直しでそれを使用することを検討しました。現在、StringGrid を使用しています。

単一の列の並べ替えはうまく機能しますが、複数の列を並べ替える方法が見つかりません。列1をクリック>並べ替え、Ctrlキーを押しながら列2をクリック>列1の後に列2を並べ替えるなどの方法はありますか?

具体的には、PO Number、Line Item、Release の少なくとも 3 つの列を並べ替えたいと考えています。

よろしくお願いします。

これがコードです(少し簡略化されています)(上記で参照した同じプロジェクトからではなく)理論をテストしています:

注:更新後、現在のコードを表示するためにコードも編集しました。以下に、並べ替えの結果を投稿しました。

これにより、次の結果が生成されました (ここでは、並べ替えようとしている 3 つの列のみを表示しています)。

最初にロードされたとき:
注文明細リリース
153 7 2
153 7 1
153 1 1
153 1 2
153 4 1
153 6 2
153 6 1
120 3 2
120 3 1
153 2 1
153 4 2
120 2 1
153 4 1
120 1 1
153 3 1
153 2 1
111 2 1
111 1 5
111 1 1
111 4 2
111 3 1
111 4 1
111 1 3
111 1 2
111 1 4

最初のクリック後
注文明細のリリース
111 2 1
111 1 5
111 1 1
111 4 2
111 3 1
111 4 1
111 1 3
111 1 2
111 1 4
120 3 2
120 3 1
120 2 1
120 1 1
153 7 2
153 7 1
153 1 1
153 1 2
153 4 1
153 6 2
153 6 1
153 2 1
153 4 2
153 4 1
153 3 1
153 2 1

2 回目のクリック後
注文明細のリリース
153 7 2
153 7 1
153 6 2
153 6 1
153 4 1
153 4 2
153 4 1
111 4 2
111 4 1
153 3 1
120 3 2
120 3 1
111 3 1
153 2 1
153 2 1
120 2 1
111 2 1
153 1 1
153 1 2
120 1 1
111 1 5
111 1 1
111 1 3
111 1 2
111 1 4

3 回目のクリック後
注文明細のリリース
111 1 1
120 1 1
153 1 1
111 2 1
120 2 1
153 2 1
153 2 1
111 3 1
120 3 1
153 3 1
111 4 1
153 4 1
153 4 1
153 6 1
153 7 1
111 1 2
153 1 2
120 3 2
111 4 2
153 4 2
153 6 2
153 7 2
111 1 3
111 1 4
111 1 5

御時間ありがとうございます!