MSFlexGridで一行飛びに色を変えようと思っています。
現在↓のようにプログラムを作成したのですが、色が変わるのが
遅いのです。速く出来る方法があれば、教えて頂きたいです。
宜しくお願いします。
.Cols = 32
.Rows = 500
Private Sub Command1_Click()
Dim co As Integer
Dim ro As Integer
With Form1.MSFlexGrid1
For ro = .FixedRows To .Rows - .FixedRows Step 2
For co = .FixedCols To .Cols - .FixedCols
.Row = ro
.Col = co
If .CellBackColor = 0 Then
.CellBackColor = RGB(255, 100, 100)
Else
.CellBackColor = 0
End If
Next co
Next ro
End With
End Sub
それぞれのセルを一つずつ設定するのではなく、複数のセルに対して
一度に設定してみてください。(ColSel, RowSel, FillStyleプロパティ)
また、Redraw プロパティも併用しておくと良いでしょう。
質問とは関係ないけど
> With Form1.MSFlexGrid1
フォーム名を直接使う方法はやめた方がいいと思う。
With Me.MSFlexGrid1
か
With MSFlexGrid1
で。
魔界の仮面弁士さんの案をフルに使えばループは一重になりますね。
> If .CellBackColor = 0 Then
の判定とか1回で良いからループの外に出せる。
同じ処理を実行してるところをしないように考える。
再描画処理が一番重いから魔界の仮面弁士さんの案をフルに使った
時点で高速化の99%は終わってそうだけど、無駄な処理は
いくつかあるようです。
Private Sub Command1_Click()
Dim tm As Double
tm = Timer
Call funcO '処理
Debug.Print Timer - tm
End Sub
で時間計測したら
0.4秒から0.02秒まで短縮されました。
デフォルト設定のまま全画面表示で、画面上に
表示されているセル数は47×16くらい
実行マシンのスペックはCPU1.60GHz
魔界の仮面弁士さん特攻隊長まるるうさん
どうもありがとうございました。とても勉強になりました。
Private Sub Command1_Click()
Dim ro As Integer
With Me.MSFlexGrid1
.Redraw = False
For ro = .FixedRows To .Rows - .FixedRows Step 2
.Row = ro
.ColSel = .Cols - .FixedCols
.FillStyle = flexFillRepeat
.CellBackColor = RGB(255, 100, 100)
Next ro
.Redraw = True
End With
End Sub
あれ?色を戻すのはやめたの?
だいぶ機能(エラー対応など)が足りなくなってる気がするけど…
早くレスつけるのもいいけど、もう1日くらい落ち着いて
考えたほうが良いのでは?
[VB6.0]
Private Sub Command1_Click()
Dim co As Long 'データ型変更してあります
Dim ro As Long
Dim lngBackColor As Long
Dim lngCols As Long
With Me.MSFlexGrid1
.Redraw = False
.FillStyle = flexFillRepeat
.col = .FixedCols
.row = .FixedRows
If .CellBackColor = 0 Then
lngBackColor = RGB(255, 100, 100)
Else
lngBackColor = 0
End If
lngCols = .Cols - .FixedCols
For ro = .FixedRows To .Rows - .FixedRows Step 2
.row = ro
.ColSel = lngCols
.CellBackColor = lngBackColor
Next ro
.col = .FixedCols
.row = .FixedRows
.FillStyle = flexFillSingle
.Redraw = True
End With
End Sub
>エラー対応
…意味が違うな(汗)エラーは出ないと思うもん。正確にはバグ対応ですね。
カレントセルの制御が甘くなってます。
VsFlexGridで BackColorAlternate を設定する方が楽かもしれません。
ツイート | ![]() |