|
にゃお〜。 はじめまして!!^_^ok/ VB2010でよければ。どうぞ。はい。
Option Strict On Option Explicit On
'VisualBasic2010(無料版) '<<title>>お絵かき..Mini<</title> '1__form1配置>pictureBox1,button1,button2 '2__すべてのコードを消してから、このコードのコピーを貼る '1番2番の手順を間違えないように。 '説明>> 'クリックすると描画できます。もう1度クリックすると描画できません。 'Colorボタンで11色を選べます 'Sizeボタンで描画する点の大きさを変更できます '最大描画数は3千個にしてありますが、増やせます。 '書き込まれたデータの抽出方法は今回はありません。(よく考えれば作れますよ) 'とりあえず2010(無料版)上ではバグは無いはずです。<バグ=エラー>
Public Class Form1
'入力データ格納配列 Const max_suu As Integer = 3000 '-----------------------|(最大描画点の数) Dim Point_x(max_suu - 1) As Integer ' (横位置 Dim Point_y(max_suu - 1) As Integer ' (縦位置 Dim Color_(max_suu - 1) As Integer '入力データ用配列 (色 Dim Size_(max_suu - 1) As Integer ' (大きさ Dim Counter_ As Integer = 0 '---------------------------|
Dim MouseClick_flag As Boolean = False 'true=描画Ok___false=描画不可 Dim byouga_msg As String = "描画不可..." Dim Color_Ch As Integer = 0 '現在の指定色 Dim Size_Ch As Integer = 10 '現在の点の大きさ(最低の大きさ=3に設定)
Const my_color_suu As Integer = 11 '11種類の色 Dim my_ColorP(my_color_suu - 1) As Brush 'my_ColorPを宣言
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load data_clear() Start_P() my_color() End Sub
Sub data_clear() '入力データオールリセット For i = 0 To max_suu - 1 Point_x(i) = -1 Point_y(i) = -1 Color_(i) = 0 Size_(i) = 0 Next Counter_ = 0 End Sub
Sub Start_P() 'コントロールプロパティ With Me .FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow .Location = New Point(300, 100) .Size = New Size(700, 500) .BackColor = Color.Gray End With me_text() With PictureBox1 .Size = New Size(600, 400) .BackColor = Color.Black .Location = New Point(50, 50) ' .BackgroundImage = My.Resources.gifu(背景画像を入れれば、下絵を見ながらお絵かきできる End With With Button1 .Size = New Size(80, 20) .Location = New Point(30, 20) .Text = "Colorチェンジ" End With With Button2 .Size = New Size(80, 20) .Location = New Point(150, 20) .Text = "Sizeチェンジ" End With End Sub
Sub my_color() '使用する色_ARGBは格納情報量が多いので使用しない my_ColorP(0) = Brushes.Blue my_ColorP(1) = Brushes.Red my_ColorP(2) = Brushes.Yellow my_ColorP(3) = Brushes.Green my_ColorP(4) = Brushes.White my_ColorP(5) = Brushes.Purple my_ColorP(6) = Brushes.Aqua my_ColorP(7) = Brushes.Pink my_ColorP(8) = Brushes.DarkGray my_ColorP(9) = Brushes.Orange my_ColorP(10) = Brushes.Black End Sub
Sub me_text() 'フォーム1のテキスト Me.Text = byouga_msg & "Color=" & Color_Ch & "...Size=" & Size_Ch End Sub
Sub pic_color(ByVal g As Graphics) '現在の指定色を表示 g.FillRectangle(my_ColorP(Color_Ch), 0, 0, 600, 10) End Sub
Sub pic_data(ByVal g As Graphics) '配列格納データを参照してピクチャーボックスに表示する For i = 0 To max_suu - 1 g.FillEllipse(my_ColorP(Color_(i)), Point_x(i), Point_y(i), Size_(i), Size_(i)) Next End Sub
Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick 'ピクチャーボックス1マウスクリックイベントハンドラ(描画できるかどうかの処理) If MouseClick_flag = True Then MouseClick_flag = False : byouga_msg = "描画不可..." Else MouseClick_flag = True : byouga_msg = "描画OK..." End If me_text() End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'ボタン1クリックイベントハンドラ(色変更処理) Color_Ch += 1 : If Color_Ch = 11 Then Color_Ch = 0 me_text() PictureBox1.Invalidate() End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'ボタン2クリックイベントハンドラ(点の大きさ変更処理) Size_Ch += 1 : If Size_Ch = 51 Then Size_Ch = 10 me_text() End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint 'ピクチャーボックス1ペイントイベントハンドラ Dim p_g As Graphics = e.Graphics p_g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias '描画を綺麗にする pic_data(p_g) 'データ内容通り表示 pic_color(p_g) '色バーを表示 End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If MouseClick_flag = False Then Exit Sub Dim x As Integer = e.X : Dim y As Integer = e.Y x -= CInt(Size_Ch / 2) : y -= CInt(Size_Ch / 2) 'マウスの中心値を計算処理する Point_x(Counter_) = x '横位置データを格納 Point_y(Counter_) = y '縦位置データを格納 Color_(Counter_) = Color_Ch '色を格納 Size_(Counter_) = Size_Ch 'サイズを格納 Counter_ += 1 '配列のカウントを1つ増やす If Counter_ = max_suu Then '_________描画最大数をオーバーした時の処理 Counter_ -= 2 : MsgBox("これ以上描画できません") MouseClick_flag = False : byouga_msg = "描画不可..." me_text() End If PictureBox1.Invalidate() 'ピクチャ-イベントを発生させる End Sub
End Class
|