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:
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
