Ai
1 Star 0 Fork 0

phy0292/cheat-engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
LuaForm.pas 17.14 KB
一键复制 编辑 原始数据 按行查看 历史
Dark Byte 提交于 2020-12-17 23:02 +08:00 . some more fixes for dark mode
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
unit LuaForm;
{$mode delphi}
interface
uses
Classes, lua, betterControls;
procedure initializeLuaForm;
procedure customForm_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
implementation
uses
{$ifdef windows}
jwawindows, windows,
{$endif}
{$ifdef darwin}
mactypes,
{$endif}
SysUtils, Controls, menus, lualib, lauxlib, LuaHandler,
LuaCaller, pluginexports, forms, dialogs, ceguicomponents, XMLWrite, XMLRead,
Graphics, DOM, cefuncproc, newkernelhandler, typinfo, LCLIntf, LCLProc,
LuaClass, LuaCustomControl;
resourcestring
rsTheGivenFormIsNotCompatible = 'The given form is not compatible. Formclass=';
function createForm(L: Plua_State): integer; cdecl;
var f: tcustomform;
parameters: integer;
visible: boolean;
begin
result:=1;
parameters:=lua_gettop(L);
if parameters=1 then
visible:=lua_toboolean(L,-1)
else
visible:=true;
lua_pop(L, lua_gettop(L));
f:=ce_createForm(visible); //not relly a customform, but it inherits from it, so good enough
f.PopupMode:=pmAuto;
luaclass_newClass(L, f);
result:=1;
end;
function customform_getOnClose(L: PLua_State): integer; cdecl;
var
c: TCustomForm;
begin
c:=luaclass_getClassObject(L);
LuaCaller_pushMethodProperty(L, TMethod(c.OnClose), 'TCloseEvent');
result:=1;
end;
function customform_setOnClose(L: PLua_State): integer; cdecl;
var
parameters: integer;
control: TCustomForm;
f: integer;
routine: string;
lc: TLuaCaller;
// clickroutine: integer;
begin
control:=luaclass_getClassObject(L);
result:=0;
if lua_gettop(L)>=1 then
begin
CleanupLuaCall(tmethod(control.onClose));
control.onClose:=nil;
if lua_isfunction(L,1) then
begin
routine:=Lua_ToString(L,1);
f:=luaL_ref(L,LUA_REGISTRYINDEX);
lc:=TLuaCaller.create;
lc.luaroutineIndex:=f;
control.OnClose:=lc.CloseEvent;
end
else
if lua_isstring(L,1) then
begin
routine:=lua_tostring(L,1);
lc:=TLuaCaller.create;
lc.luaroutine:=routine;
control.OnClose:=lc.CloseEvent;
end;
end;
end;
function customform_centerScreen(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
begin
f:=luaclass_getClassObject(L);
f.Position:=poScreenCenter;
result:=0;
end;
function customform_hide(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
begin
f:=luaclass_getClassObject(L);
f.Hide;
result:=0;
end;
function customform_close(L: Plua_State): integer; cdecl;
var
f: Tcustomform;
begin
result:=0;
f:=luaclass_getClassObject(L);
f.close;
end;
function customform_bringToFront(L: Plua_State): integer; cdecl;
var
f: Tcustomform;
begin
result:=0;
f:=luaclass_getClassObject(L);
f.BringToFront;
end;
function customform_showModal(L: Plua_State): integer; cdecl;
var
f: tcustomform;
begin
result:=1;
f:=luaclass_getClassObject(L);
lua_pushinteger(L, f.ShowModal);
end;
function customform_isForegroundWindow(L: Plua_State): integer; cdecl;
var
f: tcustomform;
begin
result:=1;
f:=luaclass_getClassObject(L);
lua_pushboolean(L, GetForegroundWindow=f.Handle);
end;
function customform_getMenu(L: PLua_State): integer; cdecl;
var
parameters: integer;
form: TCustomForm;
begin
result:=1;
form:=luaclass_getClassObject(L);
luaclass_newClass(L, form.menu);
end;
function customform_setMenu(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
menu: TMainmenu;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
begin
menu:=lua_ToCEUserData(L,-1);
form.Menu:=menu;
end;
end;
function customform_getBorderstyle(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
begin
form:=luaclass_getClassObject(L);
lua_pushinteger(L, integer(form.Borderstyle));
result:=1;
end;
function customform_setBorderstyle(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
Borderstyle: TBorderStyle;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
begin
Borderstyle:=TBorderstyle(lua_tointeger(L,-1));
form.Borderstyle:=Borderstyle;
end;
end;
function customform_show(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
begin
result:=0;
f:=luaclass_getClassObject(L);
f.Show;
end;
function customform_printToRasterImage(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
ri: TRasterImage;
begin
result:=0;
{$ifdef windows}
f:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
begin
ri:=lua_toceuserdata(L, -1);
ri.Width:=f.ClientWidth;
ri.Height:=f.ClientHeight;
printwindow(f.handle, ri.Canvas.Handle, PW_CLIENTONLY);
end;
{$endif}
end;
function customform_dragNow(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
begin
result:=0;
{$ifdef windows}
f:=luaclass_getClassObject(L);
ReleaseCapture;
SendMessageA(f.Handle,WM_SYSCOMMAND,$F012,0);
{$endif}
end;
function customform_saveFormPosition(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
values: array of integer;
al: size_t;
i: integer;
begin
result:=0;
f:=luaclass_getClassObject(L);
if f.name='' then exit(0);
if (lua_gettop(L)>=1) and (lua_istable(L,1)) then
begin
al:=lua_objlen(L,1);
setlength(values, al);
for i:=1 to al do
begin
lua_pushinteger(L,i);
lua_gettable(L,1);
values[i-1]:=lua_tointeger(L,-1);
lua_pop(L,1);
end;
SaveFormPosition(f, values);
end
else
SaveFormPosition(f);
end;
function customform_loadFormPosition(L: Plua_State): integer; cdecl;
var
f: TCustomForm;
values: array of integer;
i: integer;
begin
result:=0;
f:=luaclass_getClassObject(L);
if f.name='' then exit(0);
setlength(values,0);
if LoadFormPosition(f, values) then
begin
lua_pushboolean(L, true);
if length(values)>0 then
begin
lua_createtable(L,length(values),0);
for i:=1 to length(values) do
begin
lua_pushinteger(L,i);
lua_pushinteger(L,values[i-1]);
lua_settable(L,-3);
end;
exit(2);
end
else
exit(1);
end
else
begin
lua_pushboolean(L,false);
exit(1);
end;
end;
function createFormFromFile(L: Plua_State): integer; cdecl;
var filename: string;
f: TCEForm;
begin
result:=0;
if lua_gettop(L)=1 then
begin
filename:=Lua_ToString(L, -1);
lua_pop(L, lua_gettop(L));
f:=TCEForm.Createnew(nil); //6.3: was application
f.LoadFromFile(filename);
luaclass_newClass(L, f);
result:=1;
end
else
lua_pop(L, lua_gettop(L));
end;
function ceform_saveToFile(L: Plua_State): integer; cdecl;
var parameters: integer;
f: TCEForm;
filename: string;
begin
result:=0;
f:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
begin
filename:=Lua_ToString(L, -1);
lua_pop(L, lua_gettop(L));
if (f is TCEForm) then
begin
try
f.SaveToFile(filename);
//no errors
lua_pushboolean(L, true);
result:=1;
except
on e: exception do
begin
lua_pushstring(L, e.Message);
lua_error(L);
end;
end;
end
else
raise exception.create(rsTheGivenFormIsNotCompatible+f.ClassName);
end
else
lua_pop(L, lua_gettop(L));
end;
function ceform_getDoNotSaveInTable(L: PLua_State): integer; cdecl;
var
form: Tceform;
begin
form:=luaclass_getClassObject(L);
lua_pushboolean(L, form.DoNotSaveInTable);
result:=1;
end;
function ceform_setDoNotSaveInTable(L: PLua_State): integer; cdecl;
var
form: Tceform;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
form.DoNotSaveInTable:=lua_toboolean(L,-1);
end;
function ceform_saveCurrentStateAsDesign(L: PLua_State): integer; cdecl;
var
form: Tceform;
begin
result:=0;
form:=luaclass_getClassObject(L);
form.SaveCurrentStateasDesign;
end;
function customform_getFormState(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
ti: PTypeInfo;
begin
form:=luaclass_getClassObject(L);
ti:=typeinfo(TFormState);
lua_pushstring(L, SetToString(ti, integer(form.FormState),true));
result:=1;
end;
function customform_getModalResult(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
begin
form:=luaclass_getClassObject(L);
lua_pushinteger(L, integer(form.ModalResult));
result:=1;
end;
function customform_setModalResult(L: PLua_State): integer; cdecl;
var
form: TCustomForm;
ModalResult: TModalResult;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)>=1 then
begin
ModalResult:=TModalResult(lua_tointeger(L,1));
form.ModalResult:=ModalResult;
end;
end;
function customform_unregisterCreateCallback(L: PLua_State): integer; cdecl;
var
lc: TLuacaller;
form: TCustomForm;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=lua_ToCEUserData(L, -1);
if lc<>nil then
form.RemoveHandlerCreate(lc.NotifyEvent);
lc.Free;
end;
end;
function customform_registerCreateCallback(L: PLua_State): integer; cdecl;
var lc: TLuaCaller;
f: integer;
routine: string;
form: TCustomForm;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=nil;
if lua_isfunction(L,-1) then
begin
f:=luaL_ref(L,LUA_REGISTRYINDEX);
lc:=TLuaCaller.create;
lc.luaroutineIndex:=f;
form.AddHandlerCreate(lc.NotifyEvent);
end
else
if lua_isstring(L,-1) then
begin
routine:=lua_tostring(L,-1);
lc:=TLuaCaller.create;
lc.luaroutine:=routine;
form.AddHandlerCreate(lc.NotifyEvent);
end;
luaclass_newClass(L, lc);
result:=1;
end;
end;
function customform_unregisterFirstShowCallback(L: PLua_State): integer; cdecl;
var
lc: TLuacaller;
form: TCustomForm;
m: TMethod;
nr: TNotifyEvent;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=lua_ToCEUserData(L, -1);
if lc<>nil then
begin
nr:=lc.NotifyEvent;
m:=Tmethod(nr);
if tobject(m.data) is TLuaCaller then
begin
form.RemoveHandlerFirstShow(nr);
lc.Free;
end;
end;
end;
end;
function customform_registerFirstShowCallback(L: PLua_State): integer; cdecl;
var lc: TLuaCaller;
f: integer;
routine: string;
form: TCustomForm;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=nil;
if lua_isfunction(L,-1) then
begin
f:=luaL_ref(L,LUA_REGISTRYINDEX);
lc:=TLuaCaller.create;
lc.luaroutineIndex:=f;
form.AddHandlerFirstShow(lc.NotifyEvent);
end
else
if lua_isstring(L,-1) then
begin
routine:=lua_tostring(L,-1);
lc:=TLuaCaller.create;
lc.luaroutine:=routine;
form.AddHandlerFirstShow(lc.NotifyEvent);
end;
luaclass_newClass(L, lc);
result:=1;
end;
end;
function customform_unregisterCloseCallback(L: PLua_State): integer; cdecl;
var
lc: TLuacaller;
form: TCustomForm;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=lua_ToCEUserData(L, -1);
if lc<>nil then
form.RemoveHandlerClose(lc.CloseEvent);
lc.Free;
end;
end;
function customform_registerCloseCallback(L: PLua_State): integer; cdecl;
var lc: TLuaCaller;
f: integer;
routine: string;
form: TCustomForm;
begin
result:=0;
form:=luaclass_getClassObject(L);
if lua_gettop(L)=1 then
begin
lc:=nil;
if lua_isfunction(L,-1) then
begin
f:=luaL_ref(L,LUA_REGISTRYINDEX);
lc:=TLuaCaller.create;
lc.luaroutineIndex:=f;
form.AddHandlerClose(lc.CloseEvent);
end
else
if lua_isstring(L,-1) then
begin
routine:=lua_tostring(L,-1);
lc:=TLuaCaller.create;
lc.luaroutine:=routine;
form.AddHandlerClose(lc.CloseEvent);
end;
luaclass_newClass(L, lc);
result:=1;
end;
end;
procedure customform_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
begin
customcontrol_addMetaData(L, metatable, userdata);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'centerScreen', customform_centerScreen);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setOnClose', customform_setOnClose);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getOnClose', customform_getOnClose);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'show', customform_show);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'hide', customform_hide);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'close', customform_close);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'bringToFront', customform_bringToFront);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'showModal', customform_showModal);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'isForegroundWindow', customform_isForegroundWindow);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getMenu', customform_getMenu);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setMenu', customform_setMenu);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getBorderStyle', customform_getBorderStyle);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setBorderStyle', customform_setBorderStyle);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'printToRasterImage', customform_printToRasterImage);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'dragNow', customform_dragNow);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'registerCreateCallback', customform_registerCreateCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'registerFirstShowCallback', customform_registerFirstShowCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'registerCloseCallback', customform_registerCloseCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'unregisterCreateCallback', customform_unregisterCreateCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'unregisterFirstShowCallback', customform_unregisterFirstShowCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'unregisterCloseCallback', customform_unregisterCloseCallback);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'saveFormPosition', customform_saveFormPosition);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'loadFormPosition', customform_loadFormPosition);
luaclass_addPropertyToTable(L, metatable, userdata, 'OnClose', customform_getOnClose, customform_setOnClose);
luaclass_addPropertyToTable(L, metatable, userdata, 'Menu', customform_getMenu, customform_setMenu);
luaclass_addPropertyToTable(L, metatable, userdata, 'ModalResult', customform_getModalResult, customform_setModalResult);
luaclass_addPropertyToTable(L, metatable, userdata, 'FormState', customform_getFormState, nil);
end;
procedure ceform_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
begin
customform_addMetaData(L, metatable, userdata);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'saveToFile', ceform_saveToFile);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setDoNotSaveInTable', ceform_setDoNotSaveInTable);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getDoNotSaveInTable', ceform_getDoNotSaveInTable);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'saveCurrentStateAsDesign', ceform_saveCurrentStateasDesign);
luaclass_addPropertyToTable(L, metatable, userdata, 'DoNotSaveInTable', ceform_getDoNotSaveInTable, ceform_setDoNotSaveInTable);
end;
procedure initializeLuaForm;
begin
lua_register(LuaVM, 'createForm', createForm);
lua_register(LuaVM, 'createFormFromFile', createFormFromFile);
lua_register(LuaVM, 'form_centerScreen', customform_centerScreen);
lua_register(LuaVM, 'form_onClose', customform_setOnClose);
lua_register(LuaVM, 'form_show', customform_show);
lua_register(LuaVM, 'form_hide', customform_hide);
lua_register(LuaVM, 'form_close', customform_close);
lua_register(LuaVM, 'form_showModal', customform_showModal);
lua_register(LuaVM, 'form_isForegroundWindow', customform_isForegroundWindow);
lua_register(LuaVM, 'form_getMenu', customform_getMenu);
lua_register(LuaVM, 'form_setMenu', customform_setMenu);
lua_register(LuaVM, 'form_saveToFile', ceform_saveToFile);
lua_register(LuaVM, 'form_setDoNotSaveInTable', ceform_setDoNotSaveInTable);
lua_register(LuaVM, 'form_getDoNotSaveInTable', ceform_getDoNotSaveInTable);
lua_register(LuaVM, 'form_printToRasterImage', customform_printToRasterImage);
lua_register(LuaVM, 'form_dragNow', customform_dragNow);
end;
initialization
luaclass_register(TCustomForm, customform_addMetaData);
luaclass_register(TCEForm, ceform_addMetaData);
end.
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/phy0292/cheat-engine.git
git@gitee.com:phy0292/cheat-engine.git
phy0292
cheat-engine
cheat-engine
master

搜索帮助