中国开发网: 论坛: 程序员情感CBD: 贴子 115217
haitao
【技术探讨:Delphi-脚本】利用pascal script(简称PS)的方法
昨晚3:00突发奇想:两种利用pascal script(简称PS)的方法:
1、从Form到界面都是用PS作,但是设计界面比较繁琐,不表
2、Form和PAS全部都是Delphi下作、写的,运行时,dfm被主控程序加载,pas(经过预处理)被主控程序作为PS程序(dfm原来的事件响应过程被预处理成一个个PS认同的独立的过程,执行时根据全局的信息每次只执行一个过程)加载
在dfm原来的事件统一交由主控程序的一个AllEventInOne过程来处理
(这里涉及2个问题:
a、加载dfm时,如何知道哪些事件是有响应过程的,哪些是没有的--好像dfm文件里本来有对应的信息,但是如果没有dfm对应的pas的编译后的代码,这个对应关系在加载时应该会被清空的吧;
b、各种事件的过程的参数各不相同,怎么能由一个过程来响应?)
AllEventInOne应该知道当前是作为哪个类、哪个对象、哪个事件来调用的,从而设置全局信息,再去调用那个PS程序
还有一个问题,就是:c、PS程序是否可以重入?如:主程序调用PS程序,PS程序执行主程序的某个过程,而这个过程又再去调用PS程序

如果可行,这种方式的运行效率可能会高很多,每个Form只要一个PS程序,一次解释,随便执行
而且很完备地保留了dfm/pas的对应关系--设计、开发均可以仍然使用Delphi,开发效率也会很高

从问题b来看,当初Delphi设计事件时,搞得响应过程的参数各不相同是失策的
应该使用这样统一的过程:
Procedure DoSomeEvent(const dataIn:TrecIn;var dataOut:TrecOut); //不用of object
TrecIn=Record
selfClass:事件触发者的类
selfForm:事件触发者所属的Form,可能冗余
selfObject:事件触发者(相当于Sender)
selfEvent:当前的事件(如单击还是双击)
Data:以XML或INI表达的其它所有必须的传入信息(如:按键的值、选中的Grid的位置等等)
End;
TrecOut=Record
Data:以XML或INI表达的过程所产生的所有的传出信息
End;
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录