Hi,
ich habe ein Problem wo ich einfach keine Lösung zu finde.
Ich habe eine Form mit mehreren Groupboxen wo Informationen zu bestimmten durchgeführten Schritten stehen.
Nun möchte ich über die gesamte Form (diagonal) das Wort "Demoversion" haben.
Dies habe ich auch schon realisiert(Graphics.DrawString...), jedoch mit dem Schönheitsfehler das dieses Wort unter den Groupboxen mit den Labeln steht.
Das kommt dadurch das ich mir ja das Grafikobjekt von der Form, im Paint Ereignis, hole.
Gibt es jetzt eine Möglichkeit das Grafikobjekt über die Controls zu bekommen?
Anbei der Code zum anzeigen des Demo String
Danke
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
' Brush-Objekt mit halbtransparenter Farbe
Dim br As New SolidBrush(Color.FromArgb(100, Color.Black))
Dim Displaytext as String = "Demoversion"
' String-Format-Objekt für zentriertet Ausgabe
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
Dim iWidth As Integer
Dim sWinkel As Single
' Diagonale holen
iWidth = Get_Width(Me.Height, Me.Width)
' Winkel holen
sWinkel = Get_Winkel(iWidth, Me.Height)
' Menue abziehen
iWidth = iWidth - 50
' Text drehen
e.Graphics.RotateTransform(sWinkel - 3)
' Text zeichnen
e.Graphics.DrawString(Displaytext, Label1.Font, br, New RectangleF( _
50, 0, iWidth - 10, 30), sf)
' Umrandung zeichnen
'oGraphics.DrawRectangle(Pens.Gray, New Rectangle(80, 0, iWidth - 10,
' 30))
' Aufräumen
sf.Dispose()
br.Dispose()
End Sub
Private Function Get_Width(ByVal iHeight As Integer, ByVal iWidth As Integer) _
As Integer
Dim ddiagonale As Double = 0
Dim iReturnValue As Integer = 0
' Diagonale ausrechnen
ddiagonale = Convert.ToDouble((iHeight * iHeight)) + Convert.ToDouble(( _
iWidth * iWidth))
' Wurzel ziehen
Dim dErgebnis As Double = Math.Sqrt(ddiagonale)
' Rückgabe casten
iReturnValue = Convert.ToInt32(dErgebnis)
Return iReturnValue
End Function
Private Function Get_Winkel(ByVal iWidth As Integer, ByVal iHeight As Integer) _
As Single
Dim iReturnValue As Single = 0
Dim dSinusWert As Double = 0
Dim dWinkel As Double = 0
' Sinuswert vom Winkel ermitteln
dSinusWert = iHeight / iWidth
' Winkel aus Sinuswert ermitteln
dWinkel = Math.Asin(dSinusWert) * 180 / Math.PI
' Rückgabe casten
iReturnValue = Convert.ToSingle(dWinkel)
Return iReturnValue
End Function |