Возник вопрос - как вычислить размер окна tooltip? Получаются неверные значения.
#TTF_TRACK = $20 #TTF_ABSOLUTE = $80 cursorWidth = GetSystemMetrics_(#SM_CXCURSOR) cursorHeight = GetSystemMetrics_(#SM_CYCURSOR) Macro MakeLong(low, high) low | high <<16 EndMacro Global ti.TOOLINFO ; --> Create tooltip for entire window Procedure myWindowToolTip(hwnd, ttText$) ti.TOOLINFO\cbSize = SizeOf(TOOLINFO) If hToolTip = 0 hToolTip = CreateWindowEx_(#WS_EX_TRANSPARENT|#WS_EX_TOPMOST, "ToolTips_Class32","", #WS_POPUP | #TTS_NOPREFIX | #TTS_ALWAYSTIP, 0, 0, 0, 0, WindowID(0), 0, GetModuleHandle_(0), 0) EndIf GetClientRect_(hwnd, @winRect.RECT) #TTF_TRANSPARENT=256 ti\uFlags = #TTF_IDISHWND | #TTF_TRACK | #TTF_TRANSPARENT | #TTF_ABSOLUTE ti\hwnd = hwnd ti\hInst = GetModuleHandle_(0) ti\uId = 0 ti\lpszText = @ttText$ ti\rect\left = winRect\left ti\rect\top = winRect\top ti\rect\right = winRect\right ti\rect\bottom = winRect\bottom SendMessage_(hToolTip, #TTM_ADDTOOL, 0, ti) SendMessage_(hToolTip, #TTM_TRACKACTIVATE, #False, @ti) ProcedureReturn hToolTip EndProcedure If OpenWindow(0, 0, 0, 270, 100, "Click the left mouse button below", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) hTT = myWindowToolTip(WindowID(0), "Smart ToolTip") ;SetWindowPos_(hTT, #HWND_TOPMOST, 100, 100, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOACTIVATE) AddWindowTimer(0, 123, 100) t$="" t0.TOOLINFO t0\hInst=GetModuleHandle_(0) t0\hwnd=WindowID(0) Repeat Event = WaitWindowEvent() Select Event Case #PB_Event_Timer wah.l=FindWindow_(@"Winamp v1.x",0) If wah tl.l=SendMessage_(wah,#WM_GETTEXTLENGTH,0,0) If tl *m=AllocateMemory(tl*2+4) SendMessage_(wah,#WM_GETTEXT,tl+1,*m) s$=PeekS(*m) If t$<>s$ t$=s$ s$=Mid(s$,1,Len(s$)-9) ti\lpszText = @s$ ti.TOOLINFO\cbSize = SizeOf(TOOLINFO) SendMessage_(hTT, #TTM_UPDATETIPTEXT, 0, @ti) FreeMemory(*m) ;position wn.l=FindWindow_(@"Shell_TrayWnd",0) GetWindowRect_(GetDesktopWindow_(),re.RECT) GetWindowRect_(wn,re) my=re\top ;SendMessage_(hTT, #TTM_ADJUSTRECT, 1, @re) my=my-20;(re\bottom-re\top) ;Debug re\right-re\left t0\cbSize=SizeOf(TOOLINFO) SendMessage_(hTT, #TTM_GETTOOLINFO, 0, @t0) mx=0 SendMessage_(hTT, #TTM_TRACKACTIVATE, #True, @ti) SendMessage_(hTT, #TTM_TRACKPOSITION, 0, MakeLong(mx, my)) EndIf EndIf EndIf EndSelect Until Event = #PB_Event_CloseWindow EndIf End