Rubrik: Controls | VB-Versionen: VB2022 | 11.03.25 |
![]() Eine spezielle Funktion für das Anzeigen von selbst gezeichneten ToolTips für Elemente von ToolStrips und Menues | ||
Autor: ![]() | Bewertung: ![]() ![]() ![]() ![]() ![]() | Views: 789 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Das ToolTip-Element in VB wirkt nicht auf Elemente obengenannter Container. Diese Elemente weisen in ihren Eigenschafte nur den ToolTipText auf, der mit dem Standard-Tooltip angezeigt wird.
Die folgende Funktion gestattet die Anzeige von ownerdrawn Tooltips für derartige Element. Dabei sind die Eigenschaften Font, Hintergrundfarbe, Vordergrundfarbe, Randfarbe und -breite wählbar.
Hier die Funktion:
''' <summary> ''' ToolTips für Menüpunkte ''' </summary> ''' <param name="MyToolStrip">ein ToolStrip oder MenueStrip</param> ''' <param name="colSet">ein Farben-Set als Feld (Hinter/Vordergrund de ToolTips)</param> ''' <param name="theFont">der Font für den ToolTip</param> ''' <param name="thePen">der Stift für den Rand</param> Public Sub SetupCustomDraw(MyToolStrip As ToolStrip, colSet() As Color, theFont As Font, thePen As Pen) Dim MyField = MyToolStrip.GetType().GetProperty("ToolTip", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) Dim MyToolTip As ToolTip = CType(MyField.GetValue(MyToolStrip), ToolTip) Dim F As Font, TextDim As Size, Arect, Brect As Rectangle Dim TipText As String, textSize As Size FakeLbl.AutoSize = True Dim gLbl As Graphics = FakeLbl.CreateGraphics Dim sf As New StringFormat(StringFormat.GenericDefault) _ With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near} ' ToolTip einstellen With MyToolTip .OwnerDraw = True .BackColor = colSet(0) ' Farben gemäß Colorset .ForeColor = colSet(1) .UseAnimation = True End With ' ToolTip PopUp (anzeigen) AddHandler MyToolTip.Popup, Sub(obj, args) TipText = TryCast(obj, ToolTip).GetToolTip(args.AssociatedControl) textSize = Nothing textSize = Size.Add(TextRenderer.MeasureText(gLbl, TipText, theFont, Size.Empty, toolTipFlags), New Size(0, 0)) textSize = New Size(textSize.Width, textSize.Height + theFont.Height) args.ToolTipSize = New Size(textSize.Width, textSize.Height) End Sub ' ToolTip Draw (zeichnen) AddHandler MyToolTip.Draw, Sub(obj, args) F = New Font(theFont.FontFamily, theFont.Size, FontStyle.Regular) Dim fs As Short = F.SizeInPoints With args .DrawBackground() .Graphics.SmoothingMode = SmoothingMode.HighQuality Arect = New Rectangle(0, 0, textSize.Width, textSize.Height) Brect = Rectangle.Inflate(Arect, -1, -1) .Graphics.DrawRectangle(thePen, Brect) .Graphics.DrawString(.ToolTipText, F, Brushes.Brown, Arect, sf) End With End Sub End Sub
Gemeinsam mit der Funktion MUSS ein Fake-Label definiert werden:
' ein Fake Label zur Berechnung der Textgröße Dim FakeLbl As New Label
Dann kann man diese Funktion folgendermaßen anwenden:
SetupCustomDraw(MenuStrip, {Color.Beige, Color.Brown}, Font, New Pen(Color.Brown, 6)) SetupCustomDraw(ToolStripMenuItem.DropDown, {Color.MintCream, Color.Green}, Font, New Pen(Color.Green, 6))