AddMenuItem

Kategorie: Objekte / Menü
Ab Engineversion: 4.6.5.0 CP (erweitert ab 4.9.5.0 CE)

Beschreibung

Fügt einen Menüeintrag hinzu.

Syntax

int AddMenuItem (string szCaption, string szCommand, id idItem, object pMenuObject, int iCount, int iParameter, string szInfoCaption, int iExtra, any XPar1, any XPar2);

Parameter

szCaption:
Text des neuen Menüeintrags
szCommand:
Kommando, das bei Auswahl des Menüeintrags ausgeführt werden soll. Kann entweder ein Funktionsname oder ein Statement sein. Wenn ein Funktionsname angegeben wird, dann wird die Funktion in dem Objekt aufgerufen, welches bei CreateMenu als pCommandObject übergeben wurde.
idItem:
Die ID wird als Bild für den Menüeintrag verwendet. Der Name der Definition kann mit %s in szCaption verwendet werden. Außerdem wird die ID als erster Parameter an den Aufruf von szCommand übergeben, sofern dieser nur ein Funktionsname ist.
pMenuObject:
Objekt, dessen Menü der Eintrag hinzugefügt werden soll. Kann bei lokalen Aufrufen 0 sein.
iCount:
Gewünschte Zahl, die neben dem Menüeintrag angezeigt werden soll (ähnlich der Mengenanzeige im Aktivieren-Menü)
iParameter:
Wird als 2. Parameter an die in szCommand angegebene Funktion übergeben (siehe Anmerkung)
szInfoCaption:
Beschreibungstext des neuen Menüeintrags
iExtra:
[opt] Zusatzparameter für das Verhalten des Menüeintrags.
Untere 7 Bits (0-127): Menüsymbol. Sie lassen sich nicht gleichzeitig verwenden.
0: Normal
C4MN_Add_ImgRank = 1: Rangsymbol. Bei angegebenem idItem wird ggf. die Rank.png der Definition genutzt. iCount gibt die Ranghöhe an
C4MN_Add_ImgIndexed = 2: Picturefacet, das um XPar1-fache Picturebreite nach rechts verschoben ist, wird verwendet. Damit lassen sich mehrere Menüsymbole innerhalb einer Definition unterbringen.
C4MN_Add_ImgObjRank = 3: XPar1 gibt ein Objekt an, dessen Picture-Grafik mit Rang gezeichnet wird. Hat das Objekt keine Infosektion (und damit keinen Rang), so wird in Kontextmenüs dennoch ein entsprechender Leerraum gelassen. Ab CE.
C4MN_Add_ImgObject = 4: XPar1 gibt ein Objekt an, dessen Picture-Grafik gezeichnet wird. Ab CE.
C4MN_Add_ImgTextSpec = 5: Das Symbol wird in szCaption festgelegt und kann entweder eine normale ID, eine Portrait-Spezifikation in der Form "Portrait:CLNK::00ff00::1" oder eines der folgenden Symbole sein:
Name Beschreibung
Ico:Locked Passwortsymbol
Ico:League Ligasymbol
Ico:GameRunning Symbol für "Spiel läuft"
Ico:Lobby Symbol für "Lobby"
Ico:RuntimeJoin Symbol für "Laufzeitbeitritt erlaubt"
Ico:FairCrew Symbol für "Faire Crew"
Ico:Settlement Symbol für Siedlungspunkte

C4MN_Add_ImgColor = 6: Die Besitzerfarbflächen im Symbol werden mit der in XPar1 angegebenen Farbe eingefärbt.
C4MN_Add_ImgIndexedColor = 7: Picturefacet, das um XPar1-fache Picturebreite nach rechts verschoben ist, wird verwendet. Die Besitzerfarbflächen im Symbol werden mit der in XPar2 angegebenen Farbe eingefärbt. Kann nicht mit C4MN_Add_PassValue kombiniert werden.

Zusätzliche Flags (können mit obrigen Bits kombiniert werden):
C4MN_Add_PassValue = 128: XPar2 wird als Wertangabe benutzt, und überschreibt die Standardangabe (Wert der Definition idItem). Siehe auch iExtra von CreateMenu.
C4MN_Add_ForceCount = 256: Wenn dieses Flag angegeben wird, wird auch ein iCount von 0 im Menü als Anzahl angezeigt (wie es zB. auch im Kaufmenü der Fall ist).
Bei dieser Gelegenheit sei auch erwähnt, dass intern der Wert C4MN_Item_NoCount = 12345678 verwendet wird, wenn dieses Flag nicht angegeben ist, aber iCount 0 ist. D.h. auch, dass in dem seltenen Fall, dass iCount mit 12345678 angegeben wird, keine Anzahl angezeigt wird.
C4MN_Add_ForceNoDesc = 512: Wenn dieses Flag angegeben wird, wird auf keinen Fall eine Beschreibung für den Menüeintrag angezeigt. Beschreibung (setzbar mit szInfoCaption) in dem Sinn, dass ein Tooltip angezeigt wird, wenn der Menüeintrag lange genug ausgewählt ist.
XPar1:
[opt] Erster Zusatzparameter für iExtra.
XPar2:
[opt] Zweiter Zusatzparameter für iExtra.

Anmerkungen

Menüsymbole sollten optimalerweise die Größe 35x35 für normale Menüs, 16x16 für Kontextmenüs besitzen. Andernfalls wird unter Beibehaltung des Höhe/Breite-Verhältnisses so gestreckt, dass die längere Seite dieser Größe entspricht.
Wird als szCommand-Parameter nur ein Funktionsname angegeben, werden folgende Parameter übergeben: idItem, iParameter, bRight[, iValue] wobei bRight angibt, ob der Menueintrag mit [Special2] bzw. der rechten Maustaste ausgewählt wurde. iValue wird nur übergeben, wenn das Bit 8 bei iExtra gesetzt wird und gibt den (überschriebenen) angezeigten Wert des ausgewählten Menüeintrags an.

Beispiele

/* Wird bei Doppelklick auf Graben aufgerufen */
func Activate()
{
	// Lokales Menü mit lokalen Kommandos erzeugen
	CreateMenu(GetID());
	// Menüeinträge erzeugen
	AddMenuItem("Hallo sagen", "SayHello", 0);
	AddMenuItem("Zaubern", "DoMagic", 0);
	AddMenuItem("Objekt erzeugen: %s", "CreateItem", ROCK);
	AddMenuItem("Objekt erzeugen: %s", "CreateItem", FLNT);
}

/* Diese Kommados werden vom Menü aufgerufen */
func SayHello()
{
	Message("Hallo",this());
}

func DoMagic()
{
	Sound("Magic*");
	ObjectCall(CreateObject(MLGT,0,0),"Activate",this());
}

func CreateItem(id item)
{
	Sound("Magic*");
	CreateContents(item);
}
Menü für einen Spezialclonk.
func Activate(object clonk)
{
	// Menü im Clonk mit lokalen Kommandos erzeugen
	CreateMenu(GetID(), clonk, this());
	// Menüeinträge erzeugen
	AddMenuItem(Format("%s Schrumpfen", GetName(clonk)), Format("DoCon(-10,Object(%d))", ObjectNumber(%d)), 0, this(), 0, 0, "Eine Art Jungbrunnen.", 4, clonk);
}
Menü für ein Schrumpfobjekt.
Siehe auch: CloseMenu, CreateMenu, SelectMenuItem, SetMenuDecoration, SetMenuTextProgress
jwk, April 2002