最近,IntraWeb的新版本v.
在开发笔记(二)所说的JavaScript以及CSS在IntraWeb中的剖析与应用,已在我们的新书中予以细致地阐述,水平有限,但绝对是真诚的心得。希望能够得到大家的认可。
5.1的Beta测试版,已经在内部会员测试了很长时间,这次发布的v.5.1相比于v.5.0可以说有了某些特别引人注目的变化。像不能使用回退按钮的问题、像地址栏显示一长串命令字符的问题、像ActiveX的嵌入开发问题等,都得到了一定程度地解决,可能还有些瑕疵,不过进步还是相当大的。概括起来主要包括以下几大类:
功能方面的改进:执行的效率有了大幅度地提高;WYSIWYG(所见即所得)的HTML编辑器功能更丰富;新的更简单也更强大的Wizard;对浏览器中回退按钮的支持;使用Cookie替代URL来进行会话的跟踪,从而避免了那个长长的URL串;更多的控制选项;更多的客户定制事件。
浏览器方面的改进:一是改进了对Mozilla的支持;一是开始支持Opera。
对HTML.3.2的支持:可以使开发的程序运行在PDA一类的手持设备上。
文档方面的改进:较为完整的帮助文件,包括所有的组件及其属性、方法等;完整的操作手册,包括如何对应用程序进行移植及FAQ;新的演示程序。应该说这一部分,对开发人员来说比较重要,尽管还有不少不尽如人意的地方,但相较于以前是大大被增强了。
支持HTML4.0标准的组件:其中包括TIWCalendar(基本的日历组件)、TIWProgressBar(显示处理过程进度条组件)、 TIWURLWindow(嵌入IFRAME标记的组件)、TIWActiveX(嵌入处理ActiveX控件)、TIWDBRadioGroup(带数据敏感的收音按钮组件)、TIWImageList(图形列表控制)、TIWQuickTime(嵌入处理QuickTime影片)、TIWMPEG(嵌入处理MPEG影片)、TIWMenu(包括了许多新属性,大家可以试着编译一下其自带的Features演示程序,其主控模块即主要用了一个TIWMenu)、TIWTreeView(树形控件做了较多的修改,并增添了一些新特性)。
支持HTML3.2标准的组件:主要包括:TIWLabel32(标签控制)、TIWEdit32(编辑框)、TIWButton32(按钮)、TIWList32(HTML列表)、TIWHRule32(HTML水平标尺)、TIWListBox32(列表框)、TIWComboBox32(组合框)、TIWRadioGroup32(收音按钮)、TIWImage32(图像控制)、TIWImageFile32(图像文件控制)、TIWURL32(链接控制)、TIWGrid32(表格控件)、TIWMemo32 (HTML中的文本区域控制,亦即备注控件)、TIWText32(文本控件)、TIWRectangle32(矩形控件)、TIWCheckBox32(检查框)、 TIWHyperLink32(链接控件)、TIWDBEdit32(数据敏感编辑框)、TIWDBCheckBox32(数据敏感检查框)、TIWDBComboBox32(数据敏感组件框)、TIWDBLabel32(数据敏感标签控件)、TIWDBListBox32(数据敏感列表框)、TIWDBLookupComboBox32(数据敏感预览组件框)、TIWDBLookupListBox32(数据敏感预览列表框)、TIWDBMemo32(数据敏感备注控件)、TIWDBText32(数据敏感文本控件)、TIWDBImage32(数据敏感图像控件)、TIWDBRadioGroup32(数据敏感收音按钮控件)、TIWTemplateProcessorHTML32(模板处理控件)、TIWPageProducer32(页处理模式下为WebSnap所用的页面生成器控件)、TIWLayoutMgrHTML32(HTML布局设计管理器)。所有支持HTML3.2标准的组件在其右上角均带有红色的“IW”标记,而标准的HTML组件,仍旧是青色的“IW”标志,很容易区分的。
IntraWeb标准控件组(支持HTML3.2标准)
IntraWeb标准控件组(支持HTML3.2标准)
上面已经说过,5.1版本的Wizard相较于过去有了一些变化。下面来简单地看一下:
点击“IntraWeb Application Wizard”,哈哈,原来复杂的东西在这里:
5.1版本的Wizard将原来的内容进行了归类,左侧是应用程序的类型,分为:标准应用程序、服务程序性质的应用、ISAPI应用、支支持Apache1.x、2.x环境的共享模块共五大类,右侧的可选项包括:是否建立数据模块、是否创建用户Session、是否以HTML3.2标准创建主窗体(可以支持PDA应用)等三项内容。主要的变化是用户Session和HTML3.2标准的支持,其他的东西基本上都差不多。 点击“Create New Form”,也弹出一个对话框,包括: 像5.0版本一样,一个是Application Form,一个是Page Form,应用于两种不同的开发模式(在前面的笔记中已经说得很清楚了),同“Create New Application Wizard”一样,也可能以支持HTML3.2标准,用于支持PDA等掌上应用。 总的从第一印象上看,分类更加细致,开发人员应用起来要方便得多了。 15、转换老版本应注意的几个问题 如果将过去的应用程序转换到5.1版本下运行,要涉及到几个需要修改的地方。 1、TIWImage组件 UseBorder属性已经为BorderOptions属性所代替。 2、 RWebApplication RWebApplication在5.1版本中可以视同于WebApplication。 3、Project文件的变化 在5.1版本中,工程文件有了新的格式。标准调试可执行文件现在从标准服务程序工程组中分离出来。用Guess演示程序来看,一个新的标准应用文件如下所示: program Guess; 当转换成服务类型的应用程序时,需要在DPR文件的uses子句中加入IWInitService,替换后的代码应如下所示: program GuessService; ISAPI和DSO工程文件可能会是如下的样子(DPR file): library GuessDLL; 如果在为Apache2.0环境编译文件,需要确认是否在uses子句包含了IWInitApacheTwo单元。如果是使用向导来创建的Apache2.0的应用,该单元会自动被包含的。需要注意的是:为了使应用模块能否在Apache2.0环境下很好的工作,应当注意Delphi7 VCL控件的最新改动,可以通过Borland Community网站来获取这些最新的更改。 4、对主窗体和Server Controller的改变 对所有不同类型的工程文件(包括标准应用、ISAPI、DSO、服务应用),有两个初始化片段是必须要增加的。第一个地方是MainForm,以指明哪个窗体是主窗体。还是以Guess工程文件为例,需要在代码结束之前,加上以下的初始化语句: initialization SetAsMainForm是TIWForm的一个过程,当工程文件可以同时支持HTML4.0标准和PDA(即HTML3.2)标准时,必须有一个初始化片段来指明主窗体。 另外一个初始化的地方就是Server Controller。它都通常如下所示: initialization 5、 OnNewSession的变化 OnNewSession事件句柄在说明文件中有些改变,新的定义为: OnNewSession(ASession: TIWApplication; var VMainForm: TIWBaseForm); 如果从以前的版本进行转换的话,须确认在ServerController的uses子句是包括IWBaseForm和IWBaseControl两个单元。 6、Session和DataModule的拥有者 在以前的版本中(5.1之前),Session的拥有者是ASession,DataModule的拥有者为AOwner。而在5.1版本中,Session已变为nil,而DataModule为Self。 7、窗体中起冲突的那些属性 当打开一个5.1版本之前的的工程文件时,由于窗体中的好多属性已被重新定义过,可能会引起一些冲突,只需要重新编译文件之彰忽略那些不存在的属性即可。 8、模板处理器的变化 其已经更名为LayoutMgr(外观管理器?),如果在窗体中使用到了TemplateProcessor,应该对其重新进行命名。
uses
Forms,
IWMain,
Main in 'Main.pas' {formMain: TIWFormModuleBase},
ServerController in 'ServerController.pas' {IWServerController:
TDataModule};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TFormIWMain, formIWMain);
Application.Run;
end.
uses
IWInitService,
Main in 'Main.pas' {formMain: TIWFormModuleBase},
ServerController in 'ServerController.pas' {IWServerController:
TDataModule};
{$R *.res}
begin
IWRun;
end.
uses
IWInitISAPI,
Main in 'Main.pas' {formMain: TIWFormModuleBase},
ServerController in 'ServerController.pas' {IWServerController:
TDataModule};
{$R *.RES}
begin
IWRun;
end.
library GuessDSO;
uses
ApacheApp,
IWInitApache,
ServerController in 'ServerController.pas' {IWServerController:
TIWServerControllerBase},
Main in 'Main.pas' {formMain: TIWFormModuleBase};
{$R *.res}
exports
apache_module name 'GuessDSO_module';
begin
IWRun;
end.
TformMain.SetAsMainForm;
TIWServerController.SetServerControllerClass;