vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik und Font · Sonstiges   |   VB-Versionen: VB4, VB5, VB630.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 SchmitzBewertung:  Views:  16.630 
ohne HomepageSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.