一个困扰很久的问题,一直没有解决
这个字符串可能是和对象有关也可能无关,如
s:='showmessage(''ok'')' 或
s:='button1.caption:=xx'
s:='button1.SetFoucs'
s:='with dbgrid1.columns.add do
    begin
      caption:=''abc'';
      fieldname:=''ccc'';
    end;';
如何在程序运行期执行这个字符串呢?
希望知道的朋友公布答案,感激不尽!

解决方案 »

  1.   

    一个最好的办法就是
    s := StringReplace(s,'''','',[rfReplaceaa]);
    这样你就把你的字符串还原成程序代码了
    不知道 
    这样楼主满不满意?
      

  2.   

    暈,有想法。如果StringReplace可以,那在運行時給個edit,寫不同代碼,執行不同代碼
      

  3.   

    用StringReplace后怎么能够执行呢?2楼的朋友误解意思了
    比如一个窗体上放一个TEdit,一个TButton,TEdit输入要执行的代码,按button执行edit中的代码
    Delphi 2009好象有反射机制可以实现,不过我不太明白,VB中可用ScriptControl来实现,换成delphi代码如下:
    use ComObj;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      v:Variant;
      dp:IDispatch;
    begin
      v:=CreateOleObject('ScriptControl');
      v.Language:='VBscript';
      //如可传递dp?把form1转成IDispatch?
      v.AddObject('form1',dp);
      v.ExecuteStatement(Edit1.Text);
      v:=Unassigned;
    end;
      

  4.   

    试一下PascalScript,不过也并不能尽如人意.
      

  5.   

    Pascal Script for Delphi
      

  6.   

    Pascal Script好象不行,他和对象无关的
      

  7.   

    突然想起,象一些报表控件FastReport,ReportBuilder都可自定义事件,这不就是在运行期执行字符串代码吗?
    可惜ReportBuilder没源码,得去好好读一读FastReport的源码了
      

  8.   

    FastReport读的累死,还没读出个所以来
    哪位高人来指点一下?
    TMS和JVCL能实现,不知有否这样的传说?