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)) Dieser Tipp wurde bereits 189 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
TOP! Unser Nr. 1 ![]() Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |