ich habe im englischen Forum einen Code für ein Tooltip-Fenster gefunden:
http://www.purebasic.fr/english/viewtop ... ateToolTip
Ich habe ihn erweitert um ein Trackbar-Gadget. Außerdem habe ich ihn so verändert, dass jetzt das Tooltip-Fenster nur angezeigt wird, wenn der Mauszeiger im Bereich dieses Gadgets ist. Weiterhin ist die Anzeige im Fenster jetzt "dynamisch", ich lasse nämlich die aktuelle x-Position des Mauszeigers anzeigen, was genau das ist, was ich für mein Trackbar-Gadget haben will.
Der Code mit den gerade genannten Modifikationen sieht jetzt so aus:
Code: Alles auswählen
#TTF_TRANSPARENT=$100
#TTF_TRACK=$20
#TTF_ABSOLUTE=$80
Structure TOOLINFO1
cbSize.l
uFlags.l
hwnd.l
uID.l
rect.RECT
hInst.l
lpszText.l
lParam.l
EndStructure
; TOOLINFO in PB is false
Global hToolTip,ti.TOOLINFO
Procedure CreateToolTip(hParent)
icex.INITCOMMONCONTROLSEX
ti.TOOLINFO
icex\dwSize = SizeOf(icex)
icex\dwICC = #ICC_WIN95_CLASSES
InitCommonControlsEx_(@icex)
sczTipText.s="x-position"
sczTipTitle.s=""
hToolTip = CreateWindowEx_(#WS_EX_TOPMOST, "ToolTips_Class32", "",#WS_POPUP| #TTS_NOPREFIX | #TTS_ALWAYSTIP,#CW_USEDEFAULT, #CW_USEDEFAULT,#CW_USEDEFAULT, #CW_USEDEFAULT, #Null,0, GetModuleHandle_(0),#Null)
ti\cbSize = SizeOf(TOOLINFO)
ti\uFlags = #TTF_IDISHWND | #TTF_TRACK | #TTF_ABSOLUTE ;| #TTF_TRANSPARENT
ti\hwnd = hParent
ti\uId = hParent
ti\hinst = GetModuleHandle_(0)
ti\lpszText = @sczTipText
SendMessage_(hToolTip,#TTM_ADDTOOL,0,@ti)
SendMessage_(hToolTip, #TTM_SETMAXTIPWIDTH, 0, 300)
If sczTipTitle>""
SendMessage_(hToolTip, #TTM_SETTITLE, 1, sczTipTitle)
EndIf
SendMessage_(hToolTip,#TTM_TRACKACTIVATE,1,@ti)
ProcedureReturn hToolTip
EndProcedure
OpenWindow(0, 100, 100, 400, 300, "ToolTip",#PB_Window_SystemMenu | #PB_Window_TitleBar)
TrackBarGadget(3, 50, 220, 300, 40, 0, 1000)
tooltip_visible.b = #False
Repeat
EventID.l=WaitWindowEvent()
Select EventID
Case #WM_MOUSEMOVE
;Tooltipp auf den Bereich 60 < x < 340 | 210 < y < 250 beschränken:
If tooltip_visible = #False And WindowMouseX(0) > 60 And WindowMouseX(0) < 340 And WindowMouseY(0) > 210 And WindowMouseY(0) < 250
tt = CreateToolTip(WindowID(0))
tooltip_visible = #True
EndIf
;
point.POINT\x=EventlParam()& $FFFF
point.POINT\y=EventlParam() >>16
ClientToScreen_(WindowID(0),@point)
SendMessage_(hToolTip, #TTM_TRACKPOSITION, 0,((point\y+14)<<16)+point\x+14)
SendMessage_(hToolTip, #TTM_SETTITLE, 1, Str(WindowMouseX(0)))
;
;Tooltipp entfernen, wenn Bereich 60 < x < 340 | 210 < y < 250 verlassen wird:
If tooltip_visible = #True And ((WindowMouseX(0) < 60 Or WindowMouseX(0) > 340) Or (WindowMouseY(0) < 210 Or WindowMouseY(0) > 250))
DestroyWindow_(tt)
tooltip_visible = #False
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow