Seite 1 von 1
Menuitem und tooltip
Verfasst: 21.11.2006 14:16
von jpd
Hallo,
Ich möchte bei einem MouseOver über das Menuitem ein Tooltip mit zusätzlichen info's anzeigen.
wie geht das ?
Danke!
jpd
Verfasst: 21.11.2006 14:18
von Tafkadasom2k5
Im VisualDesigner kann man, wenn man ein Gadget einfügt, auch einen Tooltip als 'Sprechblase' einbauen.
Sofern ich mich richtig erinnere, ist das in einer kleinen Opion irgendwo in einer Registerkarte versteckt...
Gr33tz
Tafkadasom2k5
Verfasst: 21.11.2006 14:54
von jpd
Hallo Tafkadasom2k5,
habe das über visual designer versucht,
leider sind die option extra bei menu grau hinterlegt...
also es ist so nicht möglich beim menu oder menuitem ein tooltip hizuzufügen.
Ich gehe davon aus das solch eine möglichkeit nur über api zu bewältigen ist, aber wie??
Danke für dein tip.
jpd
Verfasst: 22.11.2006 18:36
von jpd
Hallo,
habe mir hier und da ein paar sachen angeguckt!
ich denke das müsste der richtige weg sein,
aber da stimmt warcheinlich nicht die übergabe des handle
normalerweise wird gadget(nr) bei der procedure tootip weitergegeben
ich übergebe menuid(nr).
wer kann mir weiterhelfen?
Danke
jpd
Code: Alles auswählen
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2658&highlight=
; Author: Andreas (improved code of cnesm)
; Date: 26. October 2003
#menu_1=1
#button_1=2
Declare ToolTip(Handle,Text.s)
Procedure wcb(wnd, msg, wParam, lParam)
If msg = #WM_MENUSELECT
lw=wParam & $FFFF ;loword: menupunkt-nummer
Debug "menupunkt " + Str(lw) + " mouseselect"
menunr=lw
hw=wParam >> 16 & $8000 ;highword: bit für flag "mouseselect" filtern
If hw=#MF_MOUSESELECT
GetCursorPos_(pos.point)
Debug pos\x
Debug pos\y
menuText$ = Space(255)
GetMenuString_(#menu_1, lw, @menuText$, Len(menuText$), #MF_BYPOSITION)
Debug menuText$
ToolTip(MenuID(#menu_1),"Hallo!!!")
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure ToolTip(Handle,Text.s)
ObjektBeschreibung=CreateWindowEx_(#WS_EX_TOPMOST,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX,0,0,0,0,WindowID(0),0,GetModuleHandle_(0),0)
Debug "ObjektBeschreibung: "+Str(ObjektBeschreibung)
SendMessage_(ObjektBeschreibung,#TTM_SETDELAYTIME,#TTDT_INITIAL,100)
SendMessage_(ObjektBeschreibung,$413,RGB(255,255,255),0)
SendMessage_(ObjektBeschreibung,$414,RGB(0,0,0),0)
SendMessage_(ObjektBeschreibung,#WM_SETFONT,LoadFont(0,"Arial",54),#True)
Tool.TOOLINFO
Tool\cbSize=SizeOf(TOOLINFO)
Tool\uFlags=#TTF_SUBCLASS|#TTF_IDISHWND
Tool\hwnd=WindowID(0)
Tool\uID=Handle
Tool\hInst=GetModuleHandle_(0)
Tool\lpszText=@Text
SendMessage_(ObjektBeschreibung,#TTM_ADDTOOL,0,@Tool)
EndProcedure
If OpenWindow(0,0,0,222,200,"MenuTooltip",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
test=CreateMenu(#menu_1, WindowID(0)) ; hier beginnt das Erstellen des Popup-Menüs...
Debug test
Debug MenuID(#menu_1)
MenuTitle("Programme")
MenuItem(1,"test1")
MenuItem(2,"test2")
EndIf
SetWindowCallback(@wcb())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Verfasst: 22.11.2006 21:55
von PBZecke
Ich glaube, ToolTips gehen nicht in Menüs.
Verfasst: 23.11.2006 11:40
von jpd
Hallo PBZecke,
Danke für den Hinweis,
hier ein link zu eine nette lösung für tooltip in menu geschrieben in VB:
eine Klasse zum Anzeigen von Tooltips im Standard VB-Menu, mehrzeilig, beliebig farbig, optional StandardIcons etc, gelöst über Subclassing.
http://www.activevb.de/cgi-bin/upload/s ... xt=tooltip
ich kenne mich aber mit "classen" überhaupt nicht aus.
----
jpd
Verfasst: 23.11.2006 13:17
von PBZecke
Ich habe mir das mal angeschaut. Habe zwar kaum Erfahrung mit VB, aber in
diesem Beispiel wird der Hilfetext auch nur in der Statusleiste angzeigt. Also
ein Tooltip in einem aufpoppendem Fenster gibt es auch da nicht.
Und das Anzeigen der Hints in einer Statusleiste kann auch der von Dir oben
gepostete code. Braucht nur etwas geändert werden. Ist im Übrigen auch die
gängige Art Hints von Menüs anzuzeigen.
Verfasst: 23.11.2006 13:43
von jpd
Hallo PBZecke,
Beispiel Nr 18 ist schon so wie es ich mir vorgestellt hatte...
das mit den darstellen der "info's" in eine statusleiste ist auch nett!
aber du weisst wie dass ist, die loesung ist eigentlich nict was ich mir
eigentlich vorgestellt hatte!
werde weitersuchen...
Danke
jpd
Verfasst: 23.11.2006 19:38
von jpd
Hi,
vielleicht könnte das so funktionieren!
....
jpd
Code: Alles auswählen
Enumeration
#menu_1
#button_1
#About_Window
EndEnumeration
Global pos.point ,thr_win.l
Procedure tooltip_win(x.l)
;Debug "hallo"
Debug "x: "+Str(pos\x)
Debug "y: "+Str(pos\y)
If OpenWindow(#About_Window,0,0,0,0,"Tooltip", #PB_Window_BorderLess|#PB_Window_ScreenCentered | #PB_Window_WindowCentered ) And CreateGadgetList(WindowID(#About_Window))
ResizeWindow(#About_Window,pos\x,pos\y,80,20)
SetWindowColor(#About_Window,#Red)
SetWindowPos_(WindowID(#About_Window),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
EndIf
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndProcedure
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2658&highlight=
; Author: Andreas (improved code of cnesm)
; Date: 26. October 2003
Declare ToolTip(Handle,Text.s)
Procedure wcb(wnd, msg, wParam, lParam)
If msg = #WM_MENUSELECT
GetCursorPos_(pos.point)
Debug pos\x
Debug pos\y
lw=wParam & $FFFF ;loword: menupunkt-nummer
Debug "menupunkt " + Str(lw) + " mouseselect"
menunr=lw
;Debug lw
If lw > 0
; Debug lw
If IsThread(thr_win)=1
Debug "kill"
KillThread(thr_win)
EndIf
thr_win=CreateThread(@tooltip_win(),pos\x+90 )
EndIf
hw=wParam >> 16 & $8000 ;highword: bit für flag "mouseselect" filtern
If hw=#MF_MOUSESELECT
GetCursorPos_(pos.point)
Debug pos\x
Debug pos\y
menuText$ = Space(255)
GetMenuString_(#menu_1, lw, @menuText$, Len(menuText$), #MF_BYPOSITION)
Debug menuText$
;tooltip_win(pos\x+90 ,pos\y )
;ToolTip(MenuID(#menu_1),"Hallo!!!")
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure ToolTip(Handle,Text.s)
ObjektBeschreibung=CreateWindowEx_(#WS_EX_TOPMOST,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX,0,0,0,0,WindowID(0),0,GetModuleHandle_(0),0)
Debug "ObjektBeschreibung: "+Str(ObjektBeschreibung)
SendMessage_(ObjektBeschreibung,#TTM_SETDELAYTIME,#TTDT_INITIAL,100)
SendMessage_(ObjektBeschreibung,$413,RGB(255,255,255),0)
SendMessage_(ObjektBeschreibung,$414,RGB(0,0,0),0)
SendMessage_(ObjektBeschreibung,#WM_SETFONT,LoadFont(0,"Arial",54),#True)
Tool.TOOLINFO
Tool\cbSize=SizeOf(TOOLINFO)
Tool\uFlags=#TTF_SUBCLASS|#TTF_IDISHWND
Tool\hwnd=WindowID(0)
Tool\uID=Handle
Tool\hInst=GetModuleHandle_(0)
Tool\lpszText=@Text
SendMessage_(ObjektBeschreibung,#TTM_ADDTOOL,0,@Tool)
EndProcedure
If OpenWindow(0,0,0,222,200,"MenuTooltip",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
test=CreateMenu(#menu_1, WindowID(0)) ; hier beginnt das Erstellen des Popup-Menüs...
Debug test
Debug MenuID(#menu_1)
MenuTitle("Programme")
MenuItem(1,"test1")
MenuItem(2,"test2")
EndIf
SetWindowCallback(@wcb())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow