Rubrik: Grafik und Font · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 30.03.04 |
Linien und Rechtecke mit Vorschau zeichnen Wie man Linien und Rechtecke in einer PictureBox mit Vorschaufunktion zeichnet, das erfahren Sie hier. | ||
Autor: Gunnar Schmitz | Bewertung: | Views: 16.630 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wenn Sie ein Zeichenprogramm programmieren wollen, wäre es doch schön, wenn der Anwender Linien und Rechtecke mit einer Vorschau zeichnen könnte, wie es in MS-Paint der Fall. D.h. bei gedrückter linker Maustaste wird die Linie / das Rechteck sofort in der PictureBox angezeigt und erst beim Loslassen der Maustaste fest in das Bild integriert. Drückt man hingegen während des Ziehens der Line / des Rechtecks zusätzlich die rechte Maustaste, wird die Line / das Rechteck sofort wieder gelöscht.
Für das nachfolgende Beispiel wird eine Form mit folgenden Steuerelementen benötigt:
- PictureBox picMain
- OptionButton optLine mit Style = 1 - grafisch und Caption = "Linie"
- OptionButton optRectangle mit Style = 1 - grafisch und Caption = "Rechteck"
Fügen Sie jetzt noch nachfolgenden Code in den Codeteil der Form ein.
Option Explicit ' benötigte Variablen Private x1 As Single Private y1 As Single Private x2 As Single Private y2 As Single Private bLinie As Boolean Private bRechteck As Boolean Private bDown As Boolean Private nColor As Long
Private Sub Form_Load() ' Wichtig! picMain.AutoRedraw = True ' Hilfslinien erstellen Me.Controls.Add "VB.Line", "Linie", picMain Me.Controls.Add "VB.Line", "Linie1", picMain Me.Controls.Add "VB.Line", "Linie2", picMain Me.Controls.Add "VB.Line", "Linie3", picMain ' Auswahl-Voreinstellung "Linie" optLine.Value = True ' Farbe auf "rot" setzen nColor = vbRed End Sub
Private Sub optLine_Click() ' es soll eine Linie gezeichnet werden bLinie = True bRechteck = False End Sub
Private Sub optRectangle_Click() ' es soll ein Rechteck gezeichnet werden bRechteck = True bLinie = False End Sub
Private Sub Picmain_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Startwerte festlegen x1 = X: y1 = Y bDown = True ' Wenn eine Linie gezeichnet werden soll... If bLinie = True Then ' "Vorschau-Linie" positionieren... Me.Controls("Linie").x1 = X Me.Controls("Linie").y1 = Y Me.Controls("Linie").x2 = X Me.Controls("Linie").y2 = Y ' ...und anzeigen Me.Controls("Linie").Visible = True ' Wenn ein bRechteck gezeichnet werden soll... ElseIf bRechteck Then ' "Vorschau-Linien" positionieren... Me.Controls("Linie").x1 = x1 Me.Controls("Linie").y1 = y1 Me.Controls("Linie").x2 = x1 Me.Controls("Linie").y2 = Y Me.Controls("Linie1").x1 = x1 Me.Controls("Linie1").y1 = y1 Me.Controls("Linie1").x2 = x1 Me.Controls("Linie1").y2 = Y Me.Controls("Linie2").x1 = x1 Me.Controls("Linie2").y1 = y1 Me.Controls("Linie2").x2 = x1 Me.Controls("Linie2").y2 = Y Me.Controls("Linie3").x1 = x1 Me.Controls("Linie3").y1 = y1 Me.Controls("Linie3").x2 = x1 Me.Controls("Linie3").y2 = Y ' ...und anzeigen Me.Controls("Linie").Visible = True Me.Controls("Linie1").Visible = True Me.Controls("Linie2").Visible = True Me.Controls("Linie3").Visible = True End If End Sub
Private Sub Picmain_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Wenn auf die Picturebox gedrückt wurde dann.... If bDown = True And Shift = True Then picMain.Line -(X, Y), nColor End If If bLinie = True And bDown = True Then Me.Controls("Linie").x2 = X ' dann die Vorschau- Me.Controls("Linie").y2 = Y ' Linie positionieren ElseIf bRechteck = True And bDown = True Then Me.Controls("Linie").x2 = x1 Me.Controls("Linie").y2 = Y Me.Controls("Linie1").x2 = X Me.Controls("Linie1").y2 = y1 Me.Controls("Linie2").x1 = Me.Controls("Linie").x2 Me.Controls("Linie2").y1 = Me.Controls("Linie").y2 Me.Controls("Linie2").x2 = X Me.Controls("Linie2").y2 = Y Me.Controls("Linie3").x1 = Me.Controls("Linie1").x2 Me.Controls("Linie3").y1 = Me.Controls("Linie1").y2 Me.Controls("Linie3").x2 = X Me.Controls("Linie3").y2 = Y End If End Sub
Private Sub Picmain_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Endpunkte festlegen x2 = X: y2 = Y If bLinie = True Then ' Linie in PictureBox zeichnen picMain.Line (Me.Controls("Linie").x1, _ Me.Controls("Linie").y1)-(Me.Controls("Linie").x2, _ Me.Controls("Linie").y2), nColor ' Linie ausblenden Me.Controls("Linie").Visible = False ElseIf bRechteck = True Then ' Rechteck zeichnen picMain.Line (x1, y1)-(x2, y2), nColor, B ' Hilfslinien ausblenden Me.Controls("Linie").Visible = False Me.Controls("Linie1").Visible = False Me.Controls("Linie2").Visible = False Me.Controls("Linie3").Visible = False End If bDown = False End Sub