簡易ぺインター

<戻る

ここに載せてあるソースコードは、参考のために載せてあります

サンプルコードは、一番下にLZHとしてあります

このサンプルは、1999/09/06に追加入力&変更しました
2001/6/9に再度、お絵かきしました、ソースには手を加えてません
2002/9/3 BBSによる指摘により、
CheckBoxが使われていたところをOptionに変更しましたm(__)mすいませんでした







Option Explicit

'元に戻す&やり直しも付いた簡易PaintEditerサンプルです

Const PicCount = 4      '隠しPictureBoxの配列(Index)の最大値
Dim NowTool As String   '現在のツール
Dim NowUndo As Integer  '現在の表示している画像の新しさ(0が一番新しい)
Dim MaxUndo As Integer  'NowUndo(元に戻す)の限界値

'Optionのツールの選択
Private Sub Option1_Click(Index As Integer)
    
    '選択されたOptionだけチェックします
    Option1(Index).Value = 1
    
    'ツール名を代入します
    NowTool = Option1(Index).Caption
    
End Sub

'元に戻す
Private Sub Command1_Click()
    NowUndo = NowUndo + 1
    If NowUndo = MaxUndo Then
        Command1.Enabled = False
    End If
    Command2.Enabled = IIf(NowUndo = 0, False, True)
    Picture1.Picture = Picture2(NowUndo).Image
End Sub

'取り消し
Private Sub Command2_Click()
    NowUndo = NowUndo - 1
    If NowUndo = 0 Then
        Command2.Enabled = False
    End If
    Command1.Enabled = IIf(NowUndo = MaxUndo, False, True)
    Picture1.Picture = Picture2(NowUndo).Image
End Sub

'初期設定
Private Sub Form_Load()
    Dim j As Integer, jw As Single, jh As Single
    
    '現在のツールを代入します
    NowTool = "自由線"
    
    '元に戻すと取り消しが最初(起動直後)に使えないようにする
    Command1.Enabled = False
    Command2.Enabled = False
    
    'Picture2をPicture1と同じ大きさにする
    jw = Picture1.Width
    jh = Picture1.Height
    For j = 0 To PicCount
        Picture2(j).Visible = False
        Picture2(j).AutoRedraw = True
        Picture2(j).Move 0, 0, jw, jh
    Next
    
End Sub

'マウス処理
'マウスボタンを押した
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        SelectTool X, Y, 1
    End If
End Sub

'マウスカーソルを移動した
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        SelectTool X, Y, 2
    End If
End Sub

'マウスボタンを離した
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        SelectTool X, Y, 3
    End If
End Sub

'デバッグ用(無くてもOK)
Private Sub Timer1_Timer()
    Debug.Print "NowUndo=" & NowUndo & " MaxUndo=" & MaxUndo & " NowTool=" & NowTool
End Sub

'各ツールの総合処理をします
Sub SelectTool(X As Single, Y As Single, flag As Integer)
    Static SetX As Single
    Static SetY As Single
    Dim l       As Single
    Dim r       As Single
    Dim ix      As Single
    Dim iy      As Single
    
    'flagが1のときはMouseDown
    '2はMouseMove
    '3はMouseUp
    
    With Picture1
        'AoutoRedrawプロパティに注意して下さい
        Select Case NowTool
        
            Case "自由線"
                If flag = 1 Then
                    .AutoRedraw = True
                    Picture1.PSet (X, Y)
                    
                ElseIf flag = 2 Then
                    Picture1.Line -(X, Y)
                    
                ElseIf flag = 3 Then
                    .AutoRedraw = False
                    '元に戻す用にイメージを追加する
                    AddBeforeImage
                End If
                
                
            Case "直線"
                If flag = 1 Then
                    SetX = X
                    SetY = Y
                    
                ElseIf flag = 2 Then
                    .Cls
                    Picture1.Line (SetX, SetY)-(X, Y)
                
                ElseIf flag = 3 Then
                    .AutoRedraw = True
                    Picture1.Line (SetX, SetY)-(X, Y)
                    .AutoRedraw = False
                    '元に戻す用にイメージを追加する
                    AddBeforeImage
                End If
                
                
            Case "四角形"
                If flag = 1 Then
                    SetX = X
                    SetY = Y
                    
                ElseIf flag = 2 Then
                    .Cls
                    Picture1.Line (SetX, SetY)-(X, Y), , B
                    
                ElseIf flag = 3 Then
                    .AutoRedraw = True
                    Picture1.Line (SetX, SetY)-(X, Y), , B
                    .AutoRedraw = False
                    '元に戻す用にイメージを追加する
                    AddBeforeImage
                End If
                
                
            Case "楕円"
                ix = SetX - X
                iy = SetY - Y
                l = Sqr(Abs(ix * iy))
                
                If ix = 0 Then '分母が0にならないようにする
                    r = 1
                Else
                    r = iy / ix
                End If
                
                If flag = 1 Then
                    SetX = X
                    SetY = Y
                    
                ElseIf flag = 2 Then
                    .Cls
                    Picture1.Circle (SetX, SetY), l, , , , r
                    
                ElseIf flag = 3 Then
                    .AutoRedraw = True
                    Picture1.Circle (SetX, SetY), l, , , , r
                    .AutoRedraw = False
                    '元に戻す用にイメージを追加する
                    AddBeforeImage
                End If
                
        End Select
    End With
End Sub

'元に戻すや取り消し用に使用される
'イメージを追加する
Sub AddBeforeImage()
    Dim j As Integer
    
    'ベルトコンベアのように画像を移動する
    If NowUndo <> 0 Then
        MaxUndo = PicCount - NowUndo
        For j = 0 To MaxUndo
            Picture2(j).Picture = Picture2(j + NowUndo).Image
        Next
        NowUndo = 0
    End If
    
    MaxUndo = MaxUndo + 1
    If MaxUndo > PicCount Then
        MaxUndo = PicCount
    End If
    For j = MaxUndo To 1 Step -1
        Picture2(j).Picture = Picture2(j - 1).Picture
    Next
    Picture2(NowUndo).Picture = Picture1.Image
    Command1.Enabled = True
    Command2.Enabled = False
    
End Sub





<戻る

 

Sample02.lzh


http://www.vector.co.jp/authors/VA015521/