人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VisualBasic6.0SP6(以下VB6SP6)にて、
MSFlexGridを使用していますが、表示データを
更新する方法を教えて下さい。

Winsockでデータを受信して、受信データを
MSFlexGridコントロールの各セルへ設定しますが、
即座に表示が更新されない場合があります。

・更新はされますが、数秒間、表示が切り替わらない場合があります。
・MSFlexGridコントロールの各セルへデータを設定した後に、
「Form1.MSFlexGrid1.Refresh」を実行しましたが、
変化ありません。
・MSFlexGridコントロールの各セルへデータを設定した後に、
「Form1.Refresh」を実行しましたが、
変化ありません。

他に手順があるようなら、
ご教授願います。

●質問者: futurista
●カテゴリ:はてなの使い方 コンピュータ
✍キーワード:コントロール セル データ 教授 更新
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● freemann
●20ポイント

VB6.0はずいぶん前にやったため記憶で回答します。

外れていたらポイントはいらないです。

どれぐらいのデータ量を一度に表示しようとしているのかわかりませんが、かなりの量を表示しようとすると表示が追い付かなくなります。これはWindowsでは、メッセージの待ち行列に表示の更新指示があっても、その表示に絡む処理があるとそちらの処理を優先します。つまり表示は後回しです。

なぜなら、処理によって結果が変わると表示も変わる可能性が高いためにこのようになっているようです。

また、表示すること自体が比較的重い処理のはずなので、セルにひとつデータを入れるごとに表示処理を強制的にさせていると処理が重くなる可能性があります。

ですので、表示の更新はグリッドにすべてのデータを入れた後にやるとレスポンスが良くなると思います。

ただどうしても途中で即座に表示の更新をしたい場合には、現在Refreshを入れているところにDoEventsを入れてみてください。

DoEventsはそこの関数での処理をいったん止めて他の処理(この場合は表示)をしてくれます。

DoEventsのサンプル

◎質問者からの返答

回答有難うございました。

表示処理全て(関数)を終了した箇所で、DoEventsを実施。

→変化なし。

表示処理の中(関数内のループの中)にDoEventsを実施。

→表示が(セルのひとつひとつ)切り替わりは速くなった。

しかし、画面全体の表示更新そのものが遅れる現象は残っている。

(7?8秒遅れる。)

受信→表示処理は、DataArrivalイベントの中で、一貫して実施して

いるのですが、受信部分で時間を浪費しているかと思い、時間を

計測しましたが、100ms未満でした。


2 ● freemann
●50ポイント

そうでした!

Redrawをfalseにすると早くなります。ただ希望するほどまで早くなるかはわかりませんが。

以下のHPを見てみてください。

Redrawをfalseに

◎質問者からの返答

回答有難うございました。

Win2000で問題なく、XPで遅くなるところが、こちらの条件と同じでしたので、

改善されるかと思いましたが、、、若干やや遅いところがありました。

(前よりは、速くなっているようですが。)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