Announcement

Collapse
No announcement yet.

GDI - Elementausrichtung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GDI - Elementausrichtung

    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.
    Attached Files

  • #2
    >> Wie ihr seht, sind die Elemente nicht wirklich ausgerichtet.

    Nein, sehe ich nicht. Für mich sieht das sehr ordentlich ausgerichtet aus. Kannst Du irgendwie ein Bild machen, wie es Deiner Meinung nach aussehen soll?
    Günther

    Comment


    • #3
      nun die Elemente sollten zut mitte ausgerichtet sein.

      Comment


      • #4
        Du solltest die Schleife mal auf einen einzigen Durchlauf reduzieren um zu sehen, bei welchem i-Wert welches Rechteck gezeichnet wird, ob dazu der Rotationswinkel richtig berechnet wurde, und um welchen Punkt das Rechteck rotiert, und das dann mit Deinen Erwartungen vergleichen.
        Günther

        Comment

        Working...
        X