MSHFlexGridにデータを高速で表示するには?

解決


bizi  2006-03-16 07:35:08  No: 94609

vb6,MySQLでデータベースに接続しています。
MSHFlexGridに高速でデータを表示したいのですが、
今の方法ではセル内の文字が隠れてしまいます。
今はDataSourceにレコードセットをセットしてデータを
表示しています。
この処理の後に一つ一つのセルの文字列の長さを調べ、
最大の長さにするという処理を入れてみたのですが、
その方法では表示するまでに数秒時間がかかってしまいます。
表示するデータは2000件ほどです。
何かよい方法を知っている方は教えていただけないでしょうか?

For i = 0 To .Cols - 1

    For j = 0 To .Rows - 1
        '文字列の長さを取得
         intWidth = Me.TextWidth(.TextMatrix(j, i)) + 500
        '最大の長さのときする
         If intWidth > intMax Then intMax = intWidth
    Next j
Next i


bizi  2006-03-16 07:40:11  No: 94610

すいません、コードに誤りがありました。
列の幅を設定するときのコードです。

For i = 0 To .Cols - 1
    intMax = 0
    For j = 0 To .Rows - 1
        '文字列の長さを取得
        intWidth = Me.TextWidth(.TextMatrix(j, i)) + 500
        '最大Lengthかの判断
        If intWidth > intMax Then intMax = intWidth
    Next j
    .ColWidth(i) = intMax
Next i


花ちゃん  URL  2006-03-16 08:47:03  No: 94611

下記のように処理中は、非表示にするだけでかなり処理速度が違ってきますが
どのようにされていますか?、表示したままなら下記を試して見て下さい。
.Visible = False

  処理  

.Visible = True


bizi  2006-03-16 18:31:41  No: 94612

すいません。書き忘れましたが、非表示になるようにしています。


123  2006-03-16 20:56:57  No: 94613

一つの列での文字列の最大長はSQLで取得できるのでは?


bizi  2006-03-16 22:33:50  No: 94614

はい、文字列の最大長はSQLで取得できるのですが、
表示されているデータに合わせたほうが見やすいと
考えたので何か方法はないかと思い質問しました。


魔界の仮面弁士  2006-03-16 23:34:29  No: 94615

トータルで数秒時間がかかってしまう、との話でしたが、
結局のところ、どの部分がボトルネックなのでしょうか?

(a) TextMatrix の取得にかかる時間
(b) TextWidth の取得にかかる時間
(c) ColWidth の設定にかかる時間

それぞれの処理が、1回につき何ミリ秒かかっていて、
それを何回ループさせることになっていますか?

> 表示されているデータに合わせたほうが見やすいと
> 考えたので何か方法はないかと思い質問しました。
ワードラップが有効になっていたり、プロポーショナル フォントを
使っているわけでは無いならば、すべてのデータの描画幅を計測せずとも、
一番長い文字列の長さを、各列 1 回だけを計測すれば済みますよね。


123  2006-03-17 00:35:11  No: 94616

SQLで文字列の最大長と内容が分かればTextWidthで長さが取得できるでしょう
ということをいいたかったんですが。


bizi  2006-03-17 05:55:10  No: 94617

みなさん、ありがとうございました。
魔界の仮面弁士さんが教えてくださった方法で
なんとか早く表示できるようになりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加