比如我想把按钮的所有属性包括事件都放到数据库,然后从数据库获取,动态创建按钮,按钮属性等可以从数据库获取创建但是按钮事件 怎么动态创建呢?有什么方式 可以把下面的代码保存到数据
procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage('OK');
end; 然后创建按钮时,动态解析出来?
RTTI 看过 好像不能动态解析事件代码

解决方案 »

  1.   

    有没有办法代码写到数据库,  使用的时候 再解析出来不用在界面 if  else  呢?
    如果有10个按钮的话 公共按钮方法 得 if  else 好几次
      

  2.   

    方法体直接写到数据库,这种事情没遇到过,
    不过可以用比较笨的办法,
    比如:创建按钮的其他属性都放到数据库,如:宽高等,另外加标识记录click事件
    过程直接在程序里写出来,
    赋值的时候判断:
    case 标识 of
    0:button.onclick := 过程0;
    1:button.onclick := 过程1;
    end;
    如果你想把代码都放到数据库,那可能不是一般的麻烦,需要考虑编译的问题吧。
      

  3.   

    那有没有办法 不用case
    直接把 string'过程1' 转换为  过程名称 过程1string1:='过程1' ;
    procedure1:=Object(string1) 转换 ?button.onclick:= procedure1;
      

  4.   

    上面应该是string1:='procedure1' ;
    procedure1:=Object(string1) 转换 ?button.onclick:= procedure1;
    这样就可以自动根据名称 匹配过程名称   不用case 或者 if else 
      

  5.   

    。。
    不知道怎么转换不过,这个不是很重要吧?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);
    就好了啊,多写不了几句代码
      

  6.   


    我想做的是 可以容易自定义二次开发, 像 fastreport那样二次开发时, 在界面 加个按钮 也可以加个事件不用编译源程序
      

  7.   

    控件对象使用流保存到数据库中,使用时创建后再从数据库的流中读出来
    动态使用脚本需要使用像 TMS 的scripterStudio 或 PaxScripter 这样的控件
    自己做难度是相当大的
      

  8.   

    还不如存到DLL或其他的文件里。
      

  9.   


    我安装的TMS 怎么没有scripterStudio呢?安装了PaxScripter ,运行他的demo,可提示 File not found: 'BASE_PARSER.dcu'