投稿時間: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 プロパティの説明にある内容そのままですね)
|