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
すいません、コードに誤りがありました。
列の幅を設定するときのコードです。
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
下記のように処理中は、非表示にするだけでかなり処理速度が違ってきますが
どのようにされていますか?、表示したままなら下記を試して見て下さい。
.Visible = False
処理
.Visible = True
すいません。書き忘れましたが、非表示になるようにしています。
一つの列での文字列の最大長はSQLで取得できるのでは?
はい、文字列の最大長はSQLで取得できるのですが、
表示されているデータに合わせたほうが見やすいと
考えたので何か方法はないかと思い質問しました。
トータルで数秒時間がかかってしまう、との話でしたが、
結局のところ、どの部分がボトルネックなのでしょうか?
(a) TextMatrix の取得にかかる時間
(b) TextWidth の取得にかかる時間
(c) ColWidth の設定にかかる時間
それぞれの処理が、1回につき何ミリ秒かかっていて、
それを何回ループさせることになっていますか?
> 表示されているデータに合わせたほうが見やすいと
> 考えたので何か方法はないかと思い質問しました。
ワードラップが有効になっていたり、プロポーショナル フォントを
使っているわけでは無いならば、すべてのデータの描画幅を計測せずとも、
一番長い文字列の長さを、各列 1 回だけを計測すれば済みますよね。
SQLで文字列の最大長と内容が分かればTextWidthで長さが取得できるでしょう
ということをいいたかったんですが。
みなさん、ありがとうございました。
魔界の仮面弁士さんが教えてくださった方法で
なんとか早く表示できるようになりました。
ツイート | ![]() |