IntraWebAndActiveForms
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 这个程序窗体上。然后连接 T DataSource, 最后放上 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 缺一不可的紧密联系起来。
代续