Menü nebeneinander statt Bildlauf [X]

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Menü nebeneinander statt Bildlauf [X]

Beitrag 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?
Zuletzt geändert von RSBasic am 26.01.2008 00:00, insgesamt 1-mal geändert.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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 *
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@hjbremer
Hey gute Arbeit, danke schön :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten