现有一需求:
某些控件,已动态生成,现需要用脚本编写这些控件的事件,并执行脚本
例如,有一动态生成的EDIT控件,我要在其ONEXIT事件里面作某些控制
if trim(edit1.text) = '' then 
begin
  showmessage('请输入');
  edit1.setfocus;
end;如果不用脚本,可以这样实现:先定义一个这样的过程
比如
procedure EdtONExit(Sender: TObject);
begin
  if trim((Sender as TEdit).text) = '' then 
  begin
  showmessage('请输入');
  (Sender as TEdit).setfocus;
  end;  
end;然后在界面初始的时候,将控件事件赋值edit1.onexit := edtOnexit;现想用脚本实现,
只要能将其控件的事件赋值就行,
知道的请告知如何用fastscript实现控件事件的赋值,非常感谢啊!

解决方案 »

  1.   

    哈哈,我来帮你顶下。
    用一个简单的文本,比如ini分件,保存你的配置信息。
    然后,用类似如下的代码。--呵呵,不知道是不是这个意思。
    procedure TFmain.LoadFormInfo;
    var
      myIni: TIniFile;
      comName:string;//窗体内的组件名称
      i:integer;
    begin
      //读入配置信息
      myIni:=nil;
      try
        myIni := TIniFile.Create('.\form.ini');//调用的文件名
        for i:=0 to self.ComponentCount - 1 do
        begin
          comName:=self.Components[i].Name;
          if myIni.SectionExists(comName) then
          begin
            //if self.Components[i] is TSpeedButton then showmessage('dd');
            with TWinControl(self.Components[i]) do
            begin          Top:=MyIni.ReadInteger(comName, 'Top', 0);//取得Top
              Left:=MyIni.ReadInteger(comName, 'Left', 0);//取得left
              width:=MyIni.ReadInteger(comName, 'width', 0);//取得width
              height:=MyIni.ReadInteger(comName, 'height', 0);//取得width
            end;//with
          end;//if    end;//for i
      finally
        myIni.Free;
      end;//tryend;
      

  2.   

    终于有人up了,感动………………很感谢lovefox_zoe(爱情狐狸) ,不过你帖的不是我想要的
      

  3.   

    fastscript 没有用过,不过我到是有个方法可以实现你的东东,
    首先可以确定一点你的 Edit 也好 Button 也好,其它什么控件也好,可能在某个控件的某的事件里面都要写一些相关的代码,可能是校验,如: XXX<>XXX 则 xxx.Setfocus 
    这类东西建议你事先在程序里面定义好。
    如 EditOnExit1、EditOnExit2、EditOnExit3 可能这三个过程都是负责校验的,但要检验不同的东西。
    再在程序外部写 Ini 例如: 
    [Interface1]
    Edit1OnExit=EditOnExit1
    Edit2OnExit=EditOnExit2;
    Edit3OnExit=EditOnExit3;
    [Interface2]
    EditAOnExit=EditOnExit1
    EditBOnExit=EditOnExit2;
    EditCOnExit=EditOnExit3;在程序中解释 Ini 并执行相应的赋值操作。
    不知道对你有没有帮助。也许是答非所问^_^ 就当帮你顶了。
      

  4.   

    首先非常感谢上面的兄弟那有人告诉我怎样动态给事件赋值吗?
    要的是那种不用在窗口类里面声名的那种
    也就是定义的这个事件能不能不用声名呢?脚本如下:procedure EdtAgeOnExit(Sender: TObject); 
    begin
     if StrToInt(Trim((Sender as TEdit).text)) > 200 then
      begin
        Application.MessageBox('年龄输入有误!','提示');
        (Sender as TEdit).SetFocus;
      end;
    end;begin
    Form1.EdtAge.OnExit:=EdtAgeOnExit;
    end.//如果这段代码能在delphi编译环境里编译成功,那么在脚本里也能编译成功
    //问题就是如何给这个事件赋值
      

  5.   

    是你的脚本有问题改成这样试试procedure EdtAgeOnExit(Sender: TObject); 
    begin
     if StrToInt(Trim(form1.edtage.text)) > 200 then
      begin
        Application.MessageBox('年龄输入有误!','提示');
        form1.edtage.SetFocus;
      end;
    end;begin
    Form1.EdtAge.OnExit:=@EdtAgeOnExit;//@符号是个关键
    end.