Da ich wirklich keine Lösung fand, erstelle ich nun mein eigenes ToolTip-Fenster. So geht es aus:
Code: Alles auswählen
EnableExplicit
Global ListIconProc
Global ToolTipWindow
Global LastListIconItemX
Global LastListIconItemY
Procedure CreateToolTipWindow(Window, Gadget)
Protected TOOLINFO.TOOLINFO
ToolTipWindow = CreateWindowEx_(0, #TOOLTIPS_CLASS, 0, #WS_POPUP | #TTS_ALWAYSTIP, 0, 0, 0, 0, WindowID(Window), 0, GetModuleHandle_(0), 0)
TOOLINFO.TOOLINFO\cbSize = SizeOf(TOOLINFO)
TOOLINFO\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
TOOLINFO\hwnd = WindowID(Window)
TOOLINFO\uId = GadgetID(Gadget)
TOOLINFO\lpszText = @""
SendMessage_(ToolTipWindow, #TTM_ADDTOOL, 0, TOOLINFO)
SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
SendMessage_(ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, 1024)
SendMessage_(ToolTipWindow, #TTM_SETDELAYTIME, #TTDT_INITIAL, 0)
SendMessage_(ToolTipWindow, #TTM_SETDELAYTIME, #TTDT_AUTOPOP, 30000)
SendMessage_(ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, 500)
EndProcedure
Procedure ChangeToolTipWindow(Window, Gadget, Text.s)
Protected TOOLINFO.TOOLINFO
TOOLINFO.TOOLINFO\cbSize = SizeOf(TOOLINFO)
TOOLINFO\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
TOOLINFO\hWnd = WindowID(Window)
TOOLINFO\uId = GadgetID(Gadget)
TOOLINFO\lpszText = @Text
SendMessage_(ToolTipWindow, #TTM_SETTOOLINFO, 0, TOOLINFO)
EndProcedure
Procedure ListIconProc(hWnd, uMsg, wParam, lParam)
Protected LVHITTESTINFO.LVHITTESTINFO
Select uMsg
Case #WM_MOUSELEAVE
SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
LastListIconItemX = -1
Case #WM_MOUSEMOVE
LVHITTESTINFO\pt\x = lparam & $FFFF
LVHITTESTINFO\pt\y = lparam >> 16
SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, LVHITTESTINFO)
If LVHITTESTINFO\iItem = -1
SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
LastListIconItemX = -1
Else
If LastListIconItemX <> LVHITTESTINFO\iItem Or LastListIconItemY <> LVHITTESTINFO\iSubItem
SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 1, 0)
SendMessage_(ToolTipWindow, #TTM_POPUP, 0, 0)
ChangeToolTipWindow(0, GetProp_(hWnd, "PB_ID"), GetGadgetItemText(GetProp_(hWnd, "PB_ID"), LVHITTESTINFO\iItem, LVHITTESTINFO\iSubItem))
LastListIconItemX = LVHITTESTINFO\iItem
LastListIconItemY = LVHITTESTINFO\iSubItem
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(ListIconProc, hWnd, uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 250, 200, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "Spalte", 200, 0)
AddGadgetItem(1, -1, "Überall dieselbe alte Leier. " + Chr(13) + "Das Layout ist fertig, der Text lässt auf sich warten.", 0, 0)
AddGadgetItem(1, -1, "Das Layout ist fertig, der Text lässt auf sich warten. " + Chr(13) + "Überall dieselbe alte Leier.", 0, 0)
CreateToolTipWindow(0, 1)
ListIconProc = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @ListIconProc())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf