問題タブ [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 投票する
1 に答える
247 参照

delphi - 仮想文字列ツリー 4.8.7 HeaderDblClick イベント機能なし?

VirtualStringTree コンポーネント (バージョン 4.8.7)のイベントOnHeaderDblClickを使用しようとしましたが、このイベントが機能していない可能性はありますか?

または、それを機能させるために設定する必要があるオプションはありますか?

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

delphi - VirtualTreeView: 選択の変更を適切に処理する

この質問は、問題に遭遇したことがない人にとっては明らかです。

VTV で選択の変更を処理する必要があります。ノードのフラット リストがあります。いつでも現在選択されているすべてのノードで何かをする必要があります

  1. ユーザーがノードをクリックします。
  2. ユーザー Shift/Ctrl キーを押しながらノードをクリックします。
  3. ユーザーは矢印キーを使用してリストをナビゲートします。
  4. ユーザーがマウスをドラッグして選択範囲を作成
  5. ユーザーが空のスペースをクリックするか、選択されたノードのみを Ctrl キーを押しながらクリックして、選択を削除します。

これは、Windows エクスプローラーと同様に、最も一般的で予想される動作です。マウスやキーボードでファイルを選択すると、情報パネルにそのプロパティが表示されます。それ以上は必要ありません。そして、これは私が立ち往生するところです。

私の研究のいくつかは次のとおりです。


最初は OnChange を使用しました。うまく機能しているように見えましたが、奇妙なちらつきに気付き、最も一般的なシナリオ (1 つのノードが選択され、ユーザーが別のノードをクリックする) で OnChange が 2 回発生することがわかりました。

  1. 古いノードが選択解除されたとき。この時点では、選択は空です。GUI を更新して、すべてのプロパティの代わりに「何も選択されていません」というラベルを表示します。
  2. 新しいノードが選択されたとき。GUI を再度更新して、新しいノードのプロパティを表示します。したがって、ちらつき。

この問題はググることができたので、人々は OnChange の代わりに OnFocusChange と OnFocusChanging を使用していることがわかりました。ただし、この方法は単一選択でのみ機能します。複数選択、ドラッグ選択、およびナビゲーション キーでは、これは機能しません。場合によっては、Focus イベントがまったく発生しないこともあります (たとえば、空のスペースをクリックして選択が削除された場合)。

これらのハンドラーがさまざまなシナリオでどのように起動されるかを知るために、デバッグ出力の調査を行いました。私が見つけたのは、目に見える感覚やパターンのない完全な混乱です。

これはかなり読みにくいです。簡単に言うと、特定のユーザー アクションに応じて、3 つのハンドラー (OnChange、OnFocusChange、および OnFocusChanging) がランダムなパラメーターを使用してランダムな順序で呼び出されます。FC と FCg は、まだイベントを処理する必要があるときに呼び出されないことがあるため、OnChange を使用する必要があることは明らかです。

しかし、次のタスクは次のとおりです。OnChange 内では、この呼び出しを使用する必要があるのか​​、次の呼び出しを待つ必要があるのか​​ わかりません。選択したノードのセットが中間的で役に立たない場合があり、それを処理すると、GUI のちらつきや不要な重い計算が発生することがあります。

「!」でマークされた呼び出しのみが必要です。上の表で。しかし、それらを内部から区別する方法はありません。例: 私が "C-" (OnChange、Node = nil、SelectedCount = 0) にいる場合、ユーザーが選択を削除した (その後、それを処理する必要がある) か、別のノードをクリックした (その後、待機する必要がある) ことを意味する可能性があります。新しい選択が形成されたときの次の OnChange 呼び出し)。


とにかく、私の研究が不要であることを願っています。解決策をシンプルかつ明確にする何かを見逃していることを願っています。皆さんが私のためにそれを指摘してくれることを願っています. 私がこれまでに持っているものを使用してこのパズルを解くと、ひどく信頼性の低い複雑なロジックが生成されます.

前もって感謝します!

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

delphi - VirtualStringTree-オブジェクトを使用するときにサブノード/子ノードを追加/処理する正しい方法は?

私はDelphi2010を使用しており、VirtualStringTreeを使用して頭を包み込もうとしています。

私はそれをオブジェクトで動作させることを試みてきましたが、soft-gems.netWebサイトで見つけたPhilippFrenzelのVirtualTreeViewチュートリアルに従うまで運がありませんでした。私がこれまでに思いついたものは機能しますが、サブノード(つまり子ノード)を正しく処理しているとは思いません。

私が機能することができた唯一のことは、各子に対してオブジェクト全体を再度リンクし、必要なフィールドを表示することです-しかし、それはとても間違っていると感じます。

提案/フィードバックは大歓迎です。


VirtualStringTreeに接続しようとしているオブジェクトのリストがあります。ここでは、フィールドの1つが親のラベルとして機能し、残りのフィールドが子ノードとして表示される、このようなことを実現しようとしています。

  • ロバートレーン
    • 35
    • ロサンゼルス
    • ブルネット
  • ジェーン・ドウ
    • 女性
    • 19
    • デンバー
    • 赤毛

