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