Probleme bei ImageMenu mit Alt+Zeichen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Probleme bei ImageMenu mit Alt+Zeichen

Beitrag von Danilo »

STARGÅTE hat geschrieben:Ist das nun ein Fehler in Windows oder in PureBasic? Bug?
Das ist ein Fehler von PureBasic. Für Ownerdraw Menus muss PB intern auf
die Nachricht #WM_MENUCHAR reagieren und selbst einen entsprechenden
Eintrag auswählen.
Alles dokumentiert in MSDN. Ich denke die PB-Entwickler haben es einfach vergessen.

Hier ein Beispiel-Code wie es geht:

Code: Alles auswählen

Enumeration
   #Window
   #Menu
   #MenuItem_New
   #MenuItem_Open
   #MenuItem_Save
   #MenuItem_Sub1
   #MenuItem_Sub2
EndEnumeration

Macro HIWORD(a)         : ( (a >> 16) & $FFFF )       : EndMacro
Macro LOWORD(a)         : (  a        & $FFFF )       : EndMacro
Macro MAKELRESULT(a,b)  : ( (b << 16) | (a & $FFFF) ) : EndMacro

;Structure MENUINFO
;  cbSize.l
;  fMask.l
;  dwStyle.l
;  cyMax.l
;  hbrBack.i
;  dwContextHelpID.l
;  dwMenuData.i
;EndStructure

#MNC_EXECUTE = 2
#MNC_SELECT  = 3

Procedure callback(WindowID, Message, wParam, lParam)
    If Message = #WM_MENUCHAR And HIWORD(wParam) = #MF_POPUP
        search$ = "&"+LCase(Chr(LOWORD(wParam)))
        count   = GetMenuItemCount_(lParam)
        mii.MENUITEMINFO\cbSize = SizeOf(MENUITEMINFO)
        For i = 0 To count-1
            subMenu = GetSubMenu_(lParam,i)
            If subMenu
                item$ = Space(100)
                GetMenuString_(lParam,GetMenuItemID_(lParam,i),@item$,Len(item$),#MF_BYCOMMAND)
                Debug item$ ; empty -> HOW TO GET A OpenSubMenu() String for FindString() using search$ ???
                ProcedureReturn MAKELRESULT(i,#MNC_EXECUTE)
            Else
                item$ = GetMenuItemText(#Menu, GetMenuItemID_(lParam,i))
                If FindString(LCase(item$),search$,0)
                    ProcedureReturn MAKELRESULT(i,#MNC_EXECUTE)
                EndIf
            EndIf
        Next i
    EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure



OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
   CreateImageMenu(#Menu, WindowID(#Window));,#PB_Menu_ModernLook)
   ;CreateMenu(#Menu, WindowID(#Window))
      MenuTitle("&Datei")
         MenuItem(#MenuItem_New, "&Neu")
         MenuItem(#MenuItem_Open, "&Öffnen")
         MenuItem(#MenuItem_Save, "&Speichern")
         MenuBar()
         OpenSubMenu("S&ub")       ; begin sub-menu
            MenuItem( #MenuItem_Sub1, "&abc")
            MenuItem( #MenuItem_Sub2, "&def")
         CloseSubMenu()            

SetWindowCallback(@callback())

Repeat
   
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         End
      Case #PB_Event_Menu
         Debug EventMenu()
   EndSelect
   
ForEver
Allerdings komme ich einfach nicht ordentlich an den Text der MenuItems -
weiß nicht wo PB das intern speichert. GetMenuString_() und GetMenuItemInfo_()
geben mir keinen Text zurück.

Für die normalen Items habe ich hier den Text mit GetMenuItemText(#Menu, ...) geholt.
Achtung, #Menu ist hier fest eingebaut!

Für SubItems bekomme ich leider gar keinen Text und kann somit auch nicht
"&" + gedrückte Taste mit dem Text vergleichen.
Wer diese Methode selbst bei sich einbauen will, kann keine SubMenus verwenden.

Das PB-Team sollte das noch einbauen. Kann man als Bug oder missing Feature
melden, wobei das eigentlich -meiner Meinung nach- eher ein Fehler ist und schon
funktionieren sollte und könnte.
ts-soft hat geschrieben:Im moment sieht es so aus, das MS Menüs und Tastatur-Unterstützung vernachlässigt, da der durchschnittliche
Windows-User damit wohl überfordert ist :mrgreen: . Deshalb Ribbons und immer mehr der Übergang zum
Touchscreen.
Das Gegenteil ist der Fall. MS kümmert sich weiter um die Tastatur-Unterstützung,
und auch Ribbons kann man mit der Tastatur schnell steuern - auch mit ALT wie bisher Menus.
Siehe Beispielsweise dort: use-the-keyboard-to-work-with-ribbon-programs

Für mehr Infos mal selbst suchen nach "Ribbon Shortcuts" oder "Ribbon + keyboard"
und die neue Menu-Toolbar-Kombination bedienen lernen. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
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: Probleme bei ImageMenu mit Alt+Zeichen

Beitrag von ts-soft »

Danilo hat geschrieben:und die neue Menu-Toolbar-Kombination bedienen lernen. ;)
Nein, möchte ich vermeiden, Ribbons sind oftmals nur schwer zur Erkennen, Menütexte kann ich leichter lesen.
Naja, wenn meine Augen besser wären, aber so behindern mich Ribbons nur, da schreib ich mir dann lieber
die Tastaturkürzel auf nen Zettel :mrgreen:
Abgesehen von den in Window 7 enthaltenen Programmen, die ich eh nicht nutze komme ich zur Zeit noch
recht selten mit diesen Ribbons in kontakt und das ist gut so.
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.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Probleme bei ImageMenu mit Alt+Zeichen

Beitrag von c4s »

@ts-soft
  • Es gibt noch wesentlich mehr TAB-Funktionen und allgemeine Standard-Tastenkürzel, die zwar in der Windows-Welt wohl bekannt sind, aber von PureBasic nicht unterstützt werden.
  • Schonmal probiert mit TAB zwischen den OptionGadgets zu wechseln?
  • Mal ist die Markierung von aktivierten Gadgets da, mal nicht. Scheinbar regelt PureBasic das nach Lust und Laune.
  • usw.
Es gibt noch mehr Ungereimtheiten, die mir aber momentan nicht einfallen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
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: Probleme bei ImageMenu mit Alt+Zeichen

Beitrag von ts-soft »

Das mit dem Nichtsehen des Selektierten ist ein Windows Feature :mrgreen:
Kann man umschalten:

Code: Alles auswählen

SendMessage_(WindowID(ID), #WM_CHANGEUISTATE, 2 | (1 << 16), 0)
Damit OptionGadgets korrekt funktionieren, müssten Sie auf Fenstern mit DialogStil erstellt werden, die PB
aber gar nicht erstellt, was ich persönlich als gut empfinde, weil dieses dämliche unterschiedliche Verhalten
in den Messages, abhängig vom Stil kann einem zur Weißglut treiben :mrgreen:
Workaround hier: http://www.purebasic.fr/german/viewtopi ... 53#p286353
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.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Probleme bei ImageMenu mit Alt+Zeichen

Beitrag von Danilo »

cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten