ozoffi hat geschrieben:Danke erstmal - hilft leider nicht.
Egal was ich angeben, entweder ???? oder eben o mit ~ anstelle von ä
Nimm mal als ersten Parameter für MultiByteToWideChar_() 28591 statt 1,
das ist dann Codepage "ISO 8859-1 Latin 1; Western European (ISO)".
Dann gehen die Umlaute, nur € geht noch nicht.
Für andere Werte siehe die MSDN-Hilfe zu der Funktion.
Und im Unicode-Modus brauchst Du MultiByteToWideChar_() nicht, also am
besten ein CompilerIf rein:
Code: Alles auswählen
Global OldCallback,CheckToolTip
Global WideCharBuf_
#WideCharLen_=#MAX_PATH*4
WideCharBuf_=AllocateMemory(#WideCharLen_)
Structure TCHITTESTINFO
pt.POINT
Flags.l
EndStructure
#TTN_GETDISPINFOW = -530
; BalloonTip Constants
#ToolTip_NoBalloon=-1
#TOOLTIP_NO_ICON = 0
#TOOLTIP_INFO_ICON = 1
#TOOLTIP_WARNING_ICON = 2
#TOOLTIP_ERROR_ICON = 3
Procedure OwnToolTip(WindowId, gadget, text$ , Title$, Icon)
If Icon=#ToolTip_NoBalloon
Flag=#WS_POPUP | #TTS_NOPREFIX
Else
Flag=#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON
EndIf
ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",Flag,0,0,0,0,WindowID(WindowId),0,GetModuleHandle_(0),0)
SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
Balloon\hwnd=GadgetID(gadget)
Balloon\uId=GadgetID(gadget)
If text$
Balloon\lpszText=@text$
Else
Balloon\lpszText=-1
EndIf
SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
If Title$ > "" And Icon>-1
SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
EndIf
ProcedureReturn ToolTip
EndProcedure
Procedure MyWindowCallback(WindowId, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Message=#WM_NOTIFY
*notify.NMHDR=lParam
If (*notify\code=#TTN_GETDISPINFOW Or *notify\code=#TTN_GETDISPINFO) And wParam=GadgetID(1)
; ToolTip.TOOLINFO
; ToolTip\cbSize=SizeOf(TOOLINFO)
; ToolTip\hwnd=wParam
; ToolTip\uId=wParam
;Which Tab?
GetCursorPos_(Test.TCHITTESTINFO\pt)
MapWindowPoints_(0,GadgetID(1),Test\pt,1)
index=SendMessage_(GadgetID(1),#TCM_HITTEST,0,Test)
ToolTipText$="Wörk? - äöüß - "+Str(index+1)
;CP_THREAD_ACP
If #PB_Compiler_Unicode=0
MultiByteToWideChar_(28591,#MB_PRECOMPOSED,@ToolTipText$,Len(ToolTipText$),WideCharBuf_,#WideCharLen_)
Else
PokeS(WideCharBuf_,ToolTipText$)
EndIf
*text.NMTTDISPINFO=lParam
*text\lpszText=WideCharBuf_
*text\hinst=0
*text\szText[0]=0
Result=#False
; ToolTip\lpszText=@a$
; SendMessage_(*notify\hwndfrom,#TTM_UPDATETIPTEXT,0,ToolTip)
; SendMessage_(*notify\hwndfrom,#TTM_ACTIVATE ,0,0)
; SendMessage_(*notify\hwndfrom,#TTM_update ,0,0)
; SendMessage_(*notify\hwndfrom,#TTM_ACTIVATE ,#True,0)
;Result=#False
EndIf
EndIf
If Result=#PB_ProcessPureBasicEvents And OldCallback
ProcedureReturn CallWindowProc_(OldCallback,WindowId,Message,wParam,lParam)
Else
ProcedureReturn Result
EndIf
EndProcedure
If OpenWindow(1,0,0,200,200,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
PanelGadget(1,0,0,200,200)
AddGadgetItem(1,-1,"Test1")
AddGadgetItem(1,-1,"Test2")
AddGadgetItem(1,-1,"Test3")
AddGadgetItem(1,-1,"Test4")
OldCallback=SetWindowLong_(GadgetID(1),#GWL_WNDPROC,@MyWindowCallback())
CheckToolTip=OwnToolTip(1,1,"","",-1);Text immer nachfragen
;OwnToolTip(1,1,"...äöü...ÄÖÜ...ß...","title",1)
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow
EndIf
Der Code von RSBasic zeigt so zwar 4 verschiedene Tooltips an, aber wenn man
nach der Anzeige des TT den Mauszeiger auf einen anderen Eintrag verschiebt,
wechselt der Text nicht.