問題タブ [tvirtualstringtree]

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 に答える
1119 参照

delphi - svTreeデータ構造を保存およびロードするにはどうすればよいですか?

VirtualStringTreeコンポーネントを使用して単純な連絡先マネージャーを実装しようとしています。すべてテキストを含む3列のみのリストビューコンポーネントのように設定しました。

レイアウト

データ構造には、別のStackOverflowの質問で言及されたLinasのsvTreeを使用しています。

私はこのような記録を宣言しました:

フォームのOnCreateには、次のものがあります。

TEditsからのデータを次のように追加しています。

これをストリームまたはファイルに保存してロードバックするにはどうすればよいですか?MyTree.SaveToFile('C:/Test.dat')とを使用してみMyTree.LoadFromFile('C:/Test.dat')ましたが、ロードバックすると、ツリービューにデータが含まれず、空白行のみが含まれます。

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

delphi - TVirtualStringTreeに複製を追加しない方法は?

2つのVirtualStringTreeがあり、最初のVSTにデータが入力されており、2番目のVSTを確認して、最初のVSTにまだ存在しないノードを追加したいと思います。または、最初のVSTと重複していない2番目のVSTのノードを追加したいと思います。

D7を使用しています。

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

delphi - VirtualStringTreeスクロールバーを表示するにはどうすればよいですか?

form1に1つのVirtualStringTree(VST1)を配置し、それにいくつかのデータを追加しました。垂直スクロールバーはノードの数に関係なく表示され、ノードの高さのデフォルトのプロパティについては何もしませんでした。次に、VST1をform2にコピーし、VST2という名前を付けたところ、VST2のスクロールバーが表示されなくなりました。VST2のparentコントロールとalignプロパティを変更しました(何度もテストしましたが、alignとその親のプロパティを変更する順序を思い出せません)。最後にスクロールバーがどのように表示されるかわかりません。次に、VST2をform3にコピーし、VST3という名前を付けました。そして今、私がどのようにテストしたとしても、VST3のデータがウィンドウビューを超えている場合、その垂直スクロールバーは表示されません。

VSTのプロパティが多すぎますが、どのプロパティを設定する必要がありますか?

編集:

[編集]:

最初にアインに感謝します。

注意深くテストしたところ、同じ関数を2回以上呼び出すと、そのvirticalscrollbarが表示されることがわかりました。何かのようなもの:

button1を初めてクリックすると、垂直スクロールバーが表示されません。2回目以上の場合は、完全に表示されます。

なぜ?、それを解決する方法は?

ありがとう

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

performance - VirtualStringTree Correct/recommended use

I have been using virtualstringtree for a while now. I use it for two different things, first a s a normal tree for selecting ,displaying data and secondly as a grid to show outputs from SQL statements.

All my data loaded in to the trees is from a database. For the tree example, i have a parentId field to distinguish the heirarchy, and for the grid examples i simply use an SQL statement with a customized record for each tree (that is unique).

My questions relates to the preferred/best way to populate the tree. I have read from the VST docs that you should use the onInitNode event along with rootnodecount. However i have found that using the AddChild() method to be very similar, even though it is not encouraged.

Let me show some (simplified) examples:

1. Heirarchy

2. Grid

So essentially i am bypassing the RootNodeCount and OnInitNode methods/property and using the old fashioned way to add nodes to the tree. It seems to work fine. Note in the example i create and destroy my queries at runtime.

The reason i started using the tree in this manner is that i could load all the data in the tree once and then free the TQuery after i had finished using it. I was thinking that regardless of keeping the TQuery alive/created i would still need to use my rData record to store the data, hence using up more memory if i did not destroy the TQuery. Currently my application uses about 250+MB when fully loaded, and can increase when i run SQL reports and display them in the VST. I have seen it use about 1GB of ram when i have run a SQL report with 20000+ nodes and 50+ columns. What i would like to know if the way i am using the VST incorrect with regards to minimizing memory usage?

Would i be better off creating a query for the lifetime of the tree and using the onInitNode event? So that when data is requested by the tree it fetches it from the TQuery using the onInitNode/OnInitChildren event (i.e. the pure virtual paradigm of the tree)? Thus i would need to keep the TQuery alive for the duration of the form. Would there be any memory benefit/performance benefit in using it this way?

In the above situations the i can see the difference for the grid example would be far less (if any) than the heirarchy - due to the fact that all nodes need to be initialized when populated.

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

delphi - データの1つのコピーを使用して複数のVirtualStringTreeを同期します

