tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルピクチャーボックスの描画について
記事No13503
投稿日: 2009/03/11(Wed) 17:10
投稿者慶次
VB暦2ヶ月PGの卵です。WinXP VB6.0(SP5)を利用しています。        
ピクチャーボックスを1つ貼り付けて、以下のコードを記述しました。

Option Explicit
Dim sPosX As Single
Dim sPosY As Single
Dim ePosX As Single
Dim ePosY As Single

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If (Button And vbLeftButton) <> 0 Then
sPosX = X
sPosY = 0
ePosX = X
ePosY = 2000
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If (Button And vbLeftButton) <> 0 Then
Picture1.DrawStyle = 0
Picture1.Cls
Picture1.FillStyle = 4
Picture1.Line (sPosX, sPosY)-(ePosX, ePosY), vbBlue, B
ePosX = X
ePosY = 2000
End If
End Sub

Private Sub Picture1_Paint()

    With Picture1
        .ScaleHeight = 3000
        .ScaleWidth = 6000
    End With
    Picture1.Line (0, 0)-(1000, 1000), , BF
    
End Sub

この時、Paintイベントの「Picture1.Line (0,0)-(1000,1000), , BF」で
黒く塗りつぶされた四角形を消さずにMouseMoveイベントで、斜線を描画
したいと考えております。
問題がある箇所は、MouseMoveイベントの「Picture1.Cls」が問題なのですが、
四角形を消さずに斜線を描画出来る良い案はないでしょうか?
ピクチャーボックスを2つ重ればと考えましたが、重ねると四角形が隠れて
しまいます。また、重ねたピクチャーボックスを透明に設定する様なプロパティ
も存在しない為、上手くいきません。何卒宜しくお願い致します。

[ツリー表示へ]
タイトルRe: ピクチャーボックスの描画について
記事No13505
投稿日: 2009/03/12(Thu) 18:47
投稿者ちがうか?
Picture1.Cls の後に

Call Picture1_Paint

を実行すると、見かけ上はOKかと。

でも、やりたいことは、ちがうんですよね?

[ツリー表示へ]
タイトルRe^2: ピクチャーボックスの描画について
記事No13508
投稿日: 2009/03/12(Thu) 20:48
投稿者慶次
> Picture1.Cls の後に
>
> Call Picture1_Paint

ちがうか?さん。レスありがとうございます。
「Call Picture1_Paint」ですが、大量のデータを扱うプログラムを
組んでおりますので、CallステートメントやRefreshメソッドを
使用すると、何と言って良いのかわかりませんが(汗 問題が生じて
しまうんです…。VB6.0では組めないって事はないですよね??

[ツリー表示へ]
タイトルRe: ピクチャーボックスの描画について
記事No13509
投稿日: 2009/03/12(Thu) 23:24
投稿者魔界の仮面弁士
描画処理は、Paint イベントにまとめるようにしてください。
また、消さずに残しておきたい内容があるならば、背景画像として登録するようにします。

Option Explicit
Private nPosX As Single
Private nPosY As Single
Private sPosX As Single
Private sPosY As Single
Private ePosX As Single
Private ePosY As Single

Private Sub Form_Load()
 Picture1.ScaleHeight = 3000
 Picture1.ScaleWidth = 6000
 Picture1.AutoRedraw = True
 Picture1.DrawStyle = vbSolid
 Picture1.Line (0, 0)-(1000, 1000), , BF
 Set Picture1.Picture = Picture1.Image
 Picture1.AutoRedraw = False
 Picture1.Cls
 Picture1.FillStyle = vbUpwardDiagonal
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If (Button And vbLeftButton) <> 0 Then
  sPosX = X
  sPosY = 0
  ePosX = X
  ePosY = 2000
 End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If (Button And vbLeftButton) <> 0 Then
  nPosX = X
  nPosY = 2000
  Picture1.Refresh
 End If
End Sub

Private Sub Picture1_Paint()
 Picture1.Cls
 Picture1.Line (sPosX, sPosY)-(ePosX, ePosY), vbBlue, B
 ePosX = nPosX
 ePosY = nPosY
End Sub

[ツリー表示へ]
タイトル【解決】ピクチャーボックスの描画について
記事No13513
投稿日: 2009/03/13(Fri) 22:58
投稿者慶次
魔界の仮面弁士さんのコードを参考に、抱えていた問題に挑戦したところ、
上手く動作しました。

魔界の仮面弁士さん。ありがとうございました。

[ツリー表示へ]