Menuitems mit Hilfetext in Statusbar

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Menuitems mit Hilfetext in Statusbar

Beitrag 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
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag 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
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag 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
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag 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
Antworten