Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0426: Dreiecke gefüllt und ungefüllt schnell zeichnen

 von 

Beschreibung 

VB kennt keine Dreiecke, schade, muss man doch hier eigens die APIs bemühen. Die Eckpunkte des Dreiecks sind dabei beliebig wählbar, genauso wie Füll- und Rahmenfarbe. Prinzipiell läßt sich dieses Beispiel auf ein beliebiggroßes Vieleck erweitern, auch Parallelogramme, sowie im Raum gedrehte Rechtecke sind denkbar.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Polygon, Polyline

Download:

Download des Beispielprojektes [2,72 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias FORM1.FRM  ---------
' Steuerelement: Textfeld "txtKoord" (Index von 1 bis 6)
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Beschriftungsfeld "Label1" (Index von 1 bis 6)


'Autor: K. Langbein
'E-Mail: Klaus@activevb.de

Private Type pointapi
    X As Long
    Y As Long
End Type

Private Declare Function Polygon Lib "gdi32" (ByVal hdc As _
    Long, lpPoint As pointapi, ByVal nCount As Long) As Long
        
Private Declare Function Polyline Lib "gdi32" (ByVal hdc As _
    Long, lpPoint As pointapi, ByVal nCount As Long) As Long

Private Sub Form_Load()
    Picture1.ForeColor = vbRed
    Picture1.FillColor = vbBlue
End Sub

Private Sub Command1_Click()
    Dim x1 As Long, y1 As Long
    Dim x2 As Long, y2 As Long
    Dim x3 As Long, y3 As Long
    
    'die Werte aus den Eingabefeldern werden uebergeben.
    x1 = Val(txtKoord(1))
    y1 = Val(txtKoord(2))

    x2 = Val(txtKoord(3))
    y2 = Val(txtKoord(4))
    
    x3 = Val(txtKoord(5))
    y3 = Val(txtKoord(6))

    'Man koennte natuerlich auch ein Feld dimensionieren um
    'die Koordinaten zu uebergeben. Dieses Beispiel ist
    'jedoch bewußt einfach gehalten, um auch für Anfänger
    'verständlich zu sein.
    
    Picture1.Cls
    Call Draw_Triangle(Picture1, x1, y1, x2, y2, x3, y3, True)
    
    'zum Vergleich auch mit False versuchen:
    'Call Draw_Triangle(Picture1, x1, y1, x2, y2, x3, y3, False)
End Sub

Sub Draw_Triangle(ByRef pict As Control, x1 As Long, y1 As Long, _
    x2 As Long, y2 As Long, x3 As Long, y3 As Long, filled As Boolean)
    
    Dim ret As Long
    Dim pt(1 To 3) As pointapi
    
    pt(1).X = x1
    pt(1).Y = y1
    pt(2).X = x2
    pt(2).Y = y2
    pt(3).X = x3
    pt(3).Y = y3
    
    If filled = True Then
        ret = Polygon(pict.hdc, pt(1), 3)
    Else
        ret = Polyline(pict.hdc, pt(1), 3)
    End If
    
    pict.Refresh
End Sub
'---------- Ende Formular "Form1" alias FORM1.FRM  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 7 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von lars sasse am 30.09.2010 um 17:40

ich weis es kommt spät, aber ich hab mein fehler damals selbst gefunden. ich hab das refresh vergessen XD
die api zeichnet das bild mit autoredraw im speicher aber aktualisirt ja selber nicht die ausgabe.

Kommentar von Cromit am 04.02.2008 um 15:02

Hallo Lars,

vergiss nicht die AutoDraw-Eigenschaft auf True zu setzen.
Auch sollte das Hintergrundobjekt (Form, UserControl, ...) auf "Undurchsichtig" gesetzt sein!
Gruß
Cromit

Kommentar von lars sasse am 25.12.2007 um 23:41

ich weis nicht warum, aber bei mir funktioniert es nicht. ich hab visualbasic 6, und winxp. er meldet zwar kein fehler, und führt den gesamten code aus, aber von den dreieck fehlt jede spur.

Kommentar von Graf Zahl am 30.07.2003 um 14:35

Hallo Klaus Langbein,
das Beispiel zum Zeichnen von Dreiecken funktioniert nur, wenn das
Dreieck ausgefüllt ist. Will man ein nicht ausgefülltes Dreieck
zeichnen, werden nur zwei Linien ausgegeben. Der Grund liegt in der
Verwendung der Api Polyline. Diese zeichnet nicht zwingend geschlossene
Figuren. Will man das mit Polyline erreichen, muß man einen Punkt mehr
angeben und diesem die Koordinaten des Startpunktes übergeben. Für ein
Dreieck muß man also vier Punkte angeben. Einfacher ist aber die Ver-
wendung der Api Polygon mit der Einstellung Fillstyle = 1 (Transparent),
da man hier mit drei Punkten auskommt. Ein Geschwindigkeitsunterschied
zwischen den beiden Verfahren ist kaum auszumachen.

Gruß

Graf Zahl


Kommentar von irq14 am 19.05.2002 um 23:17

Hallo ich habe eine Frage? Sorry ich kenne mich noch nicht so gut aus. Also ich habe 2 Textfelder und möchte 2 Werte in diese Felder schreiben. Dann soll es nach dem klick auf einen Button eine Grafik(Kuchendiagramm) ausgeben das Prozentual zu diesen Werten steht. Also 80 zu 20 aufgeteilt. Das wäre echt super nett wenn du mir helfen könntest.
mfg irq14

Kommentar von Hermann Bürkle am 01.03.2002 um 14:05

funktioniert alles am Bildschirm, aber wenn man sowas auch drucken will, gibt es größere Probleme (jedenfalls bei mir (VB6)). Gedruckt wird nur, wenn auch eine "normale" (also nicht-GDI) VB-Zeichenfunktion (z.B. line) dabei ist. Füllen, Füllfarbe setzen geht nicht.
Vielleicht hat jemand Erfahrung mit dem Ausdruck von GDI-Zeichenfunktionen?

Kommentar von sven brodowski am 17.01.2002 um 00:09

folgendes
ich möchte dynamische textfelder erstellen
danach möchte ich n xy Koordinaten einlesen und danach dann die fläche des entstandenen n Eck berechnen wer gibt mir den code in vb dazu