VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -