Seite 1 von 1

Normale Menübar nicht oben, sondern unten, oder wo anders...

Verfasst: 14.12.2018 21:30
von ccode_new
Normale Menübar nicht oben, sondern unten, oder wo anders platzieren.

Hallo Leute ich brauche mal einen Tipp.

Wie könnte ich unter Windows die normale Menübar z.B. vertikal oder am Fenster unten (wie z.B. die Statusbar) platzieren ?

Hat hier jemand einen Windows-Api-Tipp ?

Unter Linux bekomme ich das mit Gtk+ schon hin.
Aber für Windows bräuchte ich eine Lösung.

(Ich könnte mir natürlich auch selber eine eigene Menüleiste (über z.B. das Canvas-Gadget) erstellen, aber das ist hier nicht die Frage.)

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 19:03
von Andesdaf

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 20:09
von ccode_new
Vielen vielen Dank!

Für die (nicht vorhandene) Statistik:
Vom 2. Moderator (mal nicht RSBasic) hatte ich hier auch noch keine Antwort. :mrgreen:

Die Lösung ist irgendwie sehr interessant.
So eine MDI-Fenster-Lösung mit Trick17-Versteckdich-Lösung wäre für Linux auch interessant.

Aber vertikal geht es so nicht, oder ?

Kann man Windows-Fenster um 90 Grad drehen ?

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 21:12
von GPI
Nicht das ich wüsste. Nur mittels Buttons und Popup-Menüs sowas simulieren. Aber dann gehen die meisten Tastaturkürzel nicht

ansonsten würd ich mir sowas immer gut überlegen. Ein Standard-Interface hat nunmal den Vorteil, das man sich sofort auskennt und sich weniger einarbeiten muss. Das war ja der große Fehler von Win8 Basics über den Haufen zu werfen.

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 21:46
von mk-soft
Ich würde lieber an den Standards von dem Menüs halten...

Sonst wie es manche Programme (APP-Style) mit eigenen Controls (CanvasGadget) realisieren und mit der Standard Taste (Alt-Taste) das Standard-Menu ein- und ausblenden.

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 21:53
von ccode_new
Ihr habt ja alle so recht!

Das mit dem Verschieben des Menüs tue ich (in Anbetracht der bestehenden Möglichkeiten) als Blödsinn ab.

Man kann sich auch schön andersweitig Menüs designen.

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 17.12.2018 22:28
von mk-soft
Hier mal für Windows wie man das Menu mit der Alt-Taste ein- und ausblenden kann

Kleines Update damit es auch SizeWindow funktioniert

Code: Alles auswählen

... Update weiter unten

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 19.12.2018 15:28
von Sebastian
Sobald ich das ListIconGadget in der Größe verändere, passiert gar nichts mehr, wenn ich die Alt-Taste drücke, mk-soft. Kann man dagegen etwas unternehmen?
[edit] Es reicht auch, wenn das Gadget angeklickt wird, dann lässt sich das Menü auch nicht mehr aufrufen. Da hakt es irgendwie bei dem Snipet. [/edit]

Re: Normale Menübar nicht oben, sondern unten, oder wo ander

Verfasst: 19.12.2018 20:57
von mk-soft
Mist!

Wenn das Gadget den Focus hat, kommen die Message WM_SYSKEY... nicht mehr am Hauptfenster an.

Es geht nur sicher das Event WW_SYSCOMMAND zum einblenden des Menu.

P.S. Habe die Lösung gefunden :allright:

Code: Alles auswählen


Global MenuHeight

Procedure ShowMenu(Menu, State)
  If State
    HideMenu(Menu, 0)
    MenuHeight = MenuHeight()
  Else
    HideMenu(Menu, 1)
    MenuHeight = 0
  EndIf  
  PostEvent(#PB_Event_SizeWindow)
EndProcedure

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  
  Select uMsg
    Case #WM_SYSCOMMAND
      If wParam = #SC_KEYMENU
        Debug "Enter Menu"
        ShowMenu(0, 1)
      EndIf  
    Case #WM_EXITMENULOOP
      Debug "Exit Menu"
      ShowMenu(0, 0)
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

Procedure OnSizeWindow()
  ResizeGadget(0, 0, 0, WindowWidth(0), WindowHeight(0) - MenuHeight)
EndProcedure

If OpenWindow(0, 100, 150, 195, 260, "PureBasic - Menu", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  
  If CreateMenu(0, WindowID(0))
    MenuTitle("&File")
    MenuItem( 1, "&Load...")
    MenuItem( 2, "Save")
    MenuItem( 3, "Save As...")
    MenuBar()
    OpenSubMenu("Recents")
    MenuItem( 5, "Pure.png")
    MenuItem( 6, "Basic.jpg")
    OpenSubMenu("Even more !")
    MenuItem( 12, "Yeah")
    CloseSubMenu()
    MenuItem( 13, "Rocks.tga")
    CloseSubMenu()
    MenuBar()
    MenuItem( 7, "&Quit")
    
    MenuTitle("&Edition")
    MenuItem( 8, "Cut")
    MenuItem( 9, "Copy")
    MenuItem(10, "Paste")
    
    MenuTitle("?")
    MenuItem(11, "About")
    
  EndIf
  
  HideMenu(0, 1)
  MenuHeight = 0
  
  ListIconGadget(0, 0, 0, WindowWidth(0), WindowHeight(0) - MenuHeight, "Column", 200)
  
  SetWindowCallback(@WinCallback())
  
  BindEvent(#PB_Event_SizeWindow, @OnSizeWindow())

  Repeat
    
    Select WaitWindowEvent()
        
      Case #PB_Event_Menu
        
        Select EventMenu()  ; To see which menu has been selected
          Case 7
            Quit = 1
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit = 1
        
    EndSelect
    
  Until Quit = 1
  
EndIf

End