Hallo Programmierer!
Ich habe mich heute mal rangesetzt um ein etwas schwereres Tutorial zu machen.
In diesem Tutorial zeige ich euch wie man sein Eigenes Paint in VB.08 / VB.10 erstellt.
Es ist gut möglich das es mehrere Teile braucht.
Dann fangen wir mal an:
====================================================
Die Form
====================================================
Spoiler anzeigen
Ihr benötigt:
- 14 RadioButtons (Schaut euch auf dem Bild an wie ihr sie nennen müsst(ich hab sie Englisch bennant( RadiererRadiBotton = EraserRadioButton)))
- 3 Buttons [Namen: ColorButton, Color2Button und FontButton]
- 1 PictureBox
- 1 Textbox [Name: TextDrawTextBox]
- 1 ColorDialog
- 1 FontDialog
- 1 SaveFileDialog
- 1 Trackbar
Vollansicht: Hier!
So Nun erstellen wir mal Variablen:
Jetzt kommen wir mal zum Form1_Load Code. Hier wird die Schrift, die Farbe und das Bild gelade [...]:
====================================================
Funktionen für den Stift, die Füllfunktion und mehr
====================================================
Spoiler anzeigen
Hier müssen wir mehrere Functions und Subs erstellen.
Beginnen wir mal mit den Stift funktionen. Der stift mit dem ihr malt ergibt ein + das müssen wir nun Coden.
Jetzt gehen wir weiter zu der Füll-funktion.
Dazu erstellt ihr wieder eine eigene Function:
Nun erstellen wir 2 Subs.
Die eine ist dazu da, dass sie dem Stift lädt und die andere, dass sie unser Bild "updated":
====================================================
Die "Mal-Funktion"
====================================================
Spoiler anzeigen
Die "Mal-Funktion" ist der längste Teil, da er sehr viele If Sätze beinhaltet. Doch diese Funktion ist natürlich auch die wichtigste.
Ohne ihr könnte man nicht malen.
Dann fangen wir mal hiermit an:
Zuerst kümmern wir uns um den PictureBox1_MouseDown Code:
Hier wird z.B. das Vieleck und das Dreieck gecoded.
Jetzt geht es weiter zum Mouse_move Code:
Hier wird der Radierer und der Bleistift gecoded.
Jetzt kommen wir zu der längsten Sub(Picturebox1_MouseUp).
Diese beeinhaltet:
Das Rechteck
Den Kreis
Den Halbkreis
Nochmal die Füllfunktion
Die Textfunktion
[...]
Wichtig ist noch das ihr diesen Code noch hinzufügt, damit das Dreieck funktioniert:
Teil 2 Folgt.....
mfg: Gather
Ich habe mich heute mal rangesetzt um ein etwas schwereres Tutorial zu machen.
In diesem Tutorial zeige ich euch wie man sein Eigenes Paint in VB.08 / VB.10 erstellt.
Es ist gut möglich das es mehrere Teile braucht.
Dann fangen wir mal an:
====================================================
Die Form
====================================================
Ihr benötigt:
- 14 RadioButtons (Schaut euch auf dem Bild an wie ihr sie nennen müsst(ich hab sie Englisch bennant( RadiererRadiBotton = EraserRadioButton)))
- 3 Buttons [Namen: ColorButton, Color2Button und FontButton]
- 1 PictureBox
- 1 Textbox [Name: TextDrawTextBox]
- 1 ColorDialog
- 1 FontDialog
- 1 SaveFileDialog
- 1 Trackbar
Vollansicht: Hier!
So Nun erstellen wir mal Variablen:
VB.NET-Quellcode
- Dim g As Graphics
- Dim PenWidth As Single = 1.0F
- Dim PenPoint As Pen
- Dim SavedFileAddress As String = ""
- Dim CurrentFont As Font
- Dim startLocation As Point
- Dim endLocation As Point
- Dim TempLocation As New Point(-1, -1)
- Dim TempLocation2 As New Point(-1, -1)
- Dim NumberOfAngle As Integer = 0
- Dim drawing As Boolean = False
- Dim CurrentColor As Color = Color.Blue
- Dim CurrentColor2 As Color = Color.LightSkyBlue
- Dim LastImage As New Bitmap(501, 501)
- Dim M1 As New Bitmap(501, 501)
- Dim M2 As New Bitmap(501, 501)
- Dim M3 As New Bitmap(501, 501)
- Dim M4 As New Bitmap(501, 501)
Jetzt kommen wir mal zum Form1_Load Code. Hier wird die Schrift, die Farbe und das Bild gelade [...]:
VB.NET-Quellcode
- Private Sub PaintForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- CurrentFont = Me.Font
- FontButton.Text = CurrentFont.ToString
- Me.ColorButton.BackColor = Color.Blue
- Me.Color2Button.BackColor = Color.DeepSkyBlue
- g = Graphics.FromImage(LastImage)
- g.Clear(Color.White)
- UpdateImage()
- ReloadPen(PenWidth, CurrentColor)
- End Sub
====================================================
Funktionen für den Stift, die Füllfunktion und mehr
====================================================
Hier müssen wir mehrere Functions und Subs erstellen.
Beginnen wir mal mit den Stift funktionen. Der stift mit dem ihr malt ergibt ein + das müssen wir nun Coden.
VB.NET-Quellcode
- Function UpPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
- Dim result As Boolean = False
- If (Y > 0) Then
- If (LastImage.GetPixel(X, Y - 1) = Col) Then
- result = True
- End If
- End If
- Return result
- End Function
- Function DownPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
- Dim result As Boolean = False
- If (Y < LastImage.Height - 1) Then
- If (LastImage.GetPixel(X, Y + 1) = Col) Then
- result = True
- End If
- End If
- Return result
- End Function
- Function RightPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
- Dim result As Boolean = False
- If (X < LastImage.Width - 1) Then
- If (LastImage.GetPixel(X + 1, Y) = Col) Then
- result = True
- End If
- End If
- Return result
- End Function
- Function LeftPixelHaseSameColor(ByVal X As Integer, ByVal Y As Integer, ByVal Col As Color) As Boolean
- Dim result As Boolean = False
- If (X > 0) Then
- If (LastImage.GetPixel(X - 1, Y) = Col) Then
- result = True
- End If
- End If
- Return result
- End Function
Jetzt gehen wir weiter zu der Füll-funktion.
Dazu erstellt ihr wieder eine eigene Function:
VB.NET-Quellcode
- Function FillRegion(ByVal X As Integer, ByVal Y As Integer, ByVal FillCol As Color) As Boolean
- If X < 0 Or X > LastImage.Width Or Y < 0 Or Y > LastImage.Height Then
- Return False
- End If
- Application.DoEvents()
- Dim points As Stack = New Stack
- points.Push(New Point(X, Y))
- Dim Pointcolor As Color = LastImage.GetPixel(X, Y)
- Do
- Dim p As Point = CType(points.Pop(), Point)
- LastImage.SetPixel(p.X, p.Y, FillCol)
- If UpPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
- points.Push(New Point(p.X, p.Y - 1))
- End If
- If DownPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
- points.Push(New Point(p.X, p.Y + 1))
- End If
- If RightPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
- points.Push(New Point(p.X + 1, p.Y))
- End If
- If LeftPixelHaseSameColor(p.X, p.Y, Pointcolor) Then
- points.Push(New Point(p.X - 1, p.Y))
- End If
- Loop While points.Count > 0
- Return True
- End Function
Nun erstellen wir 2 Subs.
Die eine ist dazu da, dass sie dem Stift lädt und die andere, dass sie unser Bild "updated":
====================================================
Die "Mal-Funktion"
====================================================
Die "Mal-Funktion" ist der längste Teil, da er sehr viele If Sätze beinhaltet. Doch diese Funktion ist natürlich auch die wichtigste.
Ohne ihr könnte man nicht malen.
Dann fangen wir mal hiermit an:
Zuerst kümmern wir uns um den PictureBox1_MouseDown Code:
Hier wird z.B. das Vieleck und das Dreieck gecoded.
VB.NET-Quellcode
- Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
- If e.Button = Windows.Forms.MouseButtons.Left Then
- If drawing = False Then
- startLocation = e.Location
- drawing = True
- If MultiAngleRadioButton.Checked Then
- If TempLocation.X = -1 Then
- TempLocation = startLocation
- TempLocation2 = startLocation
- End If
- endLocation = e.Location
- g.DrawLine(PenPoint, TempLocation, endLocation)
- TempLocation = endLocation
- ElseIf TriangleRadioButton.Checked Then
- If TempLocation.X = -1 Then
- TempLocation = startLocation
- TempLocation2 = startLocation
- End If
- If NumberOfAngle <= 2 Then
- endLocation = e.Location
- g.DrawLine(PenPoint, TempLocation, endLocation)
- TempLocation = endLocation
- If NumberOfAngle = 2 Then
- g.DrawLine(PenPoint, TempLocation, TempLocation2)
- TempLocation = New Point(-1, -1)
- NumberOfAngle = 0
- Else
- NumberOfAngle += 1
- End If
- End If
- End If
- End If
- ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
- If MultiAngleRadioButton.Checked Then
- If TempLocation.X <> -1 Then
- endLocation = e.Location
- g.DrawLine(PenPoint, TempLocation, TempLocation2)
- TempLocation = New Point(-1, -1)
- End If
- End If
- End If
- End Sub
Jetzt geht es weiter zum Mouse_move Code:
Hier wird der Radierer und der Bleistift gecoded.
VB.NET-Quellcode
- Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
- If drawing = True Then
- If LineRadioButton.Checked Then
- g.DrawLine(PenPoint, startLocation.X, startLocation.Y, e.X, e.Y)
- startLocation = e.Location
- UpdateImage()
- ElseIf EraserRadioButton.Checked Then
- Dim p As New Pen(Color.White, PenWidth)
- g.DrawLine(p, startLocation.X, startLocation.Y, e.X, e.Y)
- startLocation = e.Location
- UpdateImage()
- End If
- End If
- End Sub
Jetzt kommen wir zu der längsten Sub(Picturebox1_MouseUp).
Diese beeinhaltet:
Das Rechteck
Den Kreis
Den Halbkreis
Nochmal die Füllfunktion
Die Textfunktion
[...]
VB.NET-Quellcode
- Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
- If drawing Then
- If RectangleRadioButton.Checked Then
- endLocation = e.Location
- Dim s As Point
- s.X = endLocation.X - startLocation.X
- If s.X < 0 Then
- startLocation.X = endLocation.X
- End If
- s.Y = endLocation.Y - startLocation.Y
- If s.Y < 0 Then
- startLocation.Y = endLocation.Y
- End If
- s.X = Math.Abs(s.X)
- s.Y = Math.Abs(s.Y)
- g.DrawRectangle(PenPoint, New Rectangle(startLocation, s))
- ElseIf CircleRadioButton.Checked Then
- endLocation = e.Location
- Dim s As Point
- s.X = endLocation.X - startLocation.X
- If s.X < 0 Then
- startLocation.X = endLocation.X
- End If
- s.Y = endLocation.Y - startLocation.Y
- If s.Y < 0 Then
- startLocation.Y = endLocation.Y
- End If
- s.X = Math.Abs(s.X)
- s.Y = Math.Abs(s.Y)
- If s.X > s.Y Then
- s.Y = s.X
- Else
- s.X = s.Y
- End If
- g.DrawEllipse(PenPoint, New Rectangle(startLocation, s))
- ElseIf ArcRadioButton.Checked Then
- endLocation = e.Location
- Dim s As Point
- s.X = endLocation.X - startLocation.X
- If s.X < 0 Then
- startLocation.X = endLocation.X
- End If
- s.Y = endLocation.Y - startLocation.Y
- If s.Y < 0 Then
- startLocation.Y = endLocation.Y
- End If
- s.X = Math.Abs(s.X)
- s.Y = Math.Abs(s.Y)
- If s.X > s.Y Then
- s.Y = s.X
- Else
- s.X = s.Y
- End If
- g.DrawArc(PenPoint, New Rectangle(startLocation, s), 0, -180)
- ElseIf ParallelepipedRadioButton.Checked Then
- endLocation = e.Location
- Dim s As Point
- s.X = endLocation.X - startLocation.X
- If s.X < 0 Then
- Dim tmp As Integer = startLocation.X
- startLocation.X = endLocation.X
- endLocation.X = tmp
- End If
- s.Y = endLocation.Y - startLocation.Y
- If s.Y < 0 Then
- Dim tmp As Integer = startLocation.Y
- startLocation.Y = endLocation.Y
- endLocation.Y = tmp
- End If
- s.X = Math.Abs(s.X)
- s.Y = Math.Abs(s.Y)
- Dim p(3) As Point
- p(0) = New Point(startLocation.X + s.X / 5, startLocation.Y)
- p(1) = New Point(startLocation.X + s.X, startLocation.Y)
- p(2) = New Point(endLocation.X - s.X / 5, endLocation.Y)
- p(3) = New Point(endLocation.X - s.X, endLocation.Y)
- g.DrawPolygon(PenPoint, p)
- ElseIf FillRadioButton.Checked Then
- FillRegion(e.X, e.Y, CurrentColor)
- ElseIf TextRadioButton.Checked Then
- Dim txt As String = TextDrawTextBox.Text
- g.DrawString(txt, CurrentFont, New Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, CurrentColor), e.X, e.Y)
- End If
- End If
- drawing = False
- UpdateImage()
- End Sub
Wichtig ist noch das ihr diesen Code noch hinzufügt, damit das Dreieck funktioniert:
Teil 2 Folgt.....
mfg: Gather