vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls   |   VB-Versionen: VB202211.03.25
Owner Drawn Tooltip für ToolStrip- und Menüleisten-Items

Eine spezielle Funktion für das Anzeigen von selbst gezeichneten ToolTips für Elemente von ToolStrips und Menues

Autor:   Dietrich HerrmannBewertung:  Views:  789 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein 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))



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2025 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.