PictureBox上に描画した線を消さないようにするには?

解決


なえ  2005-04-07 09:54:30  No: 89265  IP: [192.*.*.*]

はじめての書込みです。よろしくお願いします。
PictureBoxにLineメソッドを使用して線(四角)を描画させました。
PictureBoxに入りきらない部分を表示させる為スクロールバーを付け画面を移動させ表示できるよにしたいのですが、AutoRedraw=falseにしている為移動させると画像が消えてしまうんです。PictureBoxのPaintに再描画させるコードを書いてみたのですが消えた部分の再描画をしてくれませんでした。また自動的に再描画をしてくれるとあったのでAutoRedraw=trueにすると最初から線の描画ができませんでした。何かEventとの関係がうまく出来るようにする方法はありませんでしょうか?
ご意見の方よろしくお願い致します。

編集 削除
ねろ  2005-04-07 11:14:09  No: 89266  IP: [192.*.*.*]

こういうことなのかな。。。
Private Sub Form_Load()
    Picture1.Move 100, 0, 5000, 5000
    Picture1.Line (0, 0)-(2000, 2000), , BF 'Boxを書く
    Picture1.AutoRedraw = True
    With VScroll1
        .Move Picture1.Left + Picture1.Width, 100, 300, 5000
        .Max = Picture1.Height
        .Min = 0
    End With
End Sub

Private Sub VScroll1_Change()
    Picture1.Cls
    Picture1.Line (0, VScroll1.Value)-(2000, VScroll1.Value + 2000), , BF 'Boxを書く
End Sub

編集 削除
なえ  2005-04-07 13:32:34  No: 89267  IP: [192.*.*.*]

ねろさん、お返事ありがとうございました。
早速試させていただきました。

ありがとうございます!絵が消えなくなりました。
再描画をちゃんとできます。
私の言葉足らずの説明で分かっていただけて嬉しいです。

で、ついでに甘えてもう1つ質問してもよろしいでしょうか?
実はPictureBoxの中にShapeコントロールを1つ置いてその上に四角を書きたかったのです。コントロールの上にLineで四角を書くことは出来るでしょうか?それをしたらどうもコントロールのほうが上に来てしまうようで、四角が隠れてしまってます。設定とかで表示は可能になるでしょうか?
よろしくお願い致します。

編集 削除
魔界の仮面弁士  2005-04-07 15:29:25  No: 89268  IP: [192.*.*.*]

> コントロールの上にLineで四角を書くことは出来るでしょうか?
PictureBox上に描画する事はできますが、
Shape上に描画する事はできません。

# ヘルプで、「ZOrder メソッド」の項を開き、その最後の解説を読んで
# みると、LineメソッドではShape上に描画できない理由がわかるかも。

編集 削除
ねろ  2005-04-07 15:32:40  No: 89269  IP: [192.*.*.*]

Shapeコントロールの上に書くのは無理でしょう。
別のShapeコントロールを乗っけるとか、
ShapeのFillStyleを透明にしてみるとか
又はShapeのDrawModeをMerge PenやNot Xor Penにしてみるとか
DrawModeを色々変えると希望描画が出来るかも。

編集 削除
なえ  2005-04-07 16:24:00  No: 89270  IP: [192.*.*.*]

魔界の仮面弁士さん、ねろさんも再びありがとうございます。
私のイメージ的にはShapeの上に描画すると言うよりも、表示順をShapeよりLineの方を上にしたかったんです。でもShapeの上に描画と同じ意味かな?

あっ!でも出来ました!
ShapeのDrawModeの設定をいろいろ変えて見ましたら、ありました!
私の思った描画方法が〜。Mask Penを使うとShapeの色を保ちつつ、Lineの色も変わらずの表示が出来ました。

しばらく悩んでいた事が、一日で解決出来たなんてすごくすっきりした気分です。いろいろご教授下さりありがとうございました。

編集 削除