wechselnde ToolTips in PanelGadget
wechselnde ToolTips in PanelGadget
Hallo!
Ich möchte wechselnde ToolTipps im gleichen PanelGadget je nach auszuwählenden Kartenreiter.
Ich habe nun auch schon verschiedenes versucht. u.a. durch Ermitteln der Mausposition über einem Reiter und setzen eines Textes zb.b. in der Menüleiste, etc.
Aber, das was ich will, nämlich den Text im Tooltip ändern, habe ich nicht geschafft.
Gibt es da eine einfache Möglichkeit?
Es soll so aussehen:
PanelGadget(#panel1, 5, 5, 599, 371)
AddGadgetItem(#panel1, 1, "Text1") : GadgetToolTip(#panel1/1,"Tipp1")
AddGadgetItem(#panel1, 2, "Text2") : GadgetToolTip(#panel1/2,"Tipp2")
Ich weis, dass es : GadgetToolTip(#panel1/2,"Tipp2") SO nicht gibt ... man kann ja nur EINEM Gadget (und das ist halt #panel1) den Tooltipp zuweisen - ich will aber den "Reitern" jeden seinen eigenen Tipp zuweisen....
Vielen Dank im Voraus.
lg
Oliver
Ich möchte wechselnde ToolTipps im gleichen PanelGadget je nach auszuwählenden Kartenreiter.
Ich habe nun auch schon verschiedenes versucht. u.a. durch Ermitteln der Mausposition über einem Reiter und setzen eines Textes zb.b. in der Menüleiste, etc.
Aber, das was ich will, nämlich den Text im Tooltip ändern, habe ich nicht geschafft.
Gibt es da eine einfache Möglichkeit?
Es soll so aussehen:
PanelGadget(#panel1, 5, 5, 599, 371)
AddGadgetItem(#panel1, 1, "Text1") : GadgetToolTip(#panel1/1,"Tipp1")
AddGadgetItem(#panel1, 2, "Text2") : GadgetToolTip(#panel1/2,"Tipp2")
Ich weis, dass es : GadgetToolTip(#panel1/2,"Tipp2") SO nicht gibt ... man kann ja nur EINEM Gadget (und das ist halt #panel1) den Tooltipp zuweisen - ich will aber den "Reitern" jeden seinen eigenen Tipp zuweisen....
Vielen Dank im Voraus.
lg
Oliver
Re: wechselnde ToolTips in PanelGadget
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$="Work? - "+Str(index+1)
;CP_THREAD_ACP
MultiByteToWideChar_(1,#MB_PRECOMPOSED,@ToolTipText$,Len(ToolTipText$),WideCharBuf_,#WideCharLen_)
*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
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow
EndIf
Re: wechselnde ToolTips in PanelGadget
Vielen Dank - das hilft
!
lg
Oliver

lg
Oliver
Re: wechselnde ToolTips in PanelGadget
Hallo!
Eine hab' ich noch ....
Ich lese die anzuzeigenden Texte für den ToolTip von einer TXT Datei ein und weise diese einer Array Variable zu
Soweit so gut, funktioniert alles bestens .... nur Umlaute werden nicht dargestellt!
Konkret wird anstelle des ä ein o mit Wellenlinie angezeigt ...
Umlaute werden auch nicht angezeigt, wenn ich den Text direkt zuweise - also: ToolTipText$="...ä..."
Ansonsten werden in allen Variablen, Textgadgets etc. sehr wohl Umlaute dargestellt!
lg
Oliver
Eine hab' ich noch ....
Ich lese die anzuzeigenden Texte für den ToolTip von einer TXT Datei ein und weise diese einer Array Variable zu
Soweit so gut, funktioniert alles bestens .... nur Umlaute werden nicht dargestellt!
Konkret wird anstelle des ä ein o mit Wellenlinie angezeigt ...
Umlaute werden auch nicht angezeigt, wenn ich den Text direkt zuweise - also: ToolTipText$="...ä..."
Ansonsten werden in allen Variablen, Textgadgets etc. sehr wohl Umlaute dargestellt!
lg
Oliver
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: wechselnde ToolTips in PanelGadget
Du musst das Textformat berücksichtigen:
Wenn das nicht hinhaut, weil z.B. der BOM (Format-Kennung) fehlt, dann gebe mal
die möglichen Konstanten für das Readstring Flag fest vor.
Code: Alles auswählen
Define FF = ReadFile(#PB_Any, "c:\Users\Thomas\Desktop\bla.txt")
Define Format
If FF
Format = ReadStringFormat(FF)
While Not Eof(FF)
Debug ReadString(FF, Format)
Wend
CloseFile(FF)
EndIf
die möglichen Konstanten für das Readstring Flag fest vor.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: wechselnde ToolTips in PanelGadget
Hallo!
Danke erstmal - hilft leider nicht.
Egal was ich angeben, entweder ???? oder eben o mit ~ anstelle von ä
Wobei der "falsche Umlaut" auch dann kommt, wenn ich den text DIREKT in die Variable ToolTipText$ schreibe, also nicht von der TXT-Datei einlese.
ALLE anderen Variablen *ausserhalb* dieser Routine werden ja korrekt befüllt und zeigen die richtigen Umlaute - nur eben nicht im ToolTip über die Procedur.
Danke erstmal - hilft leider nicht.
Egal was ich angeben, entweder ???? oder eben o mit ~ anstelle von ä
Wobei der "falsche Umlaut" auch dann kommt, wenn ich den text DIREKT in die Variable ToolTipText$ schreibe, also nicht von der TXT-Datei einlese.
ALLE anderen Variablen *ausserhalb* dieser Routine werden ja korrekt befüllt und zeigen die richtigen Umlaute - nur eben nicht im ToolTip über die Procedur.
Re: wechselnde ToolTips in PanelGadget
Nimm mal als ersten Parameter für MultiByteToWideChar_() 28591 statt 1,ozoffi hat geschrieben:Danke erstmal - hilft leider nicht.
Egal was ich angeben, entweder ???? oder eben o mit ~ anstelle von ä
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
nach der Anzeige des TT den Mauszeiger auf einen anderen Eintrag verschiebt,
wechselt der Text nicht.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: wechselnde ToolTips in PanelGadget
Ich denke die 0 wäre richtiger? Entspricht dann: #CP_ACP
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: wechselnde ToolTips in PanelGadget
Das habe ich auch erst gedacht, aber #CP_ACP und #CP_OEMCP usw. hängen von demts-soft hat geschrieben:Ich denke die 0 wäre richtiger? Entspricht dann: #CP_ACP
System ab, auf dem das Programm ausgeführt wird. Steht auch so in der Hilfe.
Wir haben vielleicht alle die (ungefähr) gleiche Codepage, aber auf einem japanischen oder chinesischem System
benutzt der User vielleicht ganz andere Codepages. Da können erweiterte ASCII-Chars ganz anders
übersetzt werden.
Wenn man nun feste Codepages wie 28591 für "ISO 8859-1 Latin 1; Western European (ISO)"
verwendet, dann wird auch genau diese Codepage übersetzt, und nicht eine zufällige, die der
User installiert hat und die sich ändern kann.
Das ganze Codepage-Zeug ist eh ein Graus, am besten macht man heutzutage alles gleich im Unicode-Modus.
Als Weltbürger habe ich Unicode natürlich als Default-Compileroption immer aktiviert.

cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: wechselnde ToolTips in PanelGadget
Meine Projekte setze ich seit Jahren alle im Unicode-Modus um, den anderen Modus nutzeDanilo hat geschrieben:am besten macht man heutzutage alles gleich im Unicode-Modus.
ich nur noch zum Testen von Fremdcode

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
