捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:在 Lua 中使用 VCL 组件
zhude 27297 2006/11/24 11:50:38
谢谢 楼主
zbluecn 27293 2006/11/24 9:51:53
呵呵 载入的时候 把那些行去掉就可以了啊 

LuaLoadBufferFromFile 这个的 使用的是 TStringList

这个方法比较笨, 暂时还没有想到其他的方法
zhude 27290 2006/11/24 1:08:43
再问一下楼主~~有没有什么手段能直接从指定的行开始执行脚本
比如说 
A.LUA
print("1");
print("2");
print("3");
print("4");

能不能通过什么手段直接从 print("2"); 开始  而不是从头执行
zbluecn 27273 2006/11/23 8:45:31
这个是在lua 中的定义
#define luaL_dofile(L, fn)      (luaL_loadfile(L, fn) || lua_pcall(L, 0, 0, 0))

呵呵 没有什么不同

我写的比较复杂
zhude 27270 2006/11/22 23:20:53
请问一下楼上
你用的
 LuaLoadBufferFromFile(l, 'luaapp.lua', 'code');
  LuaPCall(L, 0, 0, 0);
和 

lua_dofile(MYL,'luaapp.lua');

有什么不同,谁更加好一些????????
zbluecn 27262 2006/11/22 10:39:52
我是这样写的
但是记得要带包编译.
Lua

--print(type(VCL))
frm=VCL.Form('LuafrmMain')
frm:Show()

DelphiAPP
function luaopen_vcl(L: Plua_State): Integer; cdecl external 'vcl.dll';

//function luaopen_vclByDelphi(App: TApplication; Scr: TScreen; L: Plua_State): Integer; cdecl; external 'vcl.dll';

function LuaPrint(L: Plua_State): Integer; cdecl;
var
  I, N: Integer;
  sResult: string;
begin
  N := lua_gettop(L);
  for I := 1 to N do
    sResult := sResult + '|' + (lua_tostring(L, I)) + '|';
  ShowMessage(sResult);
  Result := 0;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  L := lua_open;
  luaL_openlibs(L);
  lua_settop(L, 0);
  luaopen_vcl(L);
 // luaopen_vclByDelphi(Application, Screen, L);
  lua_settop(L, 0);
  Lua_Register(L, 'print', LuaPrint);
end;

procedure TfrmMain.btn1Click(Sender: TObject);
begin
  LuaLoadBufferFromFile(l, 'luaapp.lua', 'code');
  LuaPCall(L, 0, 0, 0);
end;
zbluecn 27254 2006/11/21 19:00:12
对了2位, 给你们发mail怎么不回一下下阿
zbluecn 27253 2006/11/21 16:03:16
在LUA51 下 用require'vcl'

t=VCL.XXXXX('Name')
zhude 27252 2006/11/21 14:36:55
unit Clmain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,  lauxlib ,
  lua,luaconf,  lualib , LuaUtils ;

  
function printf(L: Plua_State): Integer; cdecl;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   MYL: Plua_State;
  function  luaopen_vcl(L: Plua_State): Integer; cdecl;       external 'vcl.dll';
implementation

{$R *.dfm}

procedure log(nr:string);
begin
Form1.Memo1.Lines.Add(nr);
end;

function printf(L: Plua_State): Integer; cdecl;
var
nr:pchar;
begin
  nr:=lua_tostring(L, -1);    //得到栈顶的值。
  lua_pop(L,-1);          //移除栈顶的值。
  log(nr);
  result := 1;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
lua_close(MYL)  ;


MYL := lua_open();
luaopen_base(MYL);
luaopen_table(MYL);
luaopen_string(MYL);
luaopen_math(MYL);
luaopen_debug(MYL);
luaopen_vcl(MYL);
lua_register(MYL,'printf',printf)  ;          //注册函数
lua_register(MYL,'print',printf)  ;          //注册函数






lua_dofile(MYL,PChar(Edit1.Text));




end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MYL := lua_open();
luaopen_base(MYL);
luaopen_table(MYL);
luaopen_string(MYL);
luaopen_math(MYL);
luaopen_debug(MYL);
luaopen_vcl(MYL);
lua_register(MYL,'printf',printf)  ;          //注册函数
lua_register(MYL,'print',printf)  ;          //注册函数


end;

end.
zhude 27251 2006/11/21 14:02:01
Lua 5.1.1  Copyright (C) 1994-2006 Lua.org, PUC-Rio
> luaL_openlib "vcl.dll"
stdin:1: attempt to call global 'luaL_openlib' (a nil value)
stack traceback:
        stdin:1: in main chunk
        [C]: ?
>
zhude 27250 2006/11/21 14:00:34
载入 VLC.DLL 的命令是什么?????????
我用 DOFILE 执行每一个DEMO 都会报错~~~
zbluecn 27237 2006/11/20 16:53:24
希望大家能够多多探讨
scottrayn 27235 2006/11/20 16:23:40
谢谢
第一页 上一页 下一页 最后页 有 13 条纪录 共1页 1 - 13
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表