使用 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;





使用
IntraWeb (2) - Hello IntraWeb,布布扣,bubuko.com

使用
IntraWeb (2) - Hello IntraWeb

时间: 2024-10-26 14:20:34

使用 IntraWeb (2) - Hello IntraWeb的相关文章

Delphi XE7 开发ActiveX 及在IntraWeb下调试

最近学习DelphiXE7下Intraweb开发,Intraweb完全服务器端运行使得FastReport报表系统无法在客户端运行,当然网上也有一大堆解决方案,例如导出到PDF后,给出连接,让客户点击下载等,个人感觉不完美.由于我做的B/S系统主要运行在windows平台,所以还是考虑ActiveX插件,来的直观.一.DelphiXE7下 ActiveX开发 1.new-other-打开窗口,选择ActiveX Library,点击OK按钮 2.出现这样一个界面,此时Delphi建立一个无窗口的

使用 IntraWeb (31) - IntraWeb 的 Xml 操作使用的是 NativeXml

在 IWNativeXml 单元. 知道了这个, 以后在其他 Delphi 程序中也可以直接 Uses IWNativeXml 了. TNativeXml (IWNativeXml.TNativeXml property AbortParsing: Boolean property BinaryEncoding: TBinaryEncodingType property CommentString: UTF8String property DropCommentsOnParse: Boolean

使用delphi+intraweb进行微信开发2—intraweb以.net方式发布(以asp.net mvc4模式部署)在IIS(.net虚拟主机)上

在第一讲使用delphi+intraweb进行微信开发1--微信平台接入中我们编写了一个简单的微信接口程序,这个程序我是用Stand Alone Server / Service 方式编译的程序,并且将端口设置成80进行的微信接口测试,但是实际使用时为了更好的服务器性能我们一般采用iis作为web服务器,以往的情况下iw需要编译成isapi部署在iis上.但是由于自打iis7以后iis对isapi的态度发生了很大变化(推荐使用fastcgi了)导致编译好的isapi很难在iis7.5上部署成功,

关于INTRAWEB ISAPI DLL发布

DELPHI XE7自带的INTRAWEB 14开发的EXE程序不能在IE 11浏览器里面运行,不兼容,同一个程序在CHROME里面却运行正常. 编译的ISAPI程序,在两种浏览器里都不能执行,在IIS管理器的设置正确的前提下. 看来INTRAWEB程序的发布兼容何种浏览器的何种版本是一个大问题. 怎样将Stand Alone App变为ISAPI Dll? 一是将工程文件中的program改成library,二是将uses里的IWInitStandAlone改成IWInitISAPI,没有该文

使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm

窗体 TIWAppForm 所在单元及继承链: IWAppForm.TIWAppForm 主要成员: property OnURLRequest: TOnURLRequest //响应下面的 DoURLRequest 方法 procedure DoURLRequest(aRequest: THttpRequest) //执行 OnURLRequest 事件; 如: DoURLRequest(WebApplication.Request); function MessageForm: TIWMes

使用 IntraWeb (28) - 基本控件之 TIWTemplateProcessorHTML、TIWLayoutMgrHTML、TIWLayoutMgrForm

TIWTemplateProcessorHTML //使用外部的 html 文件做模板 TIWLayoutMgrHTML //直接输入 Html 文本做模板 TIWLayoutMgrForm //这应该只是内部使用的东西, 对用户没有意义 {需要把它们关联到窗体的 LayoutMgr 属性; 主模板需要通过 IWServerController.MasterTemplate 指定} TIWTemplateProcessorHTML 所在单元及继承链: IWTemplateProcessorHTM

使用 IntraWeb (26) - 基本控件之 TIWMenu

TIWMenu 的任务是让原来的 TMainMenu 呈现在网页上, 通过其 AttachedMenu 属性关联一个 TMainMenu 是必需的. TIWMenu 所在单元及继承链: IWCompMenu.TIWMenu 主要成员: property TextOffset: Integer //菜单文本偏移(只读) property AttachedMenu: TMainMenu //指定要包装的 TMainMenu property ItemSpacing: TIWSpaceItems //

使用 IntraWeb (13) - 基本控件之 TIWLabel、TIWLink、TIWURL、TIWURLWindow

TIWLabel    // TIWLink      //内部链接 TIWURL      //外部链接 TIWURLWindow //页内框架, 就是 <iframe></iframe> TIWLabel 所在单元及继承链:IWCompLabel.TIWLabel < TIWCustomLabel < TIWCustomControl < TIWBaseHTMLControl < TIWBaseControl < TIWVCLBaseControl

使用 IntraWeb (9) - JavaScript

IW 依赖 js 构建(我数了数, 在当前版本它的资源文件默认携带了 26 个 js); 但 IW 尽可能地让用户少用或不用 js, 但如果你对 js 也不陌生, IW 提供了多种途径与方便. 我给它分两大类:1.直接写入 js 代码(站点级.页面级, 还可以精确地指定插入位置); 2.链接 *.js 文件(外链.内链, 还可以是资源文件). 首先应该说明: IW 已经霸占了 window.onload, 用户在 js 中不能再使用 onload. 如果你有一个 js 文件或模板没有如期运作,