--- title: Ein eigenes Fenster erstellen summary: Erstelle eine Lua-Oberfläche mit Frame, Tabelle, Text, Schaltfläche und sauberem Aufräumen. section: ui kind: example status: example updated: 2026-10-27 tags: ["X4","modding","create","ui"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Breaking%20Changes/"] --- ## Wählen Sie einen Ansatz Für eine kleine Einstellung, betrachten Sie a [Einstellungen Menü API](wiki:ui-settings). Um eine Karte oder Aktion in ein vorhandenes Menü hinzuzufügen, beginnen Sie mit [Erweiterung der Standard-UI](wiki:extend-ui). Ein benutzerdefiniertes Fenster kann Hilfer verwenden, um einen Rahmen, eine Tabelle, Zeilen und Widgets zu erstellen und anschließend anzuzeigen. Python und ein Netzwerkdienst sind nicht erforderlich. ## Register Lua Erklären Sie die Lua-Datei in Ihrer Erweiterung `ui.xml`, Wie unten gezeigt. Warten Sie, bis Helper und das Spiel UI bereit sind, bevor Sie das Fenster öffnen. Laden einer Lua-Datei bedeutet nicht die Welt und jedes Menü bereits vorhanden. ```xml ``` ## Das Fenster erstellen Das `ui/wiki_panel.lua` Beispiel registriert sein Menü einmal. Ein separates Ereignis öffnet das Panel nach der UI-Präsenz. Es erzeugt einen Rahmen auf Ebene 3, fügt eine Tabelle und Text hinzu, bindet einen Schließen-Button und zeigt den Rahmen an. Prüfen Sie interne Rückrufe und Ebenennutzung gegen die aktuelle Spieloberfläche. Der MD `raise_lua_event` Fragment gehört in eine bestehende `actions` Block. Ihr Mod liefert den Trigger, wie z.B. einen Arbeitsknopf oder ein Ereignis. Das Beispiel installiert keinen Hotkey automatisch. ```lua local menu = { name = "WikiExamplePanel" } menu.onViewCreated = function() end menu.onRowChanged = function() end menu.onSelectElement = function() end function menu.onCloseElement() if menu.shown then Helper.clearFrame(menu, 3) menu.shown = false end end Menus = Menus or {} table.insert(Menus, menu) Helper.registerMenu(menu) local function showPanel() if menu.shown then return end local width = Helper.scaleX(480) local height = Helper.scaleY(150) local frame = Helper.createFrameHandle(menu, { layer = 3, x = (Helper.viewWidth - width) / 2, y = (Helper.viewHeight - height) / 2, width = width, height = height, standardButtons = {}, startAnimation = false, playerControls = true, }) local t = frame:addTable(1, { tabOrder = 1, width = width }) local title = t:addRow(false, {}) title[1]:createText("Hello, X4!", { fontsize = 14 }) local row = t:addRow(true, {}) row[1]:createButton({ height = 28 }):setText("Close") row[1].handlers.onClick = menu.onCloseElement menu.shown = true frame:display() end RegisterEvent("Wiki.ShowPanel", function() showPanel() end) ``` ```xml ``` ## Überprüfung des Lebenszyklus Wiederholtes Öffnen darf keine Rückrufe ansammeln. Testen Sie die Schaltfläche Schließen, Escape/Controller Verhalten, Menüänderungen und Speichern des Ladens. Eine Tabelle mit unzureichender Höhe kann vollständig verschwinden. Löschen Sie nicht den Rahmen eines anderen Menüs oder ändern Sie die globale Player-Steuerung nur, um Text anzuzeigen. Diese Vorlage zeigt Hilfeformulare und wurde nicht separat im Spiel über X4 Versionen getestet. Bevor Sie ein Shared Top-Level-Symbol oder UIX-Hooks von Drittanbietern hinzufügen, lesen Sie [Rückrufe und das Top-Menü-Grenze](wiki:ui-hooks-and-top-menu). Diese Mechanismen haben unterschiedliche Kompatibilitätsbeschränkungen.