Как вывести результат выполнения скрипта lua в tmemo?

Пользователь

от richard , в категории: Другие , 2 года назад

Как вывести результат выполнения скрипта lua в tmemo?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от greyson , 2 года назад

@richard 

Вы можете использовать функцию TMemo.Lines.Add() для добавления строк в TMemo. Например:

1
2
local result = RunYourLuaScript()
memo:Lines.Add(result)


Где "memo" - это имя вашего TMemo компонента, "RunYourLuaScript" - функция, которая выполняет ваш скрипт Lua и возвращает результат.

Пользователь

от jensen , год назад

@richard 

Вот пример кода на Delphi, который выполняет скрипт Lua и выводит его результат в TMemo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
procedure TForm1.Button1Click(Sender: TObject);
var
  L: Plua_State;
  ResultCode: Integer;
begin
  L := luaL_newstate;
  luaL_openlibs(L);

  ResultCode := luaL_dostring(L, 'print("Hello, Lua!")');
  if ResultCode <> 0 then
  begin
    ShowMessage('Error executing Lua script');
    Exit;
  end;

  lua_close(L);
end;

procedure TForm1.ExecuteLuaScript(const Script: string);
var
  Output: TStringList;
  L: Plua_State;
  ResultCode: Integer;
begin
  Output := TStringList.Create;
  try
    L := luaL_newstate;
    luaL_openlibs(L);

    ResultCode := luaL_loadstring(L, PAnsiChar(AnsiString(Script)));
    if ResultCode = 0 then
    begin
      ResultCode := lua_pcall(L, 0, LUA_MULTRET, 0);
      if ResultCode = 0 then
      begin
        GetLuaStack(L, Output);
        memo.Lines.AddStrings(Output);
      end
      else
      begin
        ShowMessage('Error executing Lua script');
      end;
    end
    else
    begin
      ShowMessage('Error loading Lua script');
    end;

    lua_close(L);
  finally
    Output.Free;
  end;
end;

procedure TForm1.GetLuaStack(L: Plua_State; Output: TStrings);
var
  Depth: Integer;
  ValueType: Integer;
begin
  Depth := 0;
  while True do
  begin
    ValueType := lua_type(L, -1 - Depth);
    if ValueType = LUA_TNONE then
      Break;

    case ValueType of
      LUA_TNIL:
        Output.Add('nil');
      LUA_TBOOLEAN:
        begin
          if lua_toboolean(L, -1 - Depth) then
            Output.Add('true')
          else
            Output.Add('false');
        end;
      LUA_TLIGHTUSERDATA:
        Output.Add('lightuserdata');
      LUA_TNUMBER:
        Output.Add(FloatToStr(lua_tonumber(L, -1 - Depth)));
      LUA_TSTRING:
        Output.Add(lua_tostring(L, -1 - Depth));
      LUA_TTABLE:
        Output.Add('table');
      LUA_TFUNCTION:
        Output.Add('function');
      LUA_TUSERDATA:
        Output.Add('userdata');
      LUA_TTHREAD:
        Output.Add('thread');
      LUA_TNONE:
        Output.Add('none');
    end;

    Inc(Depth);
  end;
end;


В этом примере кнопка Button1.onClick выполняет скрипт Lua (print("Hello, Lua!")), а результат выводится в TMemo (memo).