Hallo,
zuerst einmal den Code den ich mir bis jetzt zusammen gebastelt habe:
Public Class MFD_Comm
Public Sub CommDrw(ByVal a As Single, ByVal b As Single, ByVal c As Single, _
ByVal d As Single, ByVal thk As Integer, ByVal fill As Boolean, ByVal col _
As Color, ByVal txt1 As String, ByVal txt2 As String, ByVal g As Graphics)
Dim x As Single
Dim y As Single
x = c
y = d
x = x / 2
y = y / 2
Dim r As New Rectangle(a, b, c, d)
Dim fnt As New Font("Arial Narrow", 11)
If txt2 = Nothing Then
Dim siz As SizeF = g.MeasureString(txt1, fnt)
If fill = False Then
Dim mypen As New Pen(Color.DeepSkyBlue, thk)
g.DrawRectangle(mypen, r)
mypen.Dispose()
g.DrawString(txt1, fnt, Brushes.DeepSkyBlue, x + a - siz.Width _
/ 2, y + b - siz.Height / 2)
fnt.Dispose()
Else
Dim mypen As New Pen(col, thk)
Dim mybrush As Brush
mybrush = New SolidBrush(col)
g.DrawRectangle(mypen, r)
g.FillRectangle(mybrush, r)
mypen.Dispose()
g.DrawString(txt1, fnt, Brushes.White, x + a - siz.Width / 2, y _
+ b - siz.Height / 2)
fnt.Dispose()
End If
Else
Dim siz1 As SizeF = g.MeasureString(txt1, fnt)
Dim siz2 As SizeF = g.MeasureString(txt2, fnt)
If fill = False Then
Dim mypen As New Pen(Color.DeepSkyBlue, thk)
g.DrawRectangle(mypen, r)
mypen.Dispose()
g.DrawString(txt1, fnt, Brushes.DeepSkyBlue, x + a - siz1.Width _
/ 2, y + b - 7.8 - siz1.Height / 2)
g.DrawString(txt2, fnt, Brushes.DeepSkyBlue, x + a - siz2.Width _
/ 2, y + b + 6.2 - siz2.Height / 2)
fnt.Dispose()
Else
Dim mypen As New Pen(col, thk)
Dim mybrush As Brush
mybrush = New SolidBrush(col)
g.DrawRectangle(mypen, r)
g.FillRectangle(mybrush, r)
mypen.Dispose()
g.DrawString(txt1, fnt, Brushes.White, x + a - siz1.Width / 2, _
y + b - 7.8 - siz1.Height / 2)
g.DrawString(txt2, fnt, Brushes.White, x + a - siz2.Width / 2, _
y + b + 6.2 - siz2.Height / 2)
fnt.Dispose()
End If
End If
End Sub
End Class Public Class B772_MFD
Protected Overrides Sub OnPaint(ByVal e As _
System.Windows.Forms.PaintEventArgs)
Dim rect As New MFD_Comm()
Dim act As New MFD_Comm()
rect.CommDrw(10, 10, 130, 28, 1, True, Color.Gray, "ATC", Nothing, _
e.Graphics)
act.CommAct(9, 9, 133, 31, e.Graphics)
rect.CommDrw(145, 10, 130, 28, 1, False, Color.Gray, "FLIGHT", _
"INFORMATION", e.Graphics)
rect.CommDrw(280, 10, 130, 28, 1, True, Color.LimeGreen, "COMPANY", _
Nothing, e.Graphics)
rect.CommDrw(10, 43, 130, 28, 1, False, Color.Gray, "REVIEW", Nothing, _
e.Graphics)
rect.CommDrw(145, 43, 130, 28, 1, True, Color.Gray, "MANAGER", Nothing, _
e.Graphics)
rect.CommDrw(280, 43, 130, 28, 1, False, Color.Aquamarine, "NEW" & _
"MESSAGES", Nothing, e.Graphics)
End Sub
End Class Bei dem oberen Code-Fragment handelt es sich um eine Klasse mit zwei Funktionen (wobei ich nicht wirklich weis ob man das eine Funktion nennt. Kenne mich mit der ganzen Terminologie noch nicht so aus) die Rechtecke mit Text oder ohne Text auf der Form zeichnen. Mein Problem: Ich möchte, wenn sich die Mouse über einem dieser Rechtecke befindet, einen weißen Rahmen um eben dieses Rechteck zeichen welches bei verlassen der Maus des Rechtecks wieder verschwindet. Ich finde aber weder eine Methode die Rechtecke schlau abzuspeichern so das ich einfach eine Funktion habe die beim Ereigniss MouseOver (oder MouseHover. Keine Ahnung welches jetzt das richtig ist) nachschaut ob sich die Mouse auch über dem jew. Rechteck befindet und dann den weißen Rahmen zeichnet (und beim verlassen wieder weg macht), noch kann ich die Funktion CommDrw aus der Ereignissprozedur MouseHover(Over) aufrufen weil das "e" nicht wie jetzt bei der Protected Overrides Sub OnPaint als "e As System.Windows.Forms.PaintEventArgs" definiert ist.
Vielen Dank schon mal im Vorraus!
Fred |