这篇文章第一次出现在Delphi杂志 2004年2月 102期
原文见http://www.thedelphimagazine.com/Samples/1749/1749.htm
IntraWeb And ActiveForms
by Bob Swart
这篇文章,我示范使用2个强大的web技术,IntraWeb and ActiveForms,特别是把他们2个集中在一起使用会比单独使用会更好。
IntraWeb 5.1
IntraWeb5在Delphi7.0上是一个增强版本,实际上如果想改进Delphi 7 本身,最好还是使用AToZedSoftware的第三放控件IntraWeb。Early在2003年公布了5.1版本,最近有在2003年夏季发布了5.1.30版本,虽然在Delphi 7 上免费使用,但是还是在 努力的改进自己。现在的IntraWeb的版本已经发展到了 7.0,所以我必须在我的Delphi7.0上卸载5.1.30
下面是给开发者写的,我本人也同样使用delphi 7.0和IntraWeb,同时给我也给我的客户解决这样的一个问题,这个问题是属于web server程序的问题,我的解决方案是选用IntraWeb,这更使我坚定的写出这样的文章来。
The Browsers Problem(浏览器问题)
这个问题是我的客户在使用内部web浏览器时遇到的,和快速的使用客户端的资源。需要明确的是,这个web server程序不是不是远程访问或打印本地数据,也没有权限使用本地磁盘(查看ClientDataSet的例子可以满足你的要求),我的客户的特殊问题就是在受约束的客户端上打印,和不能在IntraWeb程序上找到自己想要的东西,这个IntraWeb运行在web server下,在浏览器下执行事件代码,web server是这样的。这个IntraWeb不能查看任何的客户端,幸运的是IntraWeb和ActiveX结合在一起就可以克服这个困难。在我的Delphi ActiveForm的例子里。
The Solution(解决方案)
长话短说:就是问了你的IntraWeb 和 ActiveForm允许通过IntraWeb web server程序来访问你的客户端。
注意,我是使用IntraWeb 5.1.30来完成这个事例,也许你也会同样的使用这个版本。开始一个新的IntraWeb程序,它是包含Data Module的,因为以后要使用database table使用standalone程序保存为IWX.dpr,你也可以选择你自己的文件名。
在这个IntraWeb程序上添加一个TTable并设置他的DatabaseName为DBDEMOS和TableName 为 biolife.db,然后编译一下工程。把BIOLIFE表里的这些字段(包括NOTES字段)送到到本地打印机,不使用浏览器有限的打印能力(它仅打印浏览器的范围而不能扩展)。
放上TDataSource控件连接上TTable,TIWDBGrid和TIWDBNavigator也放到这个IW 这个程序窗体上。然后连接TDataSource,最后放上TIWDBMemo连接TDataSource和Notes字段,应该象下图1,在窗体的底部留些位置,因为以后打印要打印整个完整的ActiveForm。
? 图1: IntraWeb Application Form.
The ActiveForm
现在让我们使用Delphi来设计ActiveForm,开始一个新的ActiveX Library工程(保存名称为IWAX42)),加入ActiveForm 类库.用向导创建ActiveX 类库. 指定IWActiveFormX 名称在ActiveForm里,然后选择ActiveX Control Options选项内容。
? 图 2: New ActiveForm.
在这个ActiveForm上放入2个Button:1个名称为设置,一个为打印。也得同样的选择TPrintDialog and TPrinterSetupDialog这2个控件。和一个TRichEdit控件(我们一会在演示这个,现在先使用‘preview’把窗体打印出来。)
把TRichEdit放在右边,把RichEdit随意的放在指定的ActiveForm在浏览器内,ActiveForm就完成了,你必须做象下面的IntraWeb窗体,如图3。
? Figure 3: ActiveForm Client Area.
现在实现那2个按钮的功能。清单1:
procedure TIWActiveFormX.btnSetupClick(Sender: TObject);
begin
PrinterSetupDialog1.Execute
end;
procedure TIWActiveFormX.btnPrintClick(Sender: TObject);
begin
if PrintDialog1.Execute then
RichEdit1.Print('IntraWeb ActiveX Demo')
end;
我们使用这个ActiveForm来连接本地资源,来打印,我们的IntraWeb application,RichEdit起到了缓冲作用,IntraWeb和RichEdit缺一不可的紧密联系起来。
代续