|
The Lua scripting engine is fully integrated with the .NET CLR. This means that you can script .NET without having to compile code. Here is a simple script you can attach to a command and run. It displays a .NET Windows Form with two buttons:
luanet.load_assembly("System.Windows.Forms") luanet.load_assembly("System.Drawing) Form = luanet.import_type("System.Windows.Forms.Form") Button = luanet.import_type("System.Windows.Forms.Button") Point = luanet.import_type("System.Drawing.Point") form1=Form() button1=Button() button2=Button() function handleClick(sender,data) if sender.Text=="OK" then sender.Text="Clicked" else sender.Text="OK" end button1.MouseUp:Remove(handler) print(sender:ToString()) end button1.Text = "OK" button1.Location=Point(10,10) button2.Text = "Cancel" button2.Location=Point(button1.Left, button1.Height + button1.Top + 10) handler=button1.MouseUp:Add(handleClick) form1.Text = "My Dialog Box" form1.HelpButton = true form1.MaximizeBox = false form1.MinimizeBox = false form1.AcceptButton = button1 form1.CancelButton = button2 form1.Controls:Add(button1) form1.Controls:Add(button2) form1:ShowDialog()
The next example creates and displays a simple Lua Editor that enables you to test and run scripts:
luanet.load_assembly("System.Windows.Forms") luanet.load_assembly("System.Drawing") Form=luanet.import_type("System.Windows.Forms.Form") TextBox=luanet.import_type("System.Windows.Forms.TextBox") Label=luanet.import_type("System.Windows.Forms.Label") ListBox=luanet.import_type("System.Windows.Forms.ListBox") Button=luanet.import_type("System.Windows.Forms.Button") Point=luanet.import_type("System.Drawing.Point") Size=luanet.import_type("System.Drawing.Size") Lua=luanet.import_type("LuaInterface.Lua") OpenFileDialog=luanet.import_type("System.Windows.Forms.OpenFileDialog") File=luanet.import_type("System.IO.File") StreamReader=luanet.import_type("System.IO.StreamReader") FileMode=luanet.import_type("System.IO.FileMode") ScrollBars=luanet.import_type("System.Windows.Forms.ScrollBars") FormBorderStyle=luanet.import_type("System.Windows.Forms.FormBorderStyle") FormStartPosition=luanet.import_type("System.Windows.Forms.FormStartPosition") function clear_click(sender,args) code:Clear() end function execute_click(sender,args) results.Items:Clear() result=lua:DoString(code.Text) if result then for i=0,result.Length-1 do results.Items:Add(result[i]) end end end function load_click(sender,args) open_file:ShowDialog() file=StreamReader(open_file.FileName) code.Text=file:ReadToEnd() file:Close() end form = Form() code = TextBox() label1 = Label() execute = Button() clear = Button() results = ListBox() label2 = Label() load = Button() lua = Lua() lua:OpenBaseLib() open_file = OpenFileDialog() form:SuspendLayout() code.Location = Point(16, 24) code.Multiline = true code.Name = "Code" code.Size = Size(440, 128) code.ScrollBars = ScrollBars.Vertical code.TabIndex = 0 code.Text = "" label1.Location = Point(16, 8) label1.Name = "label1" label1.Size = Size(100, 16) label1.TabIndex = 1 label1.Text = "Lua Code:" execute.Location = Point(96, 160) execute.Name = "Execute" execute.TabIndex = 2 execute.Text = "Execute" execute.Click:Add(execute_click) clear.Location = Point(176, 160) clear.Name = "Clear" clear.TabIndex = 3 clear.Text = "Clear" clear.Click:Add(clear_click) results.Location = Point(16, 208) results.Name = "Results" results.Size = Size(440, 95) results.TabIndex = 4 label2.Location = Point(16, 192) label2.Name = "label2" label2.Size = Size(100, 16) label2.TabIndex = 5 label2.Text = "Results:" load.Location = Point(16, 160) load.Name = "Load" load.TabIndex = 6 load.Text = "Load..." load.Click:Add(load_click) open_file.DefaultExt = "lua" open_file.Filter = "Lua Scripts|*.lua|All Files|*.*" open_file.Title = "Pick a File" form.AutoScaleBaseSize = Size(5, 13) form.ClientSize = Size(472, 315) form.Controls:Add(load) form.Controls:Add(label2) form.Controls:Add(results) form.Controls:Add(clear) form.Controls:Add(execute) form.Controls:Add(label1) form.Controls:Add(code) form.Name = "MainForm" form.Text = "LuaNet" form.FormBorderStyle = FormBorderStyle.Fixed3D form.StartPosition = FormStartPosition.CenterScreen form:ResumeLayout(false) form:ShowDialog()
If you are interested in learning more about scripting the .NET CLR, the following documentation is available:
http://www.chipmunkav.com/support/guide.pdf http://www.chipmunkav.com/support/luainterface.pdf
Shaun
|