Компонентная модель организации программных систем. Семакин М.М. - 23 стр.

UptoLike

Составители: 

23
{------------------------------------------------------------------------------}
function TMyComponent_settable_event( L: lua_State ): integer; cdecl;
begin
Result := 0;
lua_pushvalue( L, 2 );
lua_pushvalue( L, 3 );
lua_rawset( L, 1 );
end;
////////////////////////////////////////////////////////////////////////////////
function to_TMyComponent( L: lua_State;
value_index: integer ): TMyComponent;
var MyComp: TMyComponent;
begin
Result := nil;
if GetObjectFromTable( L, value_index, MyComp ) then
Result := MyComp;
end;
{------------------------------------------------------------------------------}
function push_TMyComponent( L: lua_State;
value: TMyComponent ): integer;
begin
Result := 1;
lua_newtable( L );
AddObjectInfoToTable( L, lua_gettop(L), @TMyComponent_Info );
PushObjectHandleWithTag( L, value );
SetObjectHandleToTable( L, lua_gettop(L)-1, lua_gettop(L) );
lua_pop( L, 1 );
if TMyComponent_Tag = LUA_NOTAG then begin
TMyComponent_Tag := lua_newtag( L );
lua_pushcfunction( L, TMyComponent_gettable_event );
lua_settagmethod( L, TMyComponent_Tag, 'gettable' );
lua_pushcfunction( L, TMyComponent_settable_event );
lua_settagmethod( L, TMyComponent_Tag, 'settable' );
end;
lua_settag( L, TMyComponent_Tag );
end;
////////////////////////////////////////////////////////////////////////////////
end.
4. Сгенерировать модуль TMyComponent_LuaObject.pas при помощи программы
convert_pas (COMA\sdk\LuaScript\convert\). Для этого необходимо сначала соз-
дать файл TMyComponent_LuaObject (без расширения), который должен иметь
следующий вид:
unit TMyComponent_LuaObject;
interface
uses
Lua,
LuaObject_unit,
TMyComponent_BaseLuaObject;
classes
TMyComponent = class( TBaseMyComponent )
Сюда необходимо поместить хотя бы один метод класса TMyComponent
end;
end;
implementation
uses
SysUtils,
LuaDebug,
{------------------------------------------------------------------------------}
function TMyComponent_settable_event( L: lua_State ): integer; cdecl;
begin
  Result := 0;

  lua_pushvalue( L, 2 );
  lua_pushvalue( L, 3 );
  lua_rawset( L, 1 );
end;

////////////////////////////////////////////////////////////////////////////////
function to_TMyComponent( L: lua_State;
                           value_index: integer ): TMyComponent;
var MyComp: TMyComponent;
begin
  Result := nil;
  if GetObjectFromTable( L, value_index, MyComp ) then
     Result := MyComp;
end;

{------------------------------------------------------------------------------}
function push_TMyComponent( L: lua_State;
                              value: TMyComponent ): integer;
begin
  Result := 1;
  lua_newtable( L );
  AddObjectInfoToTable( L, lua_gettop(L), @TMyComponent_Info );
  PushObjectHandleWithTag( L, value );
  SetObjectHandleToTable( L, lua_gettop(L)-1, lua_gettop(L) );
  lua_pop( L, 1 );
  if TMyComponent_Tag = LUA_NOTAG then begin
     TMyComponent_Tag := lua_newtag( L );
     lua_pushcfunction( L, TMyComponent_gettable_event );
     lua_settagmethod( L, TMyComponent_Tag, 'gettable' );
     lua_pushcfunction( L, TMyComponent_settable_event );
     lua_settagmethod( L, TMyComponent_Tag, 'settable' );
  end;
  lua_settag( L, TMyComponent_Tag );
end;

////////////////////////////////////////////////////////////////////////////////

end.

         4. Сгенерировать модуль TMyComponent_LuaObject.pas при помощи программы
            convert_pas (COMA\sdk\LuaScript\convert\). Для этого необходимо сначала соз-
            дать файл TMyComponent_LuaObject (без расширения), который должен иметь
            следующий вид:

unit TMyComponent_LuaObject;

interface

uses
  Lua,
  LuaObject_unit,
  TMyComponent_BaseLuaObject;

classes
  TMyComponent = class( TBaseMyComponent )
         ← Сюда необходимо поместить хотя бы один метод класса TMyComponent
  end;
end;

implementation

uses
  SysUtils,
  LuaDebug,

                                             23