VB 5/6-Tipp 0460: 3D-Kuchendiagramme mit der Pie-Api realisieren
von Jan Thiede
Beschreibung
Mit der Pie-Api lassen sich nur flache Kreis/Kuchendiagramme erstellen. Wenn man allerdings ein zweites leicht versetzt dazu zeichnet, bekommt es einen schönen 3D Effekt, wie in den Datenträger-Eigenschaften vom Explorer.
Update am 23. September 2004 von Thomas und Tobias Rebele: Der Tipp wurde an einigen Stellen verbessert, so dass 100% nun wirklich als 100% angezeigt wird und die 3D-Effekte realistischer wirken.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'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 Projekt1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Bildfeld-Steuerelement "Picture1" 'Autor: Jan Thiede 'E-Mail: jan.thiede@web.de 'Hinweis: Teile dieser Source wurden aus einer Delphi-Funktion nach VB umgeschrieben Option Explicit Private Declare Function Pie Lib "gdi32" ( _ ByVal hdc As Long, ByVal X1 As Long, _ ByVal Y1 As Long, ByVal X2 As Long, _ ByVal Y2 As Long, ByVal X3 As Long, _ ByVal Y3 As Long, ByVal X4 As Long, _ ByVal Y4 As Long) As Long Private Const PI = 3.14159265 Public Sub PaintPie(ByRef oPicBox As PictureBox, _ ByVal dblValue As Double, _ ByVal dblMax As Double) Dim nWidth As Integer, nHeight As Integer, nDeep As Integer Dim nLeft As Integer, nTop As Integer Dim nWinkel As Double, nGrad As Double Dim dblX1 As Double, dblY1 As Double Dim i As Integer 'Farben Const DarkMagenta = 8388736 Const DarkBlue = 8388608 With oPicBox 'Ein paar Einstellungen setzen .Cls .AutoRedraw = True .ScaleMode = vbPixels .ForeColor = vbBlack .DrawWidth = 1 .FillStyle = vbSolid 'Die Höhe des Kuchens nDeep = 10 'Koordinaten errechnen nWidth = oPicBox.ScaleHeight + Int(oPicBox.ScaleHeight / 2) - 20 nHeight = oPicBox.ScaleHeight - 20 nLeft = (oPicBox.ScaleWidth / 2) - (nWidth / 2) nTop = (oPicBox.ScaleHeight / 2) - (nHeight / 2) 'Winkel im Gradmaß errechnen nWinkel = (dblValue / dblMax) * 360 nGrad = Int(nWinkel - 270) 'Koordinaten dblX1 = nWidth * Sin(((nGrad * PI) / 180)) dblY1 = nHeight * Cos(((nGrad * PI) / 180)) If nWinkel = 360 Then 'Die unteren Scheiben (für den 3D-Effekt) For i = nDeep To 1 Step -1 If i < nDeep Then .ForeColor = DarkBlue .FillColor = DarkBlue Pie .hdc, nLeft, nTop + i, nLeft + nWidth, nTop + nHeight + i, nLeft, _ nTop + (nHeight / 2) + i, nLeft, nTop + (nHeight / 2) + i Next i 'Die oberste Scheibe .ForeColor = vbBlack .FillColor = vbBlue Pie .hdc, nLeft, nTop, nLeft + nWidth, nTop + nHeight, nLeft, _ nTop + (nHeight / 2), nLeft, nTop + (nHeight / 2) Else 'Die unteren Scheiben (für den 3D-Effekt) For i = nDeep To 1 Step -1 If i < nDeep Then .ForeColor = DarkMagenta .FillColor = DarkMagenta Pie .hdc, nLeft, nTop + i, nLeft + nWidth, nTop + nHeight + i, nLeft, _ nTop + (nHeight / 2) + i, nLeft, nTop + (nHeight / 2) + i If i < nDeep Then .ForeColor = DarkBlue .FillColor = DarkBlue Pie .hdc, nLeft, nTop + i, nLeft + nWidth, nTop + nHeight + i, nLeft, _ nTop + (nHeight / 2) + i, nLeft + (nWidth / 2) - Round(dblX1), _ nTop + (nHeight / 2) - Round(dblY1) + i Next i 'Die oberste Scheibe .ForeColor = vbBlack .FillColor = vbMagenta Pie .hdc, nLeft, nTop, nLeft + nWidth, nTop + nHeight, nLeft, _ nTop + (nHeight / 2), nLeft, nTop + (nHeight / 2) .FillColor = vbBlue Pie .hdc, nLeft, nTop, nLeft + nWidth, nTop + nHeight, nLeft, _ nTop + (nHeight / 2), nLeft + (nWidth / 2) - Round(dblX1), _ nTop + (nHeight / 2) - Round(dblY1) End If End With End Sub Private Sub Form_Load() PaintPie Picture1, 33, 100 End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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 2 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 Philipp Stephani am 13.11.2003 um 19:54
Ich wollt nur darauf hinweisen, dass es dafür auch eine Klasse in der Klassenrubrik gibt.
Kommentar von Ralf Faude am 30.12.2002 um 10:29
Was noch fehlt ist die Beschriftung der Kuchstücke mit Prozentzahl.