4

私はググってたくさんのアドバイスを見つけましたが、それはすべて数年前のもののようで、どれも役に立ちませんでした.

8列の文字列グリッドがあり、数百行を超えると、入力に2秒以上かかります(GetTickCountを使用して比較しました)。

私は試しましたStringGrid.Perform(WM_SETREDRAW, 0, 0)(そして0, 1最後に)。 Visible := Falseアップデートしながら設定してみました。どちらも駄目。

方法はありませんBeginUpdate()

何かアドバイス?Delphi XE2 スターター。FOSS サードパーティの VCL ストリング グリッドが試用され、テストされている場合は、喜んで使用します。


[更新] TDrawGrid を使用して ...「TDrawGrid には、兄弟の TStringGrid のようなプロパティ「セル」がありません。コードは、データを表示する場所を計算する必要があり、次に「キャンバス上にデータの表現を描画する必要があります。 「グリッドの」。

それは私にとって大変な作業のように聞こえます:-(

VirtualTreeView の使用 - 十分に高速な場合は問題ありません。子ノードはありません。(更新++ホームページでこれを読んだところです「仮想ツリービューは非常に高速です。100万ノードの追加には700ミリ秒しかかかりません」)。それなら速度的には問題ありません。しかし、文字列グリッドを使用するのはいいことです。特に、ユーザーがクリックしてソートできる場所。

または、stringgrid の高さは 20 行のみです。たぶん、スクロールバーのクリックを処理し、ユーザーがスクロールしたときにそれらの 20 行をクリアして再入力できますか?

[追加更新] コードが持つ TStringGrid から TListView に変更しましたBeginupdate())が、ほとんど違いはありませんでした。おっと、「仮想モード」を忘れていました-brb。

ところで、データは表示専用で読み取り専用です。

確かにこれは非常に一般的な問題ですか?

4

3 に答える 3

5

行を下から上に追加するか、RowCount後で設定します。90.000行を追加して少しテストを行ったところ、約. 25% の速度。

ただし、これには最大で 1.5 秒かかります。あなたはほんの数百行について話しているので、ここでグリッドにデータを入力することは負担ではないと確信しています. 代わりに、データの取得および/または変換に必要な時間がかかるようです。

于 2012-10-12T07:54:56.120 に答える
2

TdzVirtualStringGridプラグインしたい仮想文字列グリッドを提案する他の人に追加しTDrawGrid、表示する文字列を返すイベントを追加します。非常に「大きな」グリッドに使用していますが、正常に動作します。

ここからダウンロードしてください

(同じリポジトリからさらにファイルが必要です。これはメイン コンポーネントのソース コードにすぎません。)

編集:「同じリポジトリからのより多くのファイル」とは、このコンポーネントがdzlibライブラリの他のユニットを使用することを意味するため、おそらくシバン全体をチェックアウトして、プログラムの検索パスに追加する必要があります(もっと便利なものがありますより一般化されたソリューションが必要なものに出くわすたびに追加するためです)、またはコンポーネントが依存するユニットを抽出するだけです。dzlib は MPL の下でライセンスされています。

于 2012-10-12T13:43:39.370 に答える