现有一需求:
某些控件,已动态生成,现需要用脚本编写这些控件的事件,并执行脚本
例如,有一动态生成的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实现控件事件的赋值,非常感谢啊!
某些控件,已动态生成,现需要用脚本编写这些控件的事件,并执行脚本
例如,有一动态生成的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实现控件事件的赋值,非常感谢啊!
用一个简单的文本,比如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;
首先可以确定一点你的 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 并执行相应的赋值操作。
不知道对你有没有帮助。也许是答非所问^_^ 就当帮你顶了。
要的是那种不用在窗口类里面声名的那种
也就是定义的这个事件能不能不用声名呢?脚本如下: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编译环境里编译成功,那么在脚本里也能编译成功
//问题就是如何给这个事件赋值
begin
if StrToInt(Trim(form1.edtage.text)) > 200 then
begin
Application.MessageBox('年龄输入有误!','提示');
form1.edtage.SetFocus;
end;
end;begin
Form1.EdtAge.OnExit:=@EdtAgeOnExit;//@符号是个关键
end.