問題タブ [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 - 迅速なノードアクセスのためにデータベースを構築する方法
データをすばやく取得するために、VirtualTreeViewおよびSQLiteデータベースを使用してデータベースを構造化する方法を探しています。VirtualTreeViewにはOnNodeInitイベントがありますが、この目的で常に実用的であるとは限りません。
データはUsenetニュースグループから取得され、スレッド化する必要があります。スレッド化に役立つデータは、投稿ID(int64、主キーでもあります)、参照(スレッド内の以前の投稿を参照する文字列)です。
プログラムは参照内の文字列を検索し、どのpostidの下に配置するかを決定します。たとえば、post id = 1234の場合、次の投稿は1235になり、1236は1234に返信する可能性があります。
考えられるデータベースの例を次に示します。
だから今、これはそれが今どのように見えるかです。
さて、問題は、より高速な検索のためにこのデータをどのように構造化するかです。ルートノードしかない場合は、データベースエントリに基づいてRootNodeCountを割り当て、OnNodeInitで要求に応じて1つずつ読み取ります。サブノードがある場合は、データベースを再配置して、開いているノードに応じてサブノードを高速化する方法を認識できるようにする必要があります。
次のサブノードのIDで追加のフィールド「has_subnodes」を割り当てることを考えていました。ノードがクリックされると、そのノードとリンクされているすべてのノードが読み取られます。
OnNodeInitで適切に読み取れるように、このデータベースをどのように編成しますか、それともそのイベントを使用しますか?ノードは、AddChildNoInit()メソッドを使用して開始することもできます。任意のアイデアやポインタを歓迎します。
更新(そして私がそれをどのように解決したか)
ここでは、virtualtreeviewに関連しない情報をいくつか利用できます。 データベースに階層データ構造を実装する
私がやったことは、Modified Preorder Tree Traversalを使用して、ノードに関する情報をデータベースに格納し、特定のノードが最初に要求されるたびに実行することです。
a)基本的にVirtualTreeView構造と同じ構造を保持する内部キャッシュで検索されます。
b)キャッシュで見つかった場合、このキャッシュエントリは削除されます(100を超えるアイテムを保持することはありません)
c)見つからない場合は、さらに100個のアイテムがキャッシュに追加されます(要求されたノードから50個上、50個下)。もちろん、この数は必要に応じて500または1000アイテムに変更できます。重複するエントリを読みすぎないようにするために、読み取る必要のあるアップ/ダウンの量を確認するための追加のチェックがいくつかあります。
d)より高速が必要な場合は、追加の手法を適用できます-ユーザーがvirtualtreeviewをスクロールする量に基づいてデータベースからノードをロードします-std :: vectorがメモリを割り当てる方法と同様です-最初に100ノードのみをロードし、次にユーザーが大量にスクロールする場合、200、次に400などをロードします...ユーザーがスクロールするほど、ツリー全体のロードが速くなりますが、スクロールしない場合はロードされません。
このように、表示されないノードがデータベースからロードされることはありません。マウスホイールを使用したスクロール(キャッシュが空になり、ディスクからより多くのデータが必要になるポイントを通過するときに、時折短い遅延が発生する)や、矢印ボタン/キーを使用したスクロールには問題なく機能します。スクロールバーを特定の位置(たとえば、下から中央)にドラッグすると少し遅くなりますが、データをディスクからすぐにフェッチできないため、これは予想されます。
キャッシュ/アイテムをロードする前に、どれだけのメモリを使用するかを事前に決定しておくと、スクロールが速くなりますが、データが表示されない場合はもちろん、より多くのメモリを使用します。
delphi - VirtualStringTree-セルへのコントロールの埋め込み-コントロールが表示されない
したがって、ここでの私の最終的なゲームは、クライアント領域内の追加/削除ボタンを使用してアイテム(vsReportのTListViewなど)を一覧表示する方法を用意することです。
元:
この余分な作業を一切行わずにこれを行うコンポーネントをご存知の場合は、お知らせください。
そこで、赤い閉じた「X」を選び、TJvTransparentButton(Jediコンポーネント-JVCL)を使用して表示しています。プレス/非プレス状態を処理し、画像のみを表示します。私は元々TButtonを使用していましたが、グリフの周りのすべての綿毛は必要ありませんでした。
ここで、各ノードに関連付けられたレコードに画像ボタンを保持します。
コードは次のとおりです。
OnAfterCellPaintイベントでは、次のように画像ボタンの配置を管理します。
問題は、これでアイテムがまったく表示されないことです。TImageListの画像は、デザイン時にボタンを作成でき、実行時に見栄えがするため、問題がないことを知っています。
また、TJvTransparentButtonを(コードロジックを変更せずに)通常のTButtonにすると、正常に機能し、正常に表示されるため、このコードが機能するはずです。
私が考えることができる唯一のことは、TButtonがTWinControlから継承し、TJvTransparentButtonがTControlから継承するということです。
何か案は?
delphi - VirtualTreeView の IVTEditLink エディター用の複数のコンポーネント
VirtualTreeView の IVTEditLink エディターに複数のコンポーネントを追加する方法はありますか?
delphi - Delphi XE2 の仮想ツリービューをインストールしようとしています
ここでトランクを見つけました: http://virtual-treeview.googlecode.com/svn/trunk/
ダウンロードしたファイル...検索パスのいくつかのエラーを処理しました(VirtualTreesD は必要なパッケージ「dclstd」を見つけることができませんでした - lib/win32/release にあり、ライブラリ Delphi パスに追加されました)
すべてをビルドしようとすると、次のエラーが発生します。
[DCC Fatal Error] VirtualTreesR.dpk(29): E2225 Never-build パッケージ 'dclstd' を再コンパイルする必要があります [DCC Fatal Error] VirtualTreesD.dpk(35): E2202 Required package 'VirtualTreesR' not found
delphi - 仮想ツリーリストノードのキャプションを設定する
ドキュメントに記載されているプロセスを理解できません。イベントを使用すると書かれています:
それ、どうやったら出来るの?このように再宣言することはできません。ツリーリストをダブルクリックするOnGetTextEvent
と、「プロパティとメソッドに互換性がありません」という例外がスローされます。
delphi - ノードとその子を反復処理し、データを変更します
delphi2009の仮想ツリーリストを使用しています。次のようなデータでツリーを作成しました。
すべての要素を特定の順序で繰り返します。最初のトップレベルノードを取得してから、そのすべての子を反復処理してFPath
フィールドを変更する必要があります。その子を使い終わったら、別のトップレベルノードを取得したいと思います。
まず第一に、私はトップレベルのノードをいじくり回す方法がわかりません。
これに関するヒントを事前に感謝します
delphi - Tvirtualstringtree、2000行以上、ノードを一番下に追加し、非表示になり、描画関数でもトリガーされませんか?
フィルタリング目的でノードの非表示と表示に関するテキストを読みましたが、ノードを表示/非表示にするために2000行を超える行を設定すると、
この量の行の後、ChildNodeを一番上に挿入しようとすると、一番下にノードが追加され、この行にはノードが表示されません。
コードで init value 2000 として言及されているVirtualTreeView → CacheThresholdのコードを見てみました。
関数ごとにノードを最初に追加すると、エラーを再現できます
いつでも多くの行を追加できます。
しかし、この操作の後にこれらすべての行を表示に設定すると、
さらにルート ノード (常に root=nil) を挿入しようとすると、ノード数がCacheThresholdを超えた場合に非表示ノードなどのように最下部に追加されます。
追加されたこの初期のチャイルドのために表示されている白い空白の領域のみが...ツリーの下部にある?
また、この空白の白い領域では、OnGetText、OnPaintイベントはトリガーされませんか?
私はCacheThresholdを増やそうとしましたが、これらの増分された数には問題ありませんが、数が増えると同じ問題が発生します。
[編集]
以下のコードを使用すると問題なく動作しますが、CPU 使用率が高くなり、
しかし、次のようにコードを使用すると、しばらくの間動作し、2000 年以降に不安定になります (デフォルトのキャッシュしきい値)。ノードを一番上に追加しますが、2000 年に追加すると、一番下に追加され始め、ノードは非表示になりますが、ボリュームは空白の白い領域だけの行..コードをブローとして使用して、関係する行のみを更新したいのですが、2000 NodeisVisible() 関数呼び出し後に問題があります
NodeisVisibleFunction は次のとおりです。
delphi - DelphiVirtualTreeView-ノードホバー上のオートフォーカスノード
あるアプリから別のアプリにノードをドラッグしています。以前にノードを選択した場合にのみ正常に機能します。方法を使ってデータを収集しているからGetNodeData(FocusedNode)
です。
どういうわけか、ノードをノードホバーにオートフォーカスしたいのですが。出来ますか?
VirtualTreeViewv。4.8.7を使用しています
delphi - VirtualTreeView: ノードが表示されているかどうかを確認します
VirtualTreeViewコンポーネントでノードが(画面上に)表示されているかどうかを確認する方法は? このようなもの:
ノードは、表示されていない場合は中央に配置する必要がありますが、表示されている場合はその場所に留まります。
ノードの可視フラグについて話しているのではなく、画面上の可視性について話していることに注意してください。私の場合、IsVisible
プロパティは常に返されます。True
delphi - 仮想文字列ツリーで特定の列を非表示にする方法は?
仮想文字列ツリーで特定の列を非表示にするにはどうすればよいですか?
私はこのコードを試しました:
列は表示されますが、ヘッダー キャプションは表示されません。なんで?