for version 4.51 of Pure basic.
Code: Select all
; Multiline Tooltips - method 1: only supporting one-line string as parameter,
; it will be splitted automatically if the 'maxW'idth is reached.
Enumeration
#Menu_Main
EndEnumeration
Enumeration
#Menu_Remove_Button_TT
#Menu_Remove_String_TT
#Menu_Change_Button_TT
#Menu_Change_String_TT
EndEnumeration
Enumeration
#Button_0
#String_0
EndEnumeration
Procedure.l AddTooltip(Gadget, Tooltext$, maxW)
;--> Remove the #TTS_BALLOON flag in the next line if you want the rectangular Tooltip
hToolTip = CreateWindowEx_(0, "ToolTips_Class32", "", #TTS_NOPREFIX | #TTS_BALLOON, 0, 0, 0, 0, 0, 0, GetModuleHandle_(0), 0)
SendMessage_(hToolTip, #TTM_SETTIPTEXTCOLOR, GetSysColor_(#COLOR_INFOTEXT), 0)
SendMessage_(hToolTip, #TTM_SETTIPBKCOLOR, GetSysColor_(#COLOR_INFOBK), 0)
ttAdd.TOOLINFO\cbSize = SizeOf(TOOLINFO)
ttAdd\uFlags = #TTF_SUBCLASS | #TTF_IDISHWND
;--> Here's where the multiline comes into play by setting the maxWidth
SendMessage_(hToolTip, #TTM_SETMAXTIPWIDTH, 0, maxW)
ttAdd\hWnd = WindowID(0)
ttAdd\uId = GadgetID(Gadget)
ttAdd\hinst = 0
ttAdd\lpszText = @Tooltext$
SendMessage_(hToolTip, #TTM_ADDTOOL, 0, ttAdd)
SendMessage_(hToolTip, #TTM_SETDELAYTIME, #TTDT_AUTOPOP, 15000)
SendMessage_(hToolTip, #TTM_UPDATE , 0, 0)
ProcedureReturn hToolTip
EndProcedure
Procedure.l RemoveToolTip(hTT.l, Gadget.l)
ttRemove.TOOLINFO\cbSize = SizeOf(TOOLINFO)
ttRemove\hWnd = WindowID(0)
ttRemove\uId = GadgetID(Gadget)
SendMessage_(hTT, #TTM_DELTOOL, 0, ttRemove)
EndProcedure
Procedure.l ChangeToolTip(hTT.l, Gadget.l, Tooltext$)
ttChange.TOOLINFO\cbSize = SizeOf(TOOLINFO)
ttChange\hWnd = WindowID(0)
ttChange\uId = GadgetID(Gadget)
ttChange\lpszText = @Tooltext$
SendMessage_(hTT, #TTM_UPDATETIPTEXT, 0, ttChange)
EndProcedure
If OpenWindow(0, 0, 0, 270, 110, "Multiline Gadget Tooltip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; Menu creation
CreateMenu(#Menu_Main, WindowID(0))
MenuTitle("ToolTip Remove")
MenuItem(#Menu_Remove_Button_TT, "Remove Button ToolTip")
MenuItem(#Menu_Remove_String_TT, "Remove String ToolTip")
MenuTitle("ToolTip Text")
MenuItem(#Menu_Change_Button_TT, "Change Button ToolTip")
MenuItem(#Menu_Change_String_TT, "Change String ToolTip")
; Gadget creation, the return values of AddToolTip() is needed to change/remove them later
ButtonGadget(#Button_0, 10, 10, 250, 20, "ButtonGadget with Tooltip")
hButtonTT.l = AddTooltip(#Button_0, "This is a multiline Tooltip for the ButtonGadget", 200)
StringGadget(#String_0, 10, 60, 250, 20, "StringGadget with Tooltip")
hStringTT.l = AddTooltip(#String_0, "This is a multiline Tooltip for the StringGadget", 200)
quit = #False
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_Change_Button_TT
ChangeToolTip(hButtonTT, #Button_0, InputRequester("Change Button ToolTip Text", "Enter new text.", ""))
Case #Menu_Change_String_TT
ChangeToolTip(hStringTT, #String_0, InputRequester("Change String ToolTip Text", "Enter new text.", ""))
Case #Menu_Remove_Button_TT
;--> Remove the ButtonGadget Tooltip
RemoveToolTip(hButtonTT, #Button_0)
;--> Disable menu items for ButtonGadget ToolTip
DisableMenuItem(#Menu_Remove_Button_TT, 1, #True)
DisableMenuItem(#Menu_Change_Button_TT, 1, #True)
Case #Menu_Remove_String_TT
;--> Remove the StringGadget Tooltip
RemoveToolTip(hStringTT, #String_0)
;--> Disable menu items for StringGadget ToolTip
DisableMenuItem(#Menu_Remove_String_TT, 1, #True)
DisableMenuItem(#Menu_Change_String_TT, 1, #True)
EndSelect
Case #PB_Event_CloseWindow
quit = #True
EndSelect
Until quit = #True
EndIf
End