Code: Select all
Enumeration
#Window
#Text
#Trackbar
EndEnumeration
#TBM_SETTOOLTIPS = #WM_USER + 29
#TTF_TRACK = $20
Define TooltipID, ti.TOOLINFO
Define Text.s
Procedure CursorOverGadget(WindowNr, GadgetNr)
Protected CursorX, CursorY
Protected X, Y, Width, Height
Protected Result = #False
If IsWindow(WindowNr)
CursorX = WindowMouseX(WindowNr)
CursorY = WindowMouseY(WindowNr)
EndIf
If IsGadget(GadgetNr)
X = GadgetX(GadgetNr)
Y = GadgetY(GadgetNr)
Width = GadgetWidth(GadgetNr)
Height = GadgetHeight(GadgetNr)
EndIf
If CursorX >= X And CursorX <= X + Width
If CursorY >= Y And CursorY <= Y + Height
Result = #True
EndIf
EndIf
ProcedureReturn Result
EndProcedure
If OpenWindow(#Window, 0, 0, 200, 70, "TrackBar Tooltip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(#Text, 10, 10, 180, 20, "Range from -82.0% to +82.0%")
TrackBarGadget(#Trackbar, 10, 40, 180, 20, 0, 100)
TooltipID = CreateWindowEx_(0, #TOOLTIPS_CLASS, "", #TTS_NOPREFIX, 0, 0, 0, 0, WindowID(#Window), 0, GetModuleHandle_(0), 0)
ti\cbSize = SizeOf(TOOLINFO)
ti\hWnd = WindowID(#Window)
ti\uFlags = #TTF_IDISHWND | #TTF_TRACK | #TTF_CENTERTIP
ti\uId = GadgetID(#Trackbar)
SendMessage_(GadgetID(#Trackbar), #TBM_SETTOOLTIPS, TooltipID, 0)
Repeat
Select WaitWindowEvent()
; Case #PB_Event_Gadget
; If EventGadget() = #Trackbar
; Text = StrF((GetGadgetState(#Trackbar) - 50) / 10.0, 1) + "%"
; ti\lpszText = @Text
; SendMessage_(TooltipID, #TTM_UPDATETIPTEXT, 0, @ti)
; SendMessage_(TooltipID, #TTM_TRACKACTIVATE, #True, @ti)
; EndIf
;
; Case #WM_LBUTTONDOWN
; GetCursorPos_(@p.POINT)
; If CursorOverGadget(#Window, #Trackbar) = #True
; SendMessage_(TooltipID, #TTM_ADDTOOL, 0, @ti)
; SendMessage_(TooltipID, #TTM_TRACKPOSITION, 0, (p\y << 20 + p\x))
; SendMessage_(TooltipID, #TTM_TRACKACTIVATE, #False, @ti)
; EndIf
Case #WM_LBUTTONUP
SendMessage_(TooltipID, #TTM_TRACKACTIVATE, #True, @ti)
SendMessage_(TooltipID, #TTM_DELTOOL, 0, @ti)
Case #WM_MOUSEMOVE
GetWindowRect_(GadgetID(#Trackbar),r.RECT)
GetCursorPos_(@p.POINT)
If CursorOverGadget(#Window, #Trackbar) = #True
Text = Str(p\x - r\left - 90) + "%"
ti\lpszText = @Text
SendMessage_(TooltipID, #TTM_UPDATETIPTEXT, 0, @ti)
SendMessage_(TooltipID, #TTM_TRACKACTIVATE, #True, @ti)
SendMessage_(TooltipID, #TTM_ADDTOOL, 0, @ti)
SendMessage_(TooltipID, #TTM_TRACKPOSITION, 0, (p\y << 20 + p\x))
SendMessage_(TooltipID, #TTM_TRACKACTIVATE, #False, @ti)
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf