現在、大学の課題でペイントソフトのようなプログラムを作っています。
でも、円を描画する機能をつけたいのですが、どうも出来ません。
MouseMoveの時に軌跡を残すのは、まだ難しいのでやらなくていいとの事。
教授曰く、DrawModeで0=消しゴム・1=鉛筆・2=丸と区別したらいいとおっしゃっていたのですが、それぞれの所にDim DrawMode As Integer = 1などと宣言しても出来ません。↓MouseDown・MouseMove・MouseUpの部分。
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
DrawFlag = True '旗を揚げる
X = e.X
Y = e.Y
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If DrawFlag = True Then 'DrawMode = 1 &
p = New Pen(co, Cdw)
'いまのXY座標を保存
g.DrawLine(p, X, Y, e.X, e.Y)
'PictureBoxを再描画する()
' PictureBox1.Invalidate()
X = e.X : Y = e.Y
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
DrawFlag = False
' If DrawMode = 2 & DrawFlag = True Then
'p = New Pen(co, Cdw)
' g.DrawEllipse(p, X, Y, e.X - X, e.Y - Y)
'X = e.X : Y = e.Y
' g = PictureBox1.CreateGraphics
' End If
End Sub
・・・最後のIf文を消しているのは、入れるとエラーが出るからです。
何が違うのでしょう…??
簡単に言えば、円を描くやり方を教えてはもらえないでしょうか??
お願いします。
'円のところは、自分で改良出来ますよね?
'comboboxを追加して動かしてみてください。
Dim Bolder As Integer
Dim Drawflag As Boolean
Dim X As Integer
Dim Y As Integer
Dim aX As Integer
Dim aY As Integer
Dim g As Graphics
Dim DrawMode As Integer
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
DrawMode = Val(ComboBox1.Text)
Drawflag = True '旗を揚げる
X = e.X
Y = e.Y
aX = e.X
aY = e.Y
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If Drawflag = True Then
Bolder = 5 '線の太さ
Dim myPen As New Pen(Color.Black, Bolder)
Dim myClear As New Pen(PictureBox1.BackColor, 15)
If DrawMode = 0 Then
g.DrawLine(myClear, X, Y, e.X, e.Y)
ElseIf DrawMode = 1 Then
g.DrawLine(myPen, X, Y, e.X, e.Y)
ElseIf DrawMode = 2 Then
g.DrawEllipse(myPen, X, Y, 30, 30)
End If
X = e.X
Y = e.Y
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
If DrawMode = 2 And Drawflag = True Then
Dim pPen = New Pen(Color.Red, Bolder)
g.DrawEllipse(pPen, CInt((e.X + aX) / 2), CInt((e.Y + aY) / 2), e.X - aX, e.Y - aY)
'g.DrawEllipse(pPen, aX, aY, e.X - aX, e.Y - aY) 'X - aX, Y - aY)
End If
Drawflag = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ComboBox1.Items.Add("0")
ComboBox1.Items.Add("1")
ComboBox1.Items.Add("2")
g = PictureBox1.CreateGraphics
End Sub
質問者さんは本気で作る意思とかありますか?
一応、VisualBasic2008でコードを検証しましたけど。
動きましたよ。(マリネさん)のコードは。
ただ、円を塗りつぶす時は、たとえば、FillEllipseを使う場合はどうします?
型とか宣言とか難しいですか?
一度、入門へ戻って基礎をやり直す方がいいと思います。
それが、1番よい解決だと考えました。
ぼくの発言は「毒入り]ですけど、^^{善人}意見として考えてね。
>作る意思「とか」ありますか?
先生気取りになるならば日本語くらい正しく使いましょうねw
>作る意思「とか」ありますか?
普段の会話では、相手の醸し出す雰囲気、仕草、目線、態度、表情など
ノンバーバルな要素が言葉自体を凌ぐほどに影響を与えています。言葉は単語程度でも意思の疎通は可能です。
しかし、相手の姿も表情もみえず、いきおい言葉だけでコミュニケーションをとる場合には、言葉だけが相手を判断する物差しになってしまうのは否めません。
ですから、言葉を大切に使ってほしいと思います
ま、質問者本人に言われるんなら、それなりだが。
第3者にガタガタ言われる筋合いはないね。
ま、当分の間、休暇だ。
ちょっと遅くなりましたが、マリネさん、ありがとうございました!
マリネさんの例を入力して、その後、MouseMoveの所の
ElseIf DrawMode = 2 Then
g.DrawEllipse(myPen, X, Y, 30, 30)
を「'」で隠せば自分が思ったようなものに近いものができました!
あとは色々したい時には自分でちょこっといじってやります。
本当にありがとうございました!!