使用 IntraWeb (2) - Hello IntraWeb

IntraWeb 比我相像中的更贴近 VCL, 传统的非可视组件在这里大都可用(其内部很多复合属性是 TStringList 类型的), 它的诸多可视控件也是从 TControl 继承下来的.
这或许是它曾被改名为 VCL For Web 的原因.

建立测试工程时, 一般要使用 StandAlone Application, 这方便调试; 具体发布时只需稍稍修改.



我建立了一个交 MyTest1 的工程, 自动生成的主要文件有: MyTest1.dpr、ServerController.pas、UserSessionUnit.pas、Unit1.pas

MyTest1.dpr




 
program MyTest1; uses   IWRtlFix,   Forms,   IWStart,   UTF8ContentParser,   Unit1 in 'Unit1.pas' {IWForm2: TIWAppForm},   ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},   UserSessionUnit in 'UserSessionUnit.pas' {IWUserSession: TIWUserSessionBase}; {$R *.res} begin   TIWStart.Execute(True); end. {注释} IWRtlFix          //它没有公开任何功能 Forms            //还是以前的那个 Forms, 现在叫 Vcl.Forms 了  IWStart          //一个 StandAlone 应用是它启动的, 主要提供 Execute 这个 Class 方法 UTF8ContentParser //但愿有了它, IW 不再有乱码的问题 Unit1            // ServerController  //这才是 IntraWeb 工程的核心单元, 每个工程都会在该单元自动建立一个(只有一个) Server Controller 对象, 这个对象统管所有(包括 Session) UserSessionUnit  //该单元主要维护一个 Session 数据对象, 并提供给 ServerController 使用 //这里的代码是自动维护的; 只有在修改发布模式时, 才会来这里做简单的修改(譬如把 program MyTest1 改为 library MyTest1) 


UserSessionUnit.pas




 
unit UserSessionUnit; interface uses   IWUserSessionBase, SysUtils, Classes; type   TIWUserSession = class(TIWUserSessionBase)   private   public   end; implementation {$R *.dfm} end. {注释} //该单元目前只有一个空的 TIWUserSession, 但也已被 ServerController 单元 uses 并使用 //不同的网站程序对用户信息的需求可能不一样(譬如: 登陆信息、购物车信息等等), 我们可以在这里定义需要的数据格式; 因为灵活性很大, 所以关于 Session 的方便操作也是 IW 在宣传时首先要吹嘘的 //在它的窗体上可以放置非可视控件 //TIWUserSessionBase 的父类是我们熟悉的 TDataModule, 所以我说这是 Session 相关的数据模块. 


ServerController.pas




 
unit ServerController; interface uses   SysUtils, Classes, IWServerControllerBase, IWBaseForm, HTTPApp,   // For OnNewSession Event   UserSessionUnit, IWApplication, IWAppForm, IW.Browser.Browser; type   TIWServerController = class(TIWServerControllerBase)     procedure IWServerControllerBaseNewSession(ASession: TIWApplication); //TIWServerControllerBase 的 OnNewSession 事件; 在初始化阶段, 该事件就执行了   private   public   end; {下面两个函数类似 Printer(Printers.pas), Clipboard(Clipbrd.pas), 可以让我非常方便地使用最常用的对象; 但要使用它们需 uses ServerController} function UserSession: TIWUserSession;            // function IWServerController: TIWServerController; //也常常会使用 gServerController、gSC 代替它 implementation {$R *.dfm} uses   IWInit, IWGlobal; //IWInit  提供了 WebApplication (类型是 TIWApplication), 从名字上就能感受到它的重要性                     //LWGlobal 提供了 gServerController(可以简写为 gSC) function IWServerController: TIWServerController; begin   Result := TIWServerController(GServerController); //GServerController = IWGlobal.gServerController; 在这之前它已建立, 这里只是返回一下 end; function UserSession: TIWUserSession; begin   Result := TIWUserSession(WebApplication.Data); //TIWApplication.Data 专门用于存储 Session 数据 end; {OnNewSession} procedure TIWServerController.IWServerControllerBaseNewSession(ASession: TIWApplication); begin   ASession.Data := TIWUserSession.Create(nil, ASession); //从其参数的命名上可以看出 Session 在 TIWApplication 心中的地位; 每个用户都有一个 TIWApplication 实例, 它还有更多功能 end; initialization TIWServerController.SetServerControllerClass; //这是 TIWServerControllerBase 提供的 Class 方法; 它应该是做了一些必要的初始化工作, 但没有源码看不到. end. //在它的窗体上可以放置非可视控件 


Hello IntraWeb


先在 Unit1 的窗体上放三个控件:
IWLabel1;
IWButton1, 并激活其 OnClick 事件;
IWButton2, 并激活其 OnAsyncClick 事件.




 
{代码} procedure TIWForm2.IWButton1Click(Sender: TObject); begin   IWLabel1.Caption := 'Hello IntraWeb - OnClick'; //这是全页面刷新的, 会看到 Loading 图标 end; procedure TIWForm2.IWButton2AsyncClick(Sender: TObject; EventParams: TStringList); //通过 AJAX 技术进行局部刷新 begin   IWLabel1.Caption := 'Hello IntraWeb - OnAsyncClick'; //这是局部刷新的 end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Intraweb 12.2.12.1两个期待已久的新特征 打开Atozed官方BLOG, http://www.atozed.com/IntraWeb/Blog/index.EN.aspx 我们看到如下消息: XII - New production release 12.2.12.1 12/13/2012 After a few weeks, IntraWeb version 12.2.12.1 was promoted to production status. Click here to be redirected to the download page. Version history Check what has changed / what´s new in IW XII 新的12.2.12版带给我们什么新东西呢?相对于12.2.8是一个大的升级,我这里给大家介绍两个期待已久的特征: 1.TServerController/TIWAppForm增加DocType属性,有什么用?太有用了!如果我们的网站只为IE准备,这个属性没用。大家都知道,这两年,IE的市场占有率正在大幅度下降,Chrome正在快速崛起。要让你的网站在不同的浏览器上有相同的外观,就靠这个属性。这个属性代表Intraweb吹响了 HTML 5 的号角。这个属性的设置会立即影响你的网页的外观,浏览器正是根据网页的这个属性来决定如何解析你的网页内容。默认情况下,这个属性是空着的,也就是保留过去的解析方式。如果是新项目,我建议你毫不犹豫的将这个属性设置为:<!DOCTYPE html>,即HTML 5标准。 2.库文件中提供IWData_debug.res.这是什么东西?这是一把“钥匙”。如果你是一个真正做技术的,你想做一个把Intraweb彻底搞懂,彻底摸清,将Intraweb提供的功能发挥到极致的“大牛”,这是一把开启IW后院的钥匙。打开这个文件(或用FireBug)看吧,原汁原味的,语意清晰,还带注释的Javascript源代码,你再也没有以前分析IWData.res的时候到处去搜寻Javascript的Refactor工具的必要了。阅读这些代码带给你的乐趣将远远超过读一本侦探小说。我想,Atozed一定很纠结,这毕竟是自己积累多年的劳动成果,就这么轻易的公开吗?面对jQuery等网页技术的异军突起,Atozed最终决定变得厚道一点。再好的东西,老放在那里,总会有别的东西来替代,大家看看jQuery阵营的Flexigrid与IWDBGrid差距多远,就知道Atozed此举算是明智。幸运的是,Intraweb意识到开放的必要,公布了后台的源代码,就有了改造Intraweb的可能,你觉得那个地方不够理想,自己改!就像改装你的爱车,其乐无穷。 安装方法请翻阅2ccc.com上的帖子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值