VirtualStringTreeに表示されるデータの階層があります。私はこの階層をアプリケーションで複数回使用していますが、ツリーの描画/表示方法にわずかな変更を加えています。私のメソッドは現在、AddChild()プロシージャを使用してノードを追加しているため、アプリケーションの実行時にデータの複数のコピーがあります。

これらのツリーを統合し、実際のデータを指す「マスター」ツリーを作成しますが、「スレーブ」ツリーは同じデータを指すようにします。

これを達成できるかどうか/どのように達成できるかは少しわかりません。マスターツリーをロードして、そのNodeDataに、保持しているデータの場所へのポインターを入力し、すべてのスレーブツリーについて、同じポインターをノードデータに格納するだけでよいと思います。

しかし、私はあまり運がありません。

私の現在のコードは次のようになります:

マスターツリーをスレーブツリーにコピーする手順

スレーブツリーがgetCellTextを取得するための手順

現時点では、ノードは正しい階層に追加されていますが、スレーブツリーのテキストは表示されていません。どんな助けでもいただければ幸いです。

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

delphi - VirtualStringTree-セルへのコントロールの埋め込み-コントロールが表示されない

したがって、ここでの私の最終的なゲームは、クライアント領域内の追加/削除ボタンを使用してアイテム(vsReportのTListViewなど)を一覧表示する方法を用意することです。

元:

この余分な作業を一切行わずにこれを行うコンポーネントをご存知の場合は、お知らせください。

そこで、赤い閉じた「X」を選び、TJvTransparentButton(Jediコンポーネント-JVCL)を使用して表示しています。プレス/非プレス状態を処理し、画像のみを表示します。私は元々TButtonを使用していましたが、グリフの周りのすべての綿毛は必要ありませんでした。

ここで、各ノードに関連付けられたレコードに画像ボタンを保持します。

コードは次のとおりです。

OnAfterCellPaintイベントでは、次のように画像ボタンの配置を管理します。

問題は、これでアイテムがまったく表示されないことです。TImageListの画像は、デザイン時にボタンを作成でき、実行時に見栄えがするため、問題がないことを知っています。

また、TJvTransparentButtonを(コードロジックを変更せずに)通常のTButtonにすると、正常に機能し、正常に表示されるため、このコードが機能するはずです。

私が考えることができる唯一のことは、TButtonがTWinControlから継承し、TJvTransparentButtonがTControlから継承するということです。

何か案は?

0 投票する
0 に答える
694 参照

delphi - Tvirtualstringtree、2000行以上、ノードを一番下に追加し、非表示になり、描画関数でもトリガーされませんか?

フィルタリング目的でノードの非表示と表示に関するテキストを読みましたが、ノードを表示/非表示にするために2000行を超える行を設定すると、

この量の行の後、ChildNodeを一番上に挿入しようとすると、一番下にノードが追加され、この行にはノードが表示されません。

コードで init value 2000 として言及されているVirtualTreeViewCacheThresholdのコードを見てみました。

関数ごとにノードを最初に追加すると、エラーを再現できます

いつでも多くの行を追加できます。

しかし、この操作の後にこれらすべての行を表示に設定すると、

さらにルート ノード (常に root=nil) を挿入しようとすると、ノード数がCacheThresholdを超えた場合に非表示ノードなどのように最下部に追加されます。

追加されたこの初期のチャイルドのために表示されている白い空白の領域のみが...ツリーの下部にある?

また、この空白の白い領域では、OnGetTextOnPaintイベントはトリガーされませんか?

私はCacheThresholdを増やそうとしましたが、これらの増分された数には問題ありませんが、数が増えると同じ問題が発生します。

[編集]

以下のコードを使用すると問題なく動作しますが、CPU 使用率が高くなり、

しかし、次のようにコードを使用すると、しばらくの間動作し、2000 年以降に不安定になります (デフォルトのキャッシュしきい値)。ノードを一番上に追加しますが、2000 年に追加すると、一番下に追加され始め、ノードは非表示になりますが、ボリュームは空白の白い領域だけの行..コードをブローとして使用して、関係する行のみを更新したいのですが、2000 NodeisVisible() 関数呼び出し後に問題があります

NodeisVisibleFunction は次のとおりです。

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

delphi - 仮想文字列ツリーで特定の列を非表示にする方法は?

仮想文字列ツリーで特定の列を非表示にするにはどうすればよいですか?

私はこのコードを試しました:

列は表示されますが、ヘッダー キャプションは表示されません。なんで?