[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/05/22(Tue) 16:16
投稿者名:さくらい
Eメール:
URL :
タイトル:
グラフの表示がうまくできません(AutoRedraw?)
よろしくお願いいたします。

FormにPictureBoxを貼り付け、そこにグラフをリアルタイムで記載したいのです。
1.グラフ軸(X軸とY軸)を書く
2.データ読み込み
3.折れ線グラフを書く
4.2と3をくりかえす
5.印刷する。

ということをしたいのです。
AutoRedrawはFalseにしています。
Trueにすれば、いいと記載されているページが多いのですが
Trueにしてしまうと、2と3の繰り返しのところで1のグラフ軸が消えてしまいます。
Falseのままにしてしまうと、5の印刷のときにダイアログが表示されてしまい
グラフ全体が消えてしまいます。
TrueにしたりFalseにしたりしているのですが
それでもうまくいきません。
具体的には、グラフ軸が消えてしまったり、一度線を引いた折れ線グラフが消えてしまっていたり
とかしています。
折れ線グラフは色を変えて2種類書いています。

何卒よろしくお願いいたします。

投稿時間:2007/05/22(Tue) 17:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: グラフの表示がうまくできません(AutoRedraw?)
予め、AutoRedraw = True の状態で軸線を描画したあと、
 Set Picture1.Picture = Picture1.Image
のようにして、その描画結果を背景として固定しておくとか。

投稿時間:2007/05/22(Tue) 17:09
投稿者名:さくらい
Eメール:
URL :
タイトル:
Re^2: グラフの表示がうまくできません(AutoRedraw?)
魔界の仮面弁士さん

お忙しいところありがとうございます。
ということは、
1.AutoRedraw = Trueでグラフ軸を書く
2.Set Picture1.Picture = Picture1.Image
  でグラフ軸を固定
3.折れ線グラフ1を書く
4.2をして、グラフ軸と折れ線グラフ1を背景として固定
5.折れ線グラフ2を書く
6.2をして、グラフ軸と折れ線グラフ1と2を背景として固定する

すいません、背景として固定するということは、ビットマップのように
保存してそれを呼び出すと考えてよろしいのでしょうか?
申し訳ありませんが、もう少し教えてください。
よろしくお願いいたします。

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