問題タブ [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.
delphi - ListView から VirtualStringTree への切り替え
速度に大きな違いがあるため、Listview ではなく VirtualStringTree を使用してプロジェクトをビルドしようとしています。問題は、デモを調べた後でも、それを ListView として使用する方法を正確に理解できないことです。同様に、追加、削除、および基本的に ListView 項目の操作は非常に簡単ですが、VT を見ると、ほとんど複雑すぎます。
私が探しているのは、サブアイテムなどを備えた ListView のような VT だけです。
VT で使用したい ListView を使用するいくつかのルーチンを次に示します (これは単なる疑似例です。
もちろん、削除機能もありますが、それは1行のようなものなので、私は気にしませんでした:P
上記の例を ListView スタイルの VT を使用するように変換できる人はいますか?
ありがとう!
delphi - DelphiVirtualStringTreeの描画
私はこれらの2つのことを理解しようとしてきました:
1)コードで行全体の色を変更するにはどうすればよいですか?たとえば、VTがListViewのように見える場合はどうでしょうか。
2)チェックボックスもインデントするにはどうすればよいですか?私の子供はチェックボックスと同じ「インデント?」ルートチェックボックスとして。
ありがとう!
delphi - 仮想文字列ツリー-親ノードが非表示の場合にサブノードを表示します
親ノードが仮想文字列ツリーで非表示になっている場合にサブノードを表示する方法はありますか?
ツリー構造にいくつかのタスクがあり、現在のユーザーに属するタスクのみをリストとして表示したいのですが、すべてのレベルからです。私が行ったことは、ツリーボタン、ツリーラインを非表示にし、固定インデントを設定し、toShowHiddenNodesオプションを有効にするリストを表示する関数です。次に、この関数でツリー全体(すべてのレベル)を反復処理し、現在のユーザーに属していないノードを非表示にしますIsVisible [Node]:= Falseそして彼に属するノードを表示しますIsVisible[Node]:= True、ただしサブノード親が非表示になっている場合、表示されるはずのオブジェクトは非表示になります。
VT.TreeOptions.PaintOptions
-toShowButtons
-toShowTreeLines
+ toFixedIndent
+ toShowHiddenNodes

delphi - Delphi VirtualStringTree - インデントの問題
ちょっとそう!子ノードがインデントされていないことに気付きました。ルート ノードと同じレベルにあります。スクリーンショットは次のとおりです。

ご覧のとおり、子ノードは最初のレベルのインデントにあります。FixedIndent がオフになっているため、それが原因ではありません。
助言がありますか?
ありがとう!
delphi - Delphi VirtualStringTree-重複をチェックしますか?
ええ、私はたくさんの質問を投稿していることを知っていますが、それは私がそれを正しく行っていること、私が間違っていること、または私が完全に無知であり、ドキュメントに何も見つからないことを保証する必要があるためです。いずれかの方法、
重複ノードをチェックしようとしています。これが私がそれをしたい方法です:
ノードをループして、各ノードのテキスト(レコード)を比較しますが、ノードが多い場合は、時間とメモリを消費しすぎませんか?これにはもっと良いアプローチがありますか?
ありがとう!-ジェフ。
編集:Delticsのおかげで、私はそれを機能させました!同じ質問をしている人がいる場合は、VSTで2レベルのノードを使用した実用的なコードを次に示します。
私は自分のコードを共有することを恐れていません。それはコミュニティのおかげです。:)
delphi - VirtualStringTree に最適なデータ構造はどれですか?
Delphi の VirtualStringTree を使用したことがある人なら誰でも、これが優れたコントロールであることに同意するでしょう。これは「仮想」コントロールです (データは別の場所に保持する必要があります) ので、そのようなタスクに最適なデータ構造を考えていました。データ構造が階層をサポートする必要があるというIMOは、高速で簡単に拡張できる必要があります。最も簡単な実装はレコードを使用することであり、それは見つけることができるほとんどのドキュメントが示唆していることです。しかし、高速なルックアップや合計の計算などを行う必要がある場合はどうすればよいでしょうか? VirtualStringTree と一緒に使用しているデータ構造は何ですか?
EDIT1 : Delphi 2010 を使用しています。
OK、私の要件についてもう少し詳しく説明します。データ サイズは、1 アイテムから数千アイテムまで非常に可変です。各アイテムは、複数の文字列、整数値を保持できます。ランダム アクセスが必要です。データは、アプリケーションの有効期間中に何度も変更される可能性があります。優れたパフォーマンスは非常に望ましいものです。データの保存と再読み込みも必要です。
EDIT2:1つの回答を得たので、私の意見をコメントしようと思います. Dorin さん、ご回答ありがとうございます。しかし、あなたの構造はあまり便利ではないと思います。1)階層を扱いません。2) ノードごとに個別の TStringList または TList を持つことは、あまり効果的ではありません。この実装では、現在のノードのデータしか検索できませんが、ツリー全体を効果的に検索することはできません。
このデータ構造は木のようなものでなければならないと思います。子を追加できるノードが必要です。次に、OnInitNode イベントでノードのデータを取得し、ノードに子があるかどうかを確認し、その場合は ivsHasChildren フラグを設定し、OnInitChildren イベントで正しい子の数を設定します。OnGetText イベントの後半で、必要なデータをノード構造からフェッチし、Column インデックスに基づいて CellText に設定することができました。私の考えは、別のデータ構造を持ち、必要なすべての操作を VirtualStringTree を使用せずに実行することです。誰かが私の主張を理解してくれることを願っています:)。
EDIT3:私が探しているものを達成するために一目で使用できる非常に興味深いJclTreesユニットを見つけました。JCLライブラリに属します。適切なドキュメントがないため、その機能を迅速に調査することが難しくなっています。もう少し時間があれば、もっと深く調べてみようと思います。
delphi - VirtualTreeview ノード、それらを別のフォームに渡しますか?
私のアプリケーションは、仮想ノードを介してループし、それらのデータをチェックします。これを行うために、VirtualStringTree を含むフォームとは別のフォームを使用しています。(理由はわかりました;))
私の質問は次のとおりです。これらのノードとそのデータを他のフォームの関数に渡すにはどうすればよいですか。これにより、ノードをループできるようになります (ループの方法は知っています。他のフォームでノードを使用できるようにする必要があるだけです)。 )。
また、Processing フォームが表示されると、VirtualStringTree を含むフォームが破棄されることに注意してください。
どうすればそれができますか?動的な VirtualStringTree を作成し、何らかの方法でノードをあるツリーから別のツリーに渡すことを考えていますが、最初にここでより良い解決策を求めます。:)
ありがとう、ジェフ。
delphi - VirtualStringTreeでノードのインデックスを設定しますか?
常にツリーの一番下にある必要がある特定のノードがいくつかあるため、ノードのインデックスを変更しようとしています。Node.Indexを変更しようとしましたが、何も変更されませんでした。だから私の質問は:PVirtualNodeのインデックスを変更するにはどうすればよいですか?
ありがとう!-ジェフ
delphi - 仮想ツリービューをインストールするには?
Mike Lischke による仮想ツリービューは、Web 上およびサードパーティ コンポーネントとして非常に人気があるようです。マシンにバージョン 4.8.7 をダウンロードしました。
2 つのパーティションに Delphi 2010 と Delphi 7.0 があります。
仮想ツリービューのインストーラーをクリックすると、正常にインストールされたことを示すログ ファイルが表示されます。
Delphi 2010 を確認しました。はい、3 つのコントロールを示すコンポーネント パレットにあります。
しかし、Delphi 7.0 を起動すると、IDE から「VirtualtreesD7.bpl を読み込めません...」というメッセージが表示されます。私はそれを無視し、仮想ツリービューのデザインタイムパッケージがリストにあるがチェックされていないことを発見しました。確認しようとすると、「仮想ツリーD7をロードできません...」というプロンプトが表示されます。
ディスク全体を検索して VirtualTreesD7D.bpl を見つけ、設計時のパッケージ リストに手動で追加します。3 つのコントロールを備えたパレット上にあります。
すぐにテストして、Delphi 7.0 を終了しました。しかし、Delphi 7.0 を再起動すると、再び「VirtualtreesD7.bpl を読み込めません...」というメッセージが表示されます。これは、再びパレット上になく、設計時のパッケージ リストにチェックインされていません。
これは非常に簡単な質問です。解決方法を教えていただけますか?事前にどうもありがとうございました。
編集:
コメントありがとうございます。
私はあなたのコメントをテストしましたが、うまくいきません。
新しい問題:
unins000.exe をクリックして仮想ツリービューをアンインストールし、Delphi 7.0 でのみ再インストールすると、インストーラは最後の画面で「...完了..」とプロンプトを表示し、エラー プロンプトは表示されません。Delphi 7 を起動すると、仮想ツリービューの設計時package is not in package list. これは、前回よりもさらに悪いです (前回はパッケージ リストにあるが、チェックされていません)。
そのログ ファイルを 1 行ずつ注意深くチェックすると、次のように表示されます。
なんで?正常にインストールされず、最後のインストール画面でインストールのエラーが表示されない理由。
この「致命的...見つかりません」問題を解決する方法。
助けてくれてありがとう。
新しい編集:(これは答えですか?)
最初にあなたの助けと提案をありがとう.
テストに2時間かかり、可能な解決策を見つけます。私のマシンで動作し、Delphi 7.0 にインストールできます。
手順:
個人的には、Virtual treeview のインストーラーには、このようなトラブルからユーザーを解放し、インストール時にテストするための改善が必要であると感じています。インストーラーの書き換えが必要です。
私の取り付け事例です。すべてのユーザーに一般化できるかどうかはわかりません。
皆さん、ありがとうございました。
delphi - VirtualStringTree-ノードのコレクションがいつチェックされたかを判断する方法はありますか?
TriStateCheckingを使用しているVSTがあります。これはデータベーステーブルに接続されているため、ユーザーがノードをチェックすると、そのチェックされたフィールドがデータベースで更新されます。これをエンドユーザーには見えないようにしたいと思います。それは「保存」ボタンではありません。
現在、OnChecked()イベントを使用してデータベースを更新しています。問題は、多数のノードをチェックするときに、基本的に#CheckedNodesSQL更新ステートメントを実行することです。私がやりたいのは、すべてのトライステートチェックが完了したときにキャプチャ/通知されることです。これにより、ツリーをスキャンして1つのSQL更新ステートメントを作成できます。
すべてのトライステートチェックが完了したら使用できるイベントはありますか?