| 图21.5显示了程序的输出(通过两个不同的浏览器创建两个会话期),程序还有一个复选框,用来激活计时器。听起来挺不可思议的,但实际上在IntraWeb程序中,计时器就和Windows中的计时器一样工作。当计时器的时间间隔到期时,相应的代码就会被执行。在网页中,这意味着触发JavaScript代码来刷新页面:
IWTIMER1=setTimeout(''''SubmitClick("IWTIMER1","", false)'''',5000);

图21.5、运行在两个不同浏览器中的IWSession例程
与WebBroker和WebSnap整合
到目前为止,只讲了如何创建stand-alone模式的IntraWeb应用程序。当你需要开发IIS或是Apache下的IntraWeb动态链接库时,情形也基本一样。但是,如果你想用IntraWeb技术来拓展已有的WebBroker(或是WebSnap)程序,情况就不一样了。
两种技术的桥梁是IWPageProducer组件。该组件像其他页生成器组件一样依附于WebBroker的action,同时可以使用一个特殊的事件来创建并获得一个IntraWeb窗体: procedure TWebModule1.IWPageProducer1GetForm(ASender: TIWPageProducer; AWebApplication: TIWApplication; var VForm: TIWPageForm); begin VForm := TformMain.Create(AWebApplication); end;
仅一行代码,就能实现IntraWeb页嵌入WebBroker程序,在例程CgiIntra中也是如此。IWModuleController对IntraWeb支持提供核心服务。每个IntraWeb项目都必须有这种组件才能正确地工作。
警告:Delphi7中发行的IntraWeb的IWModuleController组件和Delphi的Web App Debugger有冲突,但问题已经解决,可以免费更新。
这是例程的web module窗体摘要: object WebModule1: TWebModule1 Actions = < item Default = True Name = ''''WebActionItem1'''' PathInfo = ''''/show'''' OnAction = WebModule1WebActionItem1Action end item Name = ''''WebActionItem2'''' PathInfo = ''''/iwdemo'''' Producer = IWPageProducer1 end> object IWModuleController1: TIWModuleController object IWPageProducer1: TIWPageProducer OnGetForm = IWPageProducer1GetForm end end
因为这是一个页模式的CGI程序,所以没有会话期管理。此外,页面的组件状态不能像标准IntraWeb程序那样通过事件处理来自动更新。为了达到同样的效果,需要写一写特殊代码来进一步处理HTTP请求的参数。仅从这样一个简单例程就能看出页模式没有程序模式那么自动化,不过,页模式更灵活。尤其值得说的是,页模式给WebBroker和WebSnap程序增加了可视化设计的能力。
控制布局
例程CgiIntra还展示了另外一个非常有趣的IntraWeb技术:基于HTML的布局控制(页模式整合WebBroker和布局控制没有什么关系,因为在程序模式中也有布局控制,我只是为了省事才用一个例程来说明这两种技术的)。程序编译后的结果页面就是在设计时放到窗体上的一系列组件的映射,可以通过修改组件属性改变页面外观。一个页面上有很多内容,如文本框、按钮和图片等,这些内容如何分布,如何控制尺寸和位置?
解决的办法是使用IntraWeb的布局管理器。在IntraWeb程序中,总是要用到布局管理器。默认的布局管理器是IWLayoutMgrForm,另外两个是IWTemplateProcessorHTML和IWLayoutMgrHTML,前者使用外部的HTML模版文件,后者内嵌HTML。
IWLayoutMgrHTML组件包括一个功能强大的HTML编辑器,在这里你可以像放置普通HTML元素那样嵌入IntraWeb组件(在外部HTML编辑器里,你必须手动实现)。此外,当你从编辑器中选择一个IntraWeb组件时(双击IWLayoutMgrHTML组件即可启动该编辑器),你可以使用对象观察器来修改组件属性。如图21.6,IntraWeb的HTML布局编辑器是一个工具强大的可视化HTML编辑器,产生的HTML代码可以在另外一页看到(Source页)。

图21.6: IntraWeb的 HTML 布局编辑器
在产生的HTML代码中,定义了页的结构。组件是通过特殊标记:大括号来标识的,如下: <P> {%IWLabel1%} {%IWButton1%}</P>
提示:当你使用HTML时,组件就不使用绝对位置定位了,而是由HTML而定。因此,此时的窗体仅仅是个组件容器,因为窗体中组件的位置和大小被忽略了。
不管怎么说,布局管理器总是能够满足程序在浏览器中运行时的外观需求。
上一页 [1] [2] [3] |