Ich möchte ein 3D-Kuchendiagramm programmieren, das man beliebig im Raum drehen kann. Da wäre es natürlich toll, wenn die Rand-Polygone einen Frabverlauf zeigen würden.
Ich möchte also mit der Win32-API Polygon zeichnen und mit einem Farbverlauf füllen.
Hi Stefan,
ich weiss nicht ob Du es brauchen kannst - vielleicht ist es für Dich modifizierbar!!
greets from MichL (Vienna)
VB6 - Farbverlauf von oben Blau nach unten Schwarz:
Public Sub Dither(vForm As Form)
Dim intLoop As Integer
Dim intScaleMode As Integer
If vForm.WindowState = vbMinimized Then Exit Sub
intScaleMode = vForm.ScaleMode
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256
For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(0, 0, 255 - intLoop), B 'Blau
'vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(255 - intLoop, 0, 0), B 'Rot
Next intLoop
vForm.ScaleMode = intScaleMode
End Sub
Hi. Habe was gefunden. Ich schreibe es nur aus einem Buch ab, aber bisher hat alles was da drin stand funktioniert.
form: picturebox picFVL und commandbutton
code:
declare function CreateSolidBrush ...
declare function DeleteObjext ...
declare function FillRect...
Type RECT
...
End Type
private sub Command1\_Click()
dim hb as long, i as long, rec as rect
with picFVL
.width=3\*255
doevents
rec.botom=.picFVL
rec.top=0
.print " "
for i=0 to 255
hb=createsolidbrush(RGB(i,0,255-i))
rec.left=i rec.Right=(i+1)
fillrect .hdc, rec, hb
deleteobject hb
next
for i=0 to 255
hb=createsolidbrush(RGB(255,i,0))
rec.left=i+255 rec.Right=i+256
fillrect .hdc, rec, hb
deleteobject hb
next
for i=0 to 255
hb=createsolidbrush(RGB(255-i,255,0))
rec.left=i+510 rec.Right=i+511
fillrect .hdc, rec, hb
deleteobject hb
next
end with
end sub
Wenn du statt dessen, z.B. auf einem anderen Control malen willst, mußt du dessen hdc benutzen.
Probiers einfach aus.
Für Delphi kann ich’s sicher sagen, sollte in C oder VB aber zumindest vom Prinzip her ähnlich sein:
Am besten, du erstellst genau die REGION, die du mit einem Farbverlauf füllen willst. Das geht mit den API-Begehlen CreateRgn, CreateEllipticRgn usw. und CombineRgn.
Durch logische Verknüpfung deiner einselenen (wohl elliptischen) Regionen erhälst du den Rand deines Kuchendiagramms als Region. Diese Wählst du aus mit SelectClipRgn und dann füllst du den (rechteckigen) Bereiche „hinter“ der Region einfach so, also wolltest du den Fensterhintergrund mit einem Farbverlauf füllen. That’s it.
Sieh in der Online-Hilfe nach und wenn du spezielle Probleme hast, melde dich nochmal.