hi
hier http://s160492259.online.de/Upload/Anzeige.JPG habe ich mal ein Bild hinterlegt, wie die Anzeige aussieht (oberes Bild). Aus den beiden Bildern darunter wird sie erstellt, indem ich über einen DrawArc Befehl mit einer Texture Brush jeweils einen Kreisabschnitt des Vor- und Hintergrundbildes Zeichne.
Zum Zeichnen verwende ich den Folgenden Code:
Private Sub UpdateValue()
Dim bmp As New Bitmap(ctrl.Width, ctrl.Height) 'Das Bitmap für die
' Zeichnung
Dim PenScale As New Pen(ForColor, 2) 'Stift für Scala
Dim txpBackround As New TextureBrush(My.Resources.AnzeigeGrün) _
'Farbverlauf für Hintergrund
Dim txpForground As New TextureBrush(My.Resources.AnzeigeGrau) _
'Farbverlauf für Vordergrund
Dim penBackround As New Pen(txpBackround, 10) 'Stift mit Farbverlauf
' Hintergrund
Dim penForground As New Pen(txpForground, 10) 'Stift mit Farbverlauf
' Vordergrund
Dim Winkel As Integer 'Winkel für Skalierung
Dim PointX As Point 'Scale-Strich Anfang
Dim PointY As Point 'Scale-Strich Ende
ctrl.Image = bmp 'Der Picturebox das Bild zuweisen
'Schreiben des Wertes in das mittlere Label
lblValue.Text = CStr(Value) 'Text
lblValue.Left = CInt(ctrl.Width / 2 - lblValue.Width / 2) _
'Positionskorrektur un X und Y
lblValue.Top = CInt(ctrl.Height / 2 - lblValue.Height / 2)
'Kontrolle, ob Value zwischen Min und Max liegt
If Value < scaleMin Then
Value = scaleMin
ElseIf Value > scaleMax Then
Value = scaleMax
End If
'Min Wert abziehen, damit Anzeige bei 0 beginnt
Value -= scaleMin
'Zeichnung der Scala
Using ctrlGraph As Graphics = Graphics.FromImage(bmp)
'Scaleneinteilung
For Winkel = 135 To 405 Step 45 'Alle 45° ein Strich
With PointX 'Anfangspunkt auf dem Aussenkreis der Skala
.X = CInt(1.05 * (Radius - Abstand) * Cos(Winkel * PI / _
180) + Mitte.X)
.Y = CInt(1.05 * (Radius - Abstand) * Sin(Winkel * PI / _
180) + Mitte.Y)
End With
With PointY 'Endpunkt 10% ausserhalb des Aussenkreis der Skala
.X = CInt(1.15 * (Radius - Abstand) * Cos(Winkel * PI / _
180) + Mitte.X)
.Y = CInt(1.15 * (Radius - Abstand) * Sin(Winkel * PI / _
180) + Mitte.Y)
End With
'With ctrlGraph
With ctrlGraph
.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
.DrawLine(PenScale, PointX, PointY)
End With
Next
Select Case Style
Case 1 'Style 1
With ctrlGraph 'Gaph anzeigen
.SmoothingMode = _
Drawing.Drawing2D.SmoothingMode.HighQuality
.DrawArc(penForground, RectPix(RectPrc(Frame, Prcsize), _
Abstand), CSng(135 + Value * DecPerUnit), CSng(270 - _
Value * DecPerUnit))
.DrawArc(penBackround, RectPix(RectPrc(Frame, Prcsize), _
Abstand), CSng(135), CSng(Value * DecPerUnit))
'.DrawArc(Pens.Pink, RectPix(RectPrc(Frame, Prcsize),
' Abstand), CSng(135 - Rundung), CSng(Value *
' DecPerUnit + Rundung + Rundung))
End With
End Select
'ctrlGraph.Dispose() 'Resourcen freigeben
End Using
ctrl.Refresh()
End Sub |