--- title: अपनी विंडो बनाना summary: frame, table, टेक्स्ट, बटन और सही क्लीनअप वाला Lua UI बनाएँ। 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/"] --- ## एक दृष्टिकोण चुनें एक छोटी सी सेटिंग के लिए, एक विचार करें [सेटिंग्स मेनू एपीआई](wiki:ui-settings). (स)किसी मौजूदा मेनू में कार्ड या एक्शन जोड़ने के लिए, [मानक UI का विस्तार](wiki:extend-ui). मुक़द्दमाएक कस्टम विंडो एक फ्रेम, तालिका, पंक्तियों और विजेट बनाने के लिए हेल्पर का उपयोग कर सकती है, फिर इसे प्रदर्शित कर सकती है। पायथन और नेटवर्क सेवा की आवश्यकता नहीं है। ## रजिस्टर Lua अपने विस्तार में Lua फ़ाइल घोषित करें `ui.xml`, जैसा कि नीचे दिखाया गया है। विंडो खोलने से पहले हेल्पर और गेम UI तैयार होने तक प्रतीक्षा करें। Lua फ़ाइल लोड करने का मतलब दुनिया नहीं है और हर मेनू पहले से ही मौजूद है। ```xml ``` ## खिड़की का निर्माण इन `ui/wiki_panel.lua` उदाहरण एक बार अपना मेनू पंजीकृत करता है। UI की तैयारी के बाद एक अलग घटना पैनल खोलती है। यह परत 3 पर एक फ्रेम बनाता है, एक तालिका और पाठ जोड़ता है, एक बंद बटन बांधता है और फ्रेम प्रदर्शित करता है। वर्तमान खेल UI के खिलाफ आंतरिक कॉलबैक और परत उपयोग की जांच करें. एमडी `raise_lua_event` टुकड़ा एक मौजूदा के अंदर से संबंधित है `actions` ब्लॉक. आपके मॉड में ट्रिगर होता है, जैसे कि काम करने वाला बटन या घटना। उदाहरण में एक हॉटकी स्वचालित रूप से स्थापित नहीं होती है। ```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 ``` ## जीवन चक्र की जांच करें दोहराए जाने वाले उद्घाटन में कॉलबैक नहीं जमा होने चाहिए। बंद बटन, भागने/नियंत्रक व्यवहार, मेनू परिवर्तन और लोड सहेजें का परीक्षण करें। अपर्याप्त ऊंचाई वाली टेबल पूरी तरह से गायब हो सकती है। किसी अन्य मेनू के फ्रेम को खाली न करें या पाठ प्रदर्शित करने के लिए ग्लोबल प्लेयर कंट्रोल को न बदलें। इस टेम्पलेट में हेल्पर फॉर्म का चित्रण किया गया है और X4 संस्करणों में खेल में अलग से परीक्षण नहीं किया गया है। साझा शीर्ष स्तर आइकन या तृतीय-पक्ष UIX हुक जोड़ने से पहले, पढ़ें [कॉलबैक और शीर्ष मेनू सीमा](wiki:ui-hooks-and-top-menu). (स)इन तंत्रों में अलग-अलग संगतता प्रतिबंध हैं।