比如我想把按钮的所有属性包括事件都放到数据库,然后从数据库获取,动态创建按钮,按钮属性等可以从数据库获取创建但是按钮事件 怎么动态创建呢?有什么方式 可以把下面的代码保存到数据
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('OK');
end; 然后创建按钮时,动态解析出来?
RTTI 看过 好像不能动态解析事件代码
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('OK');
end; 然后创建按钮时,动态解析出来?
RTTI 看过 好像不能动态解析事件代码
如果有10个按钮的话 公共按钮方法 得 if else 好几次
不过可以用比较笨的办法,
比如:创建按钮的其他属性都放到数据库,如:宽高等,另外加标识记录click事件
过程直接在程序里写出来,
赋值的时候判断:
case 标识 of
0:button.onclick := 过程0;
1:button.onclick := 过程1;
end;
如果你想把代码都放到数据库,那可能不是一般的麻烦,需要考虑编译的问题吧。
直接把 string'过程1' 转换为 过程名称 过程1string1:='过程1' ;
procedure1:=Object(string1) 转换 ?button.onclick:= procedure1;
procedure1:=Object(string1) 转换 ?button.onclick:= procedure1;
这样就可以自动根据名称 匹配过程名称 不用case 或者 if else
不知道怎么转换不过,这个不是很重要吧?case或者if也没有多麻烦function Fun_RstPro(AIndex:integer):TNotifyEvent
begin
case AIndex of
0: result := 过程0;
1:result := 过程1;
end;
或者
function Fun_RstPro(AProName:string):TNotifyEvent
begin
if AProName = '过程0' then result := 过程0;
if AProName = '过程1' then result := 过程1;
end;你使用的时候只要 button1.onclick := Fun_RstPro('过程0');
或者 button1.onclick := Fun_RstPro(0);
就好了啊,多写不了几句代码
我想做的是 可以容易自定义二次开发, 像 fastreport那样二次开发时, 在界面 加个按钮 也可以加个事件不用编译源程序
动态使用脚本需要使用像 TMS 的scripterStudio 或 PaxScripter 这样的控件
自己做难度是相当大的
我安装的TMS 怎么没有scripterStudio呢?安装了PaxScripter ,运行他的demo,可提示 File not found: 'BASE_PARSER.dcu'