Filed under: 程序开发 |
Posted on June 13th, 2007 by 李 方进
使用的是lua for delphi扩展,文件共有5个,一个dll,4个pas。
lua版本是5.0.2,可以点击这里下载。
写了一个简单的demo,delphi主程序完成对lua扩展的加载,同时对用户输入的日期以及当前日期进行比较,lua文件完成对比较结果的文字化输出。代码如下:
test.lua
- function dayinfo(num)
- local strdayinfo;
- if (num==0) then
- strdayinfo="今天";
- elseif (num>0) then
- strdayinfo=num.."天前";
- elseif (num<0) then
- strdayinfo=math.abs(num).."天后";
- end
- print(strdayinfo);
- end
delphi主程序
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls,DateUtils;
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- Button1: TButton;
- Edit1: TEdit;
- Memo1: TMemo;
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- uses
- lua, lualib, lauxlib, LuaUtils;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Edit1.Text:=datetostr(date());
- //Edit1.Text:=inttostr(DayOfTheYear(date()));
- end;
- function LuaPrint(L: Plua_State): Integer; cdecl;
- var
- I, N: Integer;
- begin
- //LuaShowStack(L, 'fobOp:LuaPrint ?n?');
- N := lua_gettop(L);
- for I := 1 to N do
- Form1.Label1.caption:=lua_tostring(L, I);
- Result := 0;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- L: Plua_State;
- begin
- // Label1.Caption:= inttostr(DayOfTheYear(date())-DayOfTheYear(strtodate(Edit1.Text)));
- Memo1.Lines.LoadFromFile('test.lua');
- Memo1.Lines.Add('dayinfo('+inttostr(DayOfTheYear(date())-DayOfTheYear(strtodate(Edit1.Text)))+')');
- L := lua_open;
- try
- luaopen_math(L);
- LuaRegister(L, 'print', LuaPrint);
- LuaLoadBuffer(L, Memo1.Text, 'code');
- LuaPCall(L, 0, 0, 0);
- finally
- lua_close(L);
- end;
- end;
- end.
经测试成功,程序会在label1中根据用户输入的日期来输出是今天,还是n天前或者n天后。
Leave a Reply