A Lua nyelvben is lehetsgnk van grafikus interfsszel rendelkez alkalmazsokat fejleszteni, ehhez tbb knyvtr is a rendelkezsnkre ll. Ezek ltalban valami egyb nyelven rott grafikus knyvtrhoz nyjtanak hozzfrst. Nhny ilyen knyvtr:
wxLua
LuaInterface
lqt
A LauInterface a Windows Forms eszkztrt teszi elrhetv Lua programjainkban. Kzvetlenl a .NET keretrendszerbl pldnyostja ket, annak CLR (Common Language Runtime) szolgltatsn keresztl. Elrhet benne a Windows Forms minden osztlya, esemnykezelse, s intzi, hogy kompatibilis legyen a Lua beptett tpusaival.
load_assembly:
Betlti a megadott .NET assemblyt. Egy string paramterben vrja az assembly nevt, pl. System.Windows.Forms.
import_type:
Betlti a megadott .NET tpust, s visszaadja. Egy string paramterben vrja a tpus teljes nevt a namespace-el egytt. A visszaadott objektumot a tpus objektumainak pldnyostsra lehet hasznlni, fggvnyknt kell meghvni, mindig megprblja rilleszteni a kapott paramtereket egy ltez konstruktor szignatrjra.
get_constructor_bysig:
Ha az elzben emltett automatikus konstruktor illeszts nem elg, akkor ezzel a metdussal egy konkrt konstruktort lehet pldnyostani szignatra alapjn. Tetszleges szm .NET tpust vr paramterknt, az els azt a tpust adja meg, aminek a konstruktort keressk, a tbbi pedig a kvnt paramterek tpust.
get_method_bysig:
Az elzhz hasonlan itt is nem egyrtelm paramterezs esetn lehet a konkrt szignatra alapjn megkeresni metdusokat. Paramterknt a metdust tartalmaz objektumot, a metdus nevt, s a paramterek tpusait vrja, s visszaadja a konkrt metdust, amit ezutn meg lehet hvni.
Az elzek segtsgvel pldnyostott .NET objektumok rendelkeznek a szoksos tagjaikkal s metdusaikkal. Hasznlatuk ugyangy trtnik mint C#-ban vagy brmely egyb .NET-es nyelvben.
Esemnykezels:
Az esemnykezelshez egyszeren az adott objektum esemny tagjn kell egy Add vagy Remove metdust meghvni, paramterknt pedig egy Lua fggvnyt kell megadni. Ez automatikusan kezeli a delegate-eket, stb.
Plda:
require 'luanet'
luanet.load_assembly("System.Windows.Forms")
Form = luanet.import_type("System.Windows.Forms.Form")
FlowLayoutPanel = luanet.import_type("System.Windows.Forms.FlowLayoutPanel")
TextBox = luanet.import_type("System.Windows.Forms.TextBox")
Button = luanet.import_type("System.Windows.Forms.Button")
MessageBox = luanet.import_type("System.Windows.Forms.MessageBox")
layout = FlowLayoutPanel()
textbox = TextBox()
button = Button()
button.Text = "OK"
function onClick(sender, args)
MessageBox.Show(textbox.Text)
end
button.MouseUp:Add(onClick)
layout.Controls:Add(textbox)
layout.Controls:Add(button)
window = Form()
window.Controls:Add(layout)
window.Text = "Example"
window:ShowDialog()