Hiho,
ich habe ein kleines Problem mit der Ausrichtung einiger Elemente die mit GDI gezeichnet werden.
Meine Grundlage ist folgender Code: http://www.codeproject.com/KB/progre...Indicator.aspx
Ich möchte nur statt Kreise Rechtecke die zur Mitte hin ausgerichtet sind haben.
hier der Code:
[highlight=vbnet] Private Sub Paint_Rectangle(ByVal e As PaintEventArgs)
Dim angle As Single = 360.0F / _numberOfCircles
Dim oldState As GraphicsState = e.Graphics.Save()
e.Graphics.TranslateTransform(Width / 2.0F, Height / 2.0F)
e.Graphics.RotateTransform(angle * _value * CInt(_rotation))
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
For i As Integer = 1 To _numberOfCircles
Dim alphaValue As Integer = If((255.0F * (i / CSng(_numberOfVisibleCircles))) > 255.0, 0, CInt(Math.Truncate(255.0F * (i / CSng(_numberOfVisibleCircles)))))
Dim alpha As Integer = If(_stopped, CInt(Math.Truncate(255.0F * (1.0F / 8.0F))), alphaValue)
Dim drawColor As Color = Color.FromArgb(alpha, _circleColor)
Using brush As New SolidBrush(drawColor)
Dim sizeRate As Single = 4.5F / _circleSize
Dim size As Single = Width / sizeRate
Dim diff As Single = (Width / 4.5F) - size
Dim x As Single = (Width / 9.0F) + diff
Dim y As Single = (Height / 9.0F) + diff
e.Graphics.FillRectangle(brush, x, y, size / 3, size * 2)
e.Graphics.RotateTransform(angle * (CInt(_rotation)))
End Using
Next
'e.Graphics.Restore(oldState)
Dim percent As String = GetDrawText()
If Not String.IsNullOrEmpty(percent) Then
Dim textSize As SizeF = e.Graphics.MeasureString(percent, Font)
Dim textX As Single = (Width / 2.0F) - (textSize.Width / 2.0F)
Dim textY As Single = (Height / 2.0F) - (textSize.Height / 2.0F)
Dim format As New StringFormat() With { _
.Alignment = StringAlignment.Center, _
.LineAlignment = StringAlignment.Center _
}
Dim rectangle As New RectangleF(textX, textY, textSize.Width, textSize.Height)
Using textBrush As New SolidBrush(ForeColor)
e.Graphics.DrawString(percent, Font, textBrush, rectangle, format)
End Using
End If
End Sub[/highlight]
und das Ergebnis ist angehängt.
Wie ihr seht, sind die Elemente nicht wirklich ausgerichtet.
Wie stell ich das am besten an?
Danke schon mal.
ich habe ein kleines Problem mit der Ausrichtung einiger Elemente die mit GDI gezeichnet werden.
Meine Grundlage ist folgender Code: http://www.codeproject.com/KB/progre...Indicator.aspx
Ich möchte nur statt Kreise Rechtecke die zur Mitte hin ausgerichtet sind haben.
hier der Code:
[highlight=vbnet] Private Sub Paint_Rectangle(ByVal e As PaintEventArgs)
Dim angle As Single = 360.0F / _numberOfCircles
Dim oldState As GraphicsState = e.Graphics.Save()
e.Graphics.TranslateTransform(Width / 2.0F, Height / 2.0F)
e.Graphics.RotateTransform(angle * _value * CInt(_rotation))
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
For i As Integer = 1 To _numberOfCircles
Dim alphaValue As Integer = If((255.0F * (i / CSng(_numberOfVisibleCircles))) > 255.0, 0, CInt(Math.Truncate(255.0F * (i / CSng(_numberOfVisibleCircles)))))
Dim alpha As Integer = If(_stopped, CInt(Math.Truncate(255.0F * (1.0F / 8.0F))), alphaValue)
Dim drawColor As Color = Color.FromArgb(alpha, _circleColor)
Using brush As New SolidBrush(drawColor)
Dim sizeRate As Single = 4.5F / _circleSize
Dim size As Single = Width / sizeRate
Dim diff As Single = (Width / 4.5F) - size
Dim x As Single = (Width / 9.0F) + diff
Dim y As Single = (Height / 9.0F) + diff
e.Graphics.FillRectangle(brush, x, y, size / 3, size * 2)
e.Graphics.RotateTransform(angle * (CInt(_rotation)))
End Using
Next
'e.Graphics.Restore(oldState)
Dim percent As String = GetDrawText()
If Not String.IsNullOrEmpty(percent) Then
Dim textSize As SizeF = e.Graphics.MeasureString(percent, Font)
Dim textX As Single = (Width / 2.0F) - (textSize.Width / 2.0F)
Dim textY As Single = (Height / 2.0F) - (textSize.Height / 2.0F)
Dim format As New StringFormat() With { _
.Alignment = StringAlignment.Center, _
.LineAlignment = StringAlignment.Center _
}
Dim rectangle As New RectangleF(textX, textY, textSize.Width, textSize.Height)
Using textBrush As New SolidBrush(ForeColor)
e.Graphics.DrawString(percent, Font, textBrush, rectangle, format)
End Using
End If
End Sub[/highlight]
und das Ergebnis ist angehängt.
Wie ihr seht, sind die Elemente nicht wirklich ausgerichtet.
Wie stell ich das am besten an?
Danke schon mal.
Comment