Seite 1 von 1

Menü nebeneinander statt Bildlauf [X]

Verfasst: 25.01.2008 17:42
von RSBasic
Hallo Leute,
erstmal ein schönes Wochenende @all

Wenn man ein Menü und ganz viele Einträge hat, dann kann man das Menü nach unten/oben scrollen (siehe Screenshot).
Aber z.B. das Startmenü (Klassik (das ist auch ein Menü)) werden die Einträge nebeneinander angezeigt.

Siehe hier:
Bild

Ich möchte also, dass die Einträge nebeneinander (wenn ein Eintrag unten nicht mehr reinpasst sprich am Ende des Bildschirms) angezeigt wird.

Wie?

Verfasst: 25.01.2008 18:32
von Fluid Byte
Soweit Ich weiß ist das Startmenü ist auch 'ne Eigenkreation von MS. Ich muss mal guggn, vielleicht gibts auch ein paar entsprechende API Befehle die helfen könnten.

* PSDK durchforst *

Verfasst: 25.01.2008 22:52
von hjbremer
Vielleicht hilft dir das weiter.

Allerdings deinen Screenshot nachbilden, das fürchte ich macht richtig Arbeit !!!

Wenn du den BREAK nachträglich machen willst, mußt du die Anzahl der Einträge mit GetMenuItemCount_ ermitteln und mit GetMenuItemRect_ die Höhe der Einträge addieren und diese Summe mit der Position abgleichen und dann die Position des BREAK errechnen. Wäre mir zuviel Aufwand.

Code: Alles auswählen

Procedure MenuItemX(index, txt$, ID) 

 ;du kannst auch hiermit herumprobieren
 ;für einfache PopUps reicht das
 AppendMenu_(ID, #MF_MENUBREAK, index, txt$) 

EndProcedure 

Procedure MenuItemI(nr,txt$,posi,id) 

 mii.menuiteminfo
 
 mii\cbSize=SizeOf(MENUITEMINFO) 
 mii\fMask=#MIIM_TYPE
 mii\ftype=#MFT_MENUBREAK|#MFT_STRING	
 
 mii\dwTypeData=@txt$
 mii\cch=Len(txt$)
 mii\wid=nr
 
 SetMenuItemInfo_(id, posi, #True, mii) 

EndProcedure 

;Code aus der PB-Hilfe übernommen und verändert

If OpenWindow(0, 200, 200, 200, 120, "Popup-Menu Example")
    id = CreatePopupMenu(0)      ; hier beginnt das Erstellen des Popup-Menüs...
        ;posi=0                  ; Sie können alle Befehle zum Erstellen eines Menüs
        MenuItem(1, "Open")      ; verwenden, ganz wie bei einem normalen Menü...
        ;posi=1
        MenuItem(2, "Save")
        ;posi=2
        MenuItem(3, "Save as")
        ;posi=3
        OpenSubMenu("files")
          MenuItem(8, "PureBasic.exe")
          MenuItem(9, "Test.txt")
        CloseSubMenu()
        ;posi=4
        MenuItem(14, "xyz")          ;Item anlegen
        
        ;MenuItemI kann auch hier stehen
        
        ;posi=5
        MenuItem(4,"Edit")
        ;posi=6
        OpenSubMenu("Recent files")
          MenuItem(5, "PureBasic.exe")
          MenuItem(6, "Test.txt")
        CloseSubMenu()
        ;posi=7 usw.
        MenuItemx(23, "xxxx",id)
        MenuItem (24, "xxxx")
        MenuItem (25, "xxxx")
        MenuItem (26, "xxxx")

        ;Item überschreiben !!! Posi angeben !!! 
        ;kann direkt nach Menuitem stehen oder ans Ende oder sonstwo
        MenuItemI(14,"Quitt",4,id)   
      

    Repeat
      Select WaitWindowEvent()            ; überprüfe Window-Ereignisse
        Case #WM_RBUTTONDOWN              ; rechte Maustaste wurde gedrückt =>
          DisplayPopupMenu(0,WindowID(0))  ; stelle jetzt das Popup-Menü dar
        Case #PB_Event_Menu               ; ein Eintrag des Popup-Menüs wurde angeklickt
          Select EventMenu()              ; ermittle den angeklickten Menü-Eintrag...
            Case 1 : Debug "Menu: Open"
            Case 4 : Debug "Menu: Edit"
            Case 14: Quit = 1
            Case 25: Debug "25"
          EndSelect
        Case #PB_Event_CloseWindow
          Quit = 1
      EndSelect
    Until Quit = 1
  EndIf

Verfasst: 25.01.2008 23:59
von RSBasic
@hjbremer
Hey gute Arbeit, danke schön :)