Seite 1 von 1

Menuitems mit Hilfetext in Statusbar

Verfasst: 05.03.2007 17:33
von Kai
Ich möchte bei Menuitems in der Statusbar einen Hilfetext anzeigen lassen.
Das Problem ist nur, das Menutitel teilweise die gleichen Rückgabewerte
haben wie menuitems, bzw denke ich, das ich diese nur falsch auswerte.

http://msdn2.microsoft.com/en-us/library/ms646352.aspx

Beispielcode:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 200, 150, "Menu", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 If CreateMenu(0, WindowID(0))
  MenuTitle("Title 1")
   MenuItem(0, "Item 1")
   MenuItem(1, "Item 2")
   MenuItem(2, "Item 3")
  MenuTitle("Title 2")
   MenuItem(3, "Item 1")
   MenuItem(4, "Item 2")
   MenuItem(5, "Item 3")
 EndIf
 If CreateGadgetList(WindowID(0))
  TextGadget(0, 10, 80, 180, 15, "...", #PB_Text_Center)
 EndIf
EndIf

Procedure WindowCallback(hWnd, Msg, wParam, lParam)
 Protected Result.l
 Result = #PB_ProcessPureBasicEvents
 
 If hWnd = WindowID(0)
  If Msg = #WM_MENUSELECT
   SetGadgetText(0, Str(wParam & $FF))
   Result = 0
  EndIf
 EndIf 
 
 ProcedureReturn Result
EndProcedure
SetWindowCallback(@WindowCallback())

While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend

Verfasst: 05.03.2007 17:55
von Kai
Hm also so funktioniert es sogar, aber ob das nu richtig ist weiß ich net. :lol:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 200, 150, "Menu", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 If CreateMenu(0, WindowID(0))
  MenuTitle("Title 1")
   MenuItem(0, "Item 0")
   MenuItem(1, "Item 1")
   MenuItem(2, "Item 2")
   OpenSubMenu("Submenu")
    MenuItem(3, "Item 3")
    MenuItem(4, "Item 4")
   CloseSubMenu()
  MenuTitle("Title 2")
   MenuItem(5, "Item 5")
   MenuItem(6, "Item 6")
   MenuItem(7, "Item 7")
 EndIf
 If CreateGadgetList(WindowID(0))
  TextGadget(0, 10, 85, 180, 15, "...", #PB_Text_Center)
 EndIf
EndIf

Procedure WindowCallback(hWnd, Msg, wParam, lParam)
 Protected Result.l
 Result = #PB_ProcessPureBasicEvents
 If hWnd = WindowID(0)
  If Msg = #WM_MENUSELECT
   If GetSubMenu_(lParam, wParam & $FF) = #False
    SetGadgetText(0, Str(wParam & $FF))
   Else
    SetGadgetText(0, "")
   EndIf
   Result = 0
  EndIf
 EndIf 
 ProcedureReturn Result
EndProcedure
SetWindowCallback(@WindowCallback())

While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend

Verfasst: 05.03.2007 18:04
von Thorsten1867
So habe ich das bei mir gelöst:

Code: Alles auswählen

#MenuItemFocus = 287

Procedure WindowCallback(WindowID,message,wParam,lParam)
  ReturnValue=#PB_ProcessPureBasicEvents
  Select message
    ;
    ; .....
    ;
    Case #MenuItemFocus ;{ Menü Tooltipps in Statusleiste
      wParamLo = wParam & $FFFF
      Select wParamLo
        Case #MenuBar_main_exit
          StatusBarText(#StatusBar_Main, 1, "  'Klassenverwaltung GS' beenden")        
        Case #MenuBar_main_help
          StatusBarText(#StatusBar_Main, 1, "  Hilfe für KvGS aufrufen")
        Case #MenuBar_main_reg
          StatusBarText(#StatusBar_Main, 1, "  KvGS registrieren")
        Case #MenuBar_main_about
          StatusBarText(#StatusBar_Main, 1, "  Info über KvGS-Version und Copyright")
        Default
          StatusBarText(#StatusBar_Main, 1, "")
      EndSelect ;}
  EndSelect
  ProcedureReturn ReturnValue
EndProcedure 
Es muss natürlich sichergestellt sein, dass es keine doppelten GadgetID und MenuID gibt.

Code: Alles auswählen

Enumeration 1
  ; .......  (GadgetID's)
  #MenuBar_main_exit
  #MenuBar_main_help
  #MenuBar_main_reg
  #MenuBar_main_about
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue

Verfasst: 05.03.2007 18:44
von dysti
so funktioniert es sofort:

Code: Alles auswählen

Enumeration 1
  ; .......  (GadgetID's)
  #MenuBar_main_exit
  #MenuBar_main_help
  #MenuBar_main_reg
  #MenuBar_main_about
  #StatusBar_Main
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue

If OpenWindow(0, 0, 0, 200, 150, "Menu", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 If CreateMenu(0, WindowID(0))
  MenuTitle("Title 1")
   MenuItem(0, "Item 0")
   MenuItem(1, "Item 1")
   MenuItem(2, "Item 2")
   OpenSubMenu("Submenu")
    MenuItem(3, "Item 3")
    MenuItem(4, "Item 4")
   CloseSubMenu()
  MenuTitle("Title 2")
   MenuItem(5, "Item 5")
   MenuItem(6, "Item 6")
   MenuItem(7, "Item 7")
 EndIf
 If CreateStatusBar(#StatusBar_Main, WindowID(0))
      AddStatusBarField(230)  
    EndIf
 

 If CreateGadgetList(WindowID(0))
  TextGadget(0, 10, 85, 180, 15, "...", #PB_Text_Center)
 EndIf
EndIf

#MenuItemFocus = 287

Procedure WindowCallback(WindowID,message,wParam,lParam)
  ReturnValue=#PB_ProcessPureBasicEvents
  Select message
    ;
    ; .....
    ;
    Case #MenuItemFocus ;{ Menü Tooltipps in Statusleiste
      wParamLo = wParam & $FFFF
      Select wParamLo
        Case #MenuBar_main_exit
          StatusBarText(#StatusBar_Main, 0, "  'Klassenverwaltung GS' beenden")       
        Case #MenuBar_main_help
          StatusBarText(#StatusBar_Main, 0, "  Hilfe für KvGS aufrufen")
        Case #MenuBar_main_reg
          StatusBarText(#StatusBar_Main, 0, "  KvGS registrieren")
        Case #MenuBar_main_about
          StatusBarText(#StatusBar_Main, 0, "  Info über KvGS-Version und Copyright")
        Default
          StatusBarText(#StatusBar_Main, 0, "")
      EndSelect ;}
  EndSelect
  ProcedureReturn ReturnValue
EndProcedure
SetWindowCallback(@WindowCallback())
StatusBarText(#StatusBar_Main, 0, "Area normal")
While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend

Verfasst: 05.03.2007 20:33
von Kai
So nachdem ich mir nu Stundenlang denn Kopf zerbrochen habe, wie ich das ganze auch vernünftig hinbeckomme ohne die MenuItem Handle falsch zu setzen hab ichs doch noch funktionstüchtig hinbeckommen.
Ich weiß zwar nicht ob das 100% richtig ist, aber es funktioniert zumindest bei mir perfekt.
Will mal allen die sowas auch machen wollen ein Gefallen tun hier is der Code.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 200, 150, "Menu", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 If CreateMenu(0, WindowID(0))
  MenuTitle("Titel 1")
   MenuItem(0, "Item 0")
   MenuItem(1, "Item 1")
   MenuItem(2, "Item 2")
   MenuItem(3, "Item 3")
   OpenSubMenu("SubMenu")
    MenuItem(4, "Item 4")
    MenuItem(5, "Item 5")
   CloseSubMenu()
  MenuTitle("Titel 2")
   MenuItem(6, "Item 6")
   MenuItem(7, "Item 7")
   MenuItem(8, "Item 8")
 EndIf
 If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(150)
 EndIf
EndIf

Procedure WindowCallback(hWnd, Msg, wParam, lParam)
 Protected Result.l
 Result = #PB_ProcessPureBasicEvents
 If hWnd = WindowID(0)
  If Msg = #WM_MENUSELECT
   If GetSubMenu_(lParam, wParam & $FFFF) = #False And lParam <> 0
    Select wParam & $FFFF
     Case 0: StatusBarText(0, 0, "MenuItem 0")
     Case 1: StatusBarText(0, 0, "MenuItem 1")
     Case 2: StatusBarText(0, 0, "MenuItem 2")
     Case 3: StatusBarText(0, 0, "MenuItem 3")
     Case 4: StatusBarText(0, 0, "MenuItem 4")
     Case 5: StatusBarText(0, 0, "MenuItem 5")
     Case 6: StatusBarText(0, 0, "MenuItem 6")
     Case 7: StatusBarText(0, 0, "MenuItem 7")
     Case 8: StatusBarText(0, 0, "MenuItem 8")
    EndSelect
   Else
    StatusBarText(0, 0, "")
   EndIf
  EndIf
 EndIf
 ProcedureReturn Result
EndProcedure
SetWindowCallback(@WindowCallback())

While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend