Ich möchte zur Laufzeit gern in einem Submenü neue MenüItems einfügen.
Aber wie gebe ich an, an welcher Position ich das neue Item anlegen möchte? Ic befürte mit
Code: Alles auswählen
MenuItem
Code: Alles auswählen
MenuItem
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Code: Alles auswählen
Structure m
iGadgetID.l
EndStructure
Code: Alles auswählen
NewList DynamicMenue.m()
Code: Alles auswählen
Procedure AddDynamicMenuItem(GadgetID.l, Name.s)
AddElement(DynamicMenue())
DynamicMenue()\iGadgetID = GadgetID
; Hier jetzt dann das hinzufürgen des menü Punktes
; Meine Idee kommt jetzt gleich nach den Kommentaren ist aber untested
MenuItem(GadgetID, Name)
; Geht aber bestimmt auch professioneller und funktioneller per WINAPI
EndProcedure
Procedure DeleteDynamicMenuItem(GadgetID.l)
Foreach DynamicMenue()
If GadgetID = DynamicMenue()\iGadgetID
DeleteElement()
Endif
Next
; Durch WinAPI das MenüItem weg machen.. oder einfach nur disablen.. oder alles neu zeichnen..
EndProcedure
Code: Alles auswählen
Enumeration
#Menu
EndEnumeration
Enumeration
#MenuItem_1
#MenuItem_2
; [...]
EndEnumeration
Structure m
iGadgetID.l
sGadgetText.s
EndStructure
NewList DynamicMenue.m()
Declare AddDynamicMenuItem(GadgetID.l, Name.s)
Declare DeleteDynamicMenuItem(GadgetID.l)
Declare UpdateMenue()
Declare CreateMenue()
Declare GetRandomMenuID()
Procedure AddDynamicMenuItem(GadgetID.l, Name.s)
AddElement(DynamicMenue())
DynamicMenue()\iGadgetID = GadgetID
DynamicMenue()\sGadgetText = Name
; Hier jetzt dann das hinzufürgen des menü Punktes
; Meine Idee kommt jetzt gleich nach den Kommentaren ist aber untested
;MenuItem(GadgetID, Name)
; Geht aber bestimmt auch professioneller und funktioneller per WINAPI
UpdateMenue()
EndProcedure
Procedure DeleteDynamicMenuItem(GadgetID.l)
ForEach DynamicMenue()
If GadgetID = DynamicMenue()\iGadgetID
DeleteElement(DynamicMenue())
EndIf
Next
; Durch WinAPI das MenüItem weg machen.. oder einfach nur disablen.. oder alles neu zeichnen..
EndProcedure
Procedure UpdateMenue()
FreeMenu(#Menu)
CreateMenue()
MenuTitle("RecentFiles")
ForEach DynamicMenue()
MenuItem(DynamicMenue()\iGadgetID, DynamicMenue()\sGadgetText)
Next
EndProcedure
Procedure CreateMenue()
If CreateMenu(#Menu, WindowID(0))
MenuTitle("Datei")
MenuItem(#MenuItem_1, "&Beenden")
MenuTitle("?")
MenuItem(#MenuItem_2, "&?")
EndIf
EndProcedure
Procedure GetRandomMenuID()
Protected iRandomInt.l
iRandomInt = Random(66550)
If IsMenu(iRandomInt)
GetRandomMenuID()
Else
ProcedureReturn iRandomInt
EndIf
EndProcedure
If OpenWindow(0,0,0,300,200,#PB_Window_SystemMenu, "Dynamic Menue")
If CreateGadgetList(WindowID(0))
ButtonGadget(0,0,0,300,100,"AddMenuEntry: LOL!")
;ButtonGadget(1,0,100,300,100,"DeleteMenuEntry: LOL!")
EndIf
CreateMenue()
While 1
iHwndEvent.l = WindowEvent()
Select iHwndEvent
Case #PB_Event_CloseWindow
Break;
Case #PB_Event_Gadget
Select EventGadgetID()
Case 0
AddDynamicMenuItem(GetRandomMenuID(), "LOL!")
;Case 1
;DeleteDynamicMenuItem(); Da komm ich grad nicht druff wie....
EndSelect
Case #PB_Event_Menu
Debug EventMenuID()
Default
Delay(1)
EndSelect
Wend
EndIf
End