これが私のクラスの設定方法です。

オブジェクトを入力したら、以下で説明するTListに基づく別のクラス(CustomerObjectList)にオブジェクトを追加します。

ここで、VirtualStringTreeをオブジェクトリストに接続します

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

delphi - Virtual Treeview (C++ Builder) 2 つのアイコンが Windows 7 では重なるが、XP では重ならない

Windows 7 の VirtualTreeView コンポーネントに問題があります。TVirtualStringTree を追加し、OnGetImageIndexイベントを使用して、常にデバッガーのゼロ以外の値であるImageIndexを割り当てました。

VirtualStringTree は、Imagesプロパティとして 16x16 アイコンを持つTImageListを使用します。

Windows XP では正常に動作し、Windows 7 では通常のアイコンの上に TImageList のインデックス 0 のアイコンが重なっています。Windows 7 で XP と同じプログラムを実行しているため、コードは同じですが、描画は異なります。

この画像は問題を示しています。

仮想ツリービューの問題

灰色の三角形のアイコンのインデックスは 0 で、フォルダ アイコンのインデックスは 5 です。

これは VirtualStringTree のバグですか? どうにかしてこれを回避することはできますか?

リポジトリから最新の VirtualTreeView バージョンを使用しています。

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

delphi - TVirtualTreeView(TVirtualStringTree)ヘッダーがダブルクリックされたときにソートシンボルが非表示になるのを防ぐ方法

VirtualStringTreeコントロールをリストビューとして使用し、並べ替え機能を使用しています。ただし、VirtualStringTreeヘッダーをダブルクリックすると、ヘッダーをもう一度クリックするまで、並べ替え方向の記号が非表示になります。

その動作を無効にすることはできますか?

私が試したがうまくいかないこと:

  • プロパティを検索しましたが、関連する設定が見つかりません
  • ダブルクリックヘッダーイベントをクリックヘッダーイベントにリンクしました

私の環境はDelphi2007Pro、Windows 7Pro64ビットです。

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

windows - Delphi XE2 は IsWinNT 関数を削除しましたか?

XE2 への移植IsWinNTで、7 と Delphi 2009 でコンパイルされた行があり、以前はまったく問題がありませんでした。

そのような機能の目的が何なのかわかりませんが、削除または移動されましたか?

比較可能な機能とは何ですか?


残念ながら、それは Virtual Trees har にありました。申し訳ありませんが、私は-1です。家の無料 +1

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

delphi - マウスがVirtualTreeView(TVirtualStringTree)上にない場合にMouseWheelを無効にする方法

TVirtualStringTreeは、フォーカスされている場合、デフォルトで動作します。マウスが制御されていない場合でも(別のTVirtualStringTree上にある場合を除く)、マウスホイール上でスクロールします。

この動作を無効にするための迅速でエレガントな方法はありますか?

私はすでにOnMouseWheelイベントでこれを行い、それがコントロール上にあるPtInRectMouse.CursorPosどうかを確認しましたが、追加するTreeViewごとに新しいイベントを定義する必要があるため、同じことを行うためのより良い方法があると感じています。コントロールをフォーカス/フォーカス解除するタイミングを処理するので、これを無効にするより良い方法があるはずです。

したがって、明確にするために、マウスがVirtualTreeView上にある場合にのみ、mousewheel関数を通常どおりに機能させたいと思います。

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

delphi - virtualtreeviewでセルの広い領域を選択するにはどうすればよいですか?

私は、古い TStringgrid の優れた代替手段として TVirtualTreeView を使用しています。

私が見逃している機能の 1 つは、セルの任意の領域 (単一の列、行、または領域全体以外) を選択できることです。

これに対する解決策が見つかりません。誰か提案がありますか?

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

delphi - XE2 の VirtualTreeView コンポーネント

Delphi XE2 の VirtualTreeView コンポーネントはどこで入手できますか?
ここのトップ リンクとして VirtualTreeView のダウンロードを確認できます:
http://www.soft-gems.net/index.php?option=com_content&task=view&id=30&Itemid=35

ただし、Delphi XE2 用のパッケージはなく、インストーラーは XE2 をサポートしていません。
ソースのみのパッケージは、Delphi 2007 (Unicode 以前) までしかサポートしていません。

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

delphi - VirtualTreeview のドラッグ アンド ドロップによるリスト内のノードの配置

ノードのリストがあります。ドラッグ アンド ドロップで並べ替え機能を追加したいのですが、これを行う方法がわかりません。

TVirtualStringTree の OnDragDrop イベントを使用してみましたが、わかりませんでした。私はドキュメントを見ましたが、悲しいことに、単純なノードのドラッグドロップ用の最小限のサンプルコードはありません。

これは単一レベルのリストであることに注意してください。階層なし。:)