223 lines
4.5 KiB
Lua
223 lines
4.5 KiB
Lua
require("luacom")
|
|
|
|
function make_control()
|
|
|
|
local obj = {}
|
|
|
|
local cd_canvas = nil
|
|
local cd_dbuffer_canvas = nil
|
|
local x,y = 0,0
|
|
|
|
local function draw()
|
|
cd.Activate(cd_dbuffer_canvas)
|
|
cd.Background(cd.BLACK)
|
|
cd.Clear()
|
|
|
|
cd.Foreground(cd.EncodeColor(255,255,0))
|
|
cd.Box(x,x+120,y,y+120)
|
|
cd.Flush()
|
|
end
|
|
|
|
local incx = 1
|
|
local incy = 1
|
|
|
|
local function idle()
|
|
if not cd_canvas then return end
|
|
|
|
x = x + incx
|
|
y = y + incy
|
|
|
|
local w, h = cd.GetCanvasSize()
|
|
|
|
if ((x + 120) > w) or (x < 0) then
|
|
x = x - incx
|
|
incx = incx * -1
|
|
x = x + incx
|
|
end
|
|
|
|
if ((y + 120) > h) or (y < 0) then
|
|
y = y - incy
|
|
incy = incy * -1
|
|
y = y + incy
|
|
end
|
|
|
|
draw()
|
|
end
|
|
|
|
local timer1 = iup.timer{time=10}
|
|
|
|
local canvas = iup.canvas{
|
|
rastersize = "512x512",
|
|
expand = "YES",
|
|
action = function(self)
|
|
if cd_canvas == nil then
|
|
cd_canvas = cd.CreateCanvas(cd.IUP, self)
|
|
if cd_canvas == nil then
|
|
print("Error creating cdCanvas(IUP)!!!")
|
|
exit(-1)
|
|
end
|
|
|
|
cd_dbuffer_canvas = cd.CreateCanvas(cd.DBUFFER, cd_canvas)
|
|
if cd_dbuffer_canvas == nil then
|
|
print("Error creating cdCanvas(DBUFFER)!!!")
|
|
exit(-1)
|
|
end
|
|
-- IupSetIdle(idle)
|
|
end
|
|
draw()
|
|
|
|
local w,h = cd.GetCanvasSize()
|
|
local color = cd.EncodeColor(1,2,3)
|
|
end,
|
|
}
|
|
|
|
function timer1:action_cb()
|
|
idle()
|
|
return iup.DEFAULT
|
|
end
|
|
|
|
local dialog = iup.dialog{
|
|
iup.vbox{
|
|
canvas,
|
|
}
|
|
}
|
|
|
|
function canvas:keypress_cb(c, press)
|
|
draw()
|
|
if press == 1 then
|
|
if c == iup.K_UP then
|
|
local w,h = cd.GetCanvasSize()
|
|
y = y + 10
|
|
if y + 120 > h then y = 380 end
|
|
draw()
|
|
elseif c == iup.K_DOWN then
|
|
y = y - 10
|
|
if y < 0 then y = 0 end
|
|
draw()
|
|
elseif c == iup.K_LEFT then
|
|
x = x - 10
|
|
if x < 0 then x = 0 end
|
|
draw()
|
|
elseif c == iup.K_RIGHT then
|
|
local w,h = cd.GetCanvasSize()
|
|
x = x + 10
|
|
if x + 120 > w then x = 380 end
|
|
draw()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Methods required for all Lua controls
|
|
|
|
function obj:InitialSize()
|
|
return 500,600
|
|
end
|
|
|
|
function obj:CreateWindow(hwndParent, x, y, cx, cy)
|
|
|
|
iup.SetAttribute(dialog, "NATIVEPARENT", hwndParent)
|
|
iup.SetAttribute(dialog, "CONTROL", "YES")
|
|
iup.SetAttribute(dialog, "RASTERSIZE", cx .. "x" .. cy)
|
|
|
|
timer1.run = "YES"
|
|
|
|
dialog:map()
|
|
|
|
return iup.GetAttributeData(dialog, "WID")
|
|
end
|
|
|
|
function obj:SetExtent(cx, cy)
|
|
return true
|
|
end
|
|
|
|
function obj:GetClass()
|
|
return "{687362C8-00D6-4eff-9207-DDB22EE23A6D}"
|
|
end
|
|
|
|
function obj:DestroyWindow()
|
|
timer1.run = "NO"
|
|
cd.KillCanvas(cd_dbuffer_canvas)
|
|
cd.KillCanvas(cd_canvas)
|
|
dialog:destroy()
|
|
end
|
|
|
|
-- ITestLuaControl implementation
|
|
|
|
luacom.TableVariants = true
|
|
|
|
function obj:Sum(i1, i2)
|
|
print("Calling Sum...",i1,i2.Type)
|
|
return i1 + i2.Value
|
|
end
|
|
|
|
function obj:I2A(i1)
|
|
print("Calling I2A...",i1)
|
|
return tostring(i1)
|
|
end
|
|
|
|
function obj:IntDivide(i1, i2)
|
|
print("Calling IntDivide...",i1,i2)
|
|
div = {}
|
|
div.Type = "decimal"
|
|
div.Value = i1/i2
|
|
return div,math.mod(i1, i2)
|
|
end
|
|
|
|
return obj
|
|
|
|
end -- make_control()
|
|
|
|
local COM = {}
|
|
|
|
local COMAppObject, events, e, cookie
|
|
|
|
function COM:StartAutomation()
|
|
print("Starting server...")
|
|
-- creates the object using its default interface
|
|
COMAppObject, events, e = luacom.NewControl(make_control(), "testlua.Teste")
|
|
-- This error will be caught by detectAutomation
|
|
if COMAppObject == nil then
|
|
error("NewObject failed: "..e)
|
|
end
|
|
-- Exposes the object
|
|
cookie = luacom.ExposeObject(COMAppObject)
|
|
if cookie == nil then
|
|
error("ExposeObject failed!")
|
|
end
|
|
end
|
|
|
|
function COM:Register()
|
|
-- fills table with registration information
|
|
local reginfo = {}
|
|
reginfo.VersionIndependentProgID = "testcontrol.Teste"
|
|
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
|
|
reginfo.TypeLib = "testcontrol.tlb"
|
|
reginfo.CoClass = "Teste"
|
|
reginfo.ComponentName = "Test Control"
|
|
reginfo.Arguments = "/Automation"
|
|
reginfo.ScriptFile = "control.lua"
|
|
reginfo.Control = true
|
|
-- stores component information in the registry
|
|
local res = luacom.RegisterObject(reginfo)
|
|
if res == nil then
|
|
error("RegisterObject failed!")
|
|
end
|
|
end
|
|
|
|
function COM:UnRegister()
|
|
-- fills table with registration information
|
|
local reginfo = {}
|
|
reginfo.VersionIndependentProgID = "testcontrol.Teste"
|
|
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
|
|
reginfo.TypeLib = "testcontrol.tlb"
|
|
reginfo.CoClass = "Teste"
|
|
-- deletes component information from the registry
|
|
local res = luacom.UnRegisterObject(reginfo)
|
|
if res == nil then
|
|
error("UnRegisterObject failed!")
|
|
end
|
|
end
|
|
|
|
return luacom.DetectAutomation(COM)
|
|
|