A Lua programozási nyelv

Készítők

GUI alkalmazások

A Lua nyelvben is lehetõségünk van grafikus interfésszel rendelkezõ alkalmazásokat fejleszteni, ehhez több könyvtár is a rendelkezésünkre áll. Ezek általában valami egyéb nyelven írott grafikus könyvtárhoz nyújtanak hozzáférést. Néhány ilyen könyvtár:

LuaInterface

A LauInterface a Windows Forms eszköztárát teszi elérhetõvé Lua programjainkban. Közvetlenül a .NET keretrendszerbõl példányosítja õket, annak CLR (Common Language Runtime) szolgáltatásán keresztül. Elérhetõ benne a Windows Forms minden osztálya, eseménykezelése, és intézi, hogy kompatibilis legyen a Lua beépített típusaival.

load_assembly:

Betölti a megadott .NET assemblyt. Egy string paraméterben várja az assembly nevét, pl. „System.Windows.Forms”.

import_type:

Betölti a megadott .NET típust, és visszaadja. Egy string paraméterben várja a típus teljes nevét a namespace-el együtt. A visszaadott objektumot a típus objektumainak példányosítására lehet használni, függvényként kell meghívni, mindig megpróbálja ráilleszteni a kapott paramétereket egy létezõ konstruktor szignatúrájára.

get_constructor_bysig:

Ha az elõzõben említett automatikus konstruktor illesztés nem elég, akkor ezzel a metódussal egy konkrét konstruktort lehet példányosítani szignatúra alapján. Tetszõleges számú .NET típust vár paraméterként, az elsõ azt a típust adja meg, aminek a konstruktorát keressük, a többi pedig a kívánt paraméterek típusát.

get_method_bysig:

Az elõzõhöz hasonlóan itt is nem egyértelmû paraméterezés esetén lehet a konkrét szignatúra alapján megkeresni metódusokat. Paraméterként a metódust tartalmazó objektumot, a metódus nevét, és a paraméterek típusait várja, és visszaadja a konkrét metódust, amit ezután meg lehet hívni.

Az elõzõek segítségével példányosított .NET objektumok rendelkeznek a szokásos tagjaikkal és metódusaikkal. Használatuk ugyanúgy történik mint C#-ban vagy bármely egyéb .NET-es nyelvben.

Eseménykezelés:

Az eseménykezeléshez egyszerûen az adott objektum esemény tagján kell egy Add vagy Remove metódust meghívni, paraméterként pedig egy Lua függvényt kell megadni. Ez automatikusan kezeli a delegate-eket, stb.

Példa:

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()