投稿日 | : 2007/05/22(Tue) 18:53 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^3: グラフの表示がうまくできません(AutoRedraw?) |
いったん Picture プロパティに割り当てると、その画像は AutoRedraw の状態に関係なく
維持され続けます。Cls メソッドを呼び出したり、ウィンドウが重なっても消えません。
また、AutoRedraw = True のときに描画した内容は、
Dim P As Picture
Set P = Picture1.Image
のように、Picture 型の変数に保持しておくこともできます。
この変数は、あとから Picture1.Picture への背景割り当てにも使えますし、
SavePicture でファイル化したり、Printer.PaintPicture で印刷したりもできますので、
途中途中の画像を変数に保持しておき、再利用するといった使い方ができます。
> TrueにしたりFalseにしたりしているのですが
AutoRedraw = False を使うときは、Paint イベントで描画処理を行うようにして、
適宜、描き直しが行われるようにします。再描画頻度の高い処理はここに書きます。
一方、消えずに残しておきたいものについては、True を用いるようにします。
> それでもうまくいきません。
どういう時に画像が消えて、どういう時に残るのか、という点について、
どこまで理解しておられるのかが良く分からないので、確認のため、
AutoRedraw を使ったサンプルを書いてみます。
Private Sub Command1_Click()
Picture1.ScaleMode = vbTwips
'AutoRedraw = True 状態で、「緑の箱」と「青い破線円」を描画
Picture1.AutoRedraw = True
Picture1.DrawWidth = 1
Picture1.DrawStyle = vbSolid
Picture1.DrawMode = vbCopyPen
Picture1.Line (0, 0)-(1400, 1800), vbGreen, BF
Picture1.DrawStyle = vbDashDotDot
Picture1.Circle (1000, 800), 700, vbBlue
'AutoRedraw = False 状態にして、「黄色の太線」と「紫の文字列」を描画
Picture1.AutoRedraw = False
Picture1.DrawStyle = vbSolid
Picture1.DrawWidth = 5
Picture1.DrawMode = vbCopyPen
Picture1.Line (10000, 10000)-(100, 0), vbYellow
Picture1.ForeColor = vbMagenta
Picture1.CurrentY = 100
Picture1.Font.Size = 21
Picture1.Print "あいうえお"
End Sub
これを動かしてみると、画面が隠れたりするなどのタイミングで、
AutoRedraw = False 以降に描画した内容が失われることがわかるかと思います。また、
AutoRedraw = True の時に描画した内容は消えずに残り続けることも確認できます。
また、上記実行後に Picture1.Cls を呼び出してみると、Cls メソッドの実行によって
AutoRedraw = False 時の内容は消えますが、True 時の内容は残り続けます。しかし、
AutoRedraw = True に戻したあとで Cls を呼んだ場合には、True 時の内容さえも消えます。
そして先の No.9202 のように、Picture プロパティに背景に割り当てられた画像に関しては、
Cls メソッドを呼び出しても消えずに残るようになっています。
(この点は、ヘルプの AutoReraw プロパティの説明にある内容そのままですね)