使用 IntraWeb (45) - 活用 IntraWeb

82 篇文章 1 订阅

使用 IntraWeb (45) - 活用 IntraWeb


asp.net 刚开始时, 也是拖拉控件, 但后来有了 MVC、xNext.

换个思路使用 IntraWeb 吧:
界面全部用 html+js+css 实现(有些会是用 Delphi 动态生成), 然后用 js 通过 Ajax 调用 Delphi 的方法.

测试程序要使用的模板 IWForm1.html:


1、在程序所在目录建立 Templates 文件夹, 把 IWForm1.html 放其中.
2、在程序所在目录建立 wwwroot 文件夹, 把模板中用到的 IWForm1.js 和 IWForm1.css 放其中.
3、其中的 AjaxFun1() 方法是在 IWForm1.js 中实现的; 这里两次调用参数分别是 1、2
4、{%IWLabel1%} 中的 IWLabel1 是在 Delphi 中添加的控件, 它用来返回数据结果.

IWForm1.js:


1、executeAjaxEvent 或 processAjaxEven 方法是 IntraWeb 内置的 IWLib.js 提供的; 其第三个参数决定了它将调用 Delphi 中的 IWCallBack1 方法.
2、Delphi 收到的参数将是一个 TStringList, 上面的 n 是将要传递的参数, x 是随意命名的参数标示.


IWForm1.css:


这是随意定义的; IWLABEL1 对应的是在 Delphi 添加的 IWLabel1.

//在新建 IW 主窗体上放置 IWTemplateProcessorHTML1、IWLabel1 两个控件.

unit Unit1;

interface

uses
  Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWVCLComponent, IWBaseLayoutComponent, IWBaseContainerLayout, IWContainerLayout,
  IWTemplateProcessorHTML, IWCompLabel, Vcl.Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton, IWCompEdit;

type
  TIWForm1 = class(TIWAppForm)
    IWLabel1: TIWLabel;
    IWTemplateProcessorHTML1: TIWTemplateProcessorHTML;
    procedure IWAppFormCreate(Sender: TObject);
  public
    procedure DoCallBack1(EventParams: TStringList); //这是 IWForm1.js 将要调用的方法; 下面还需要通过 WebApplication.RegisterCallBack 注册一下
  end;

implementation

{$R *.dfm}

uses IW.Common.AppInfo; //获取路径需要

var gPath: string;

procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  LayoutMgr := IWTemplateProcessorHTML1;          //关联模板(IWForm1.html) 
  IWTemplateProcessorHTML1.RenderStyles := False; //禁用 IW 的样式设置

  WebApplication.RegisterCallBack('IWCallBack1', DoCallBack1); //注册回调; js 将通过指定名称("IWCallBack1")调用这里的 DoCallBack1 方法

  gPath := TIWAppInfo.GetAppPath + 'Data.txt'; //用于测试文件的路径

  if not FileExists(gPath) then //初始化测试文件
  begin
    with TStringList.Create do begin
      Add(DateTimeToStr(Now));
      SaveToFile(gPath, TEncoding.UTF8);
      Free;
    end;
  end;

  IWLabel1.RawText := True; //指定以 Html 的方式呈现其内容; 具有 RawText 属性的几个控件中, 发现 IWLabel1 最灵活.
  IWLabel1.StyleRenderOptions.RenderSize := False;     //既然前面已经指定了 IWTemplateProcessorHTML1.RenderStyles := False; 下面这些就应该不需要了, 但在 IE 下不行
  IWLabel1.StyleRenderOptions.RenderPosition := False;
  IWLabel1.StyleRenderOptions.RenderFont := False;
  IWLabel1.StyleRenderOptions.RenderZIndex := False;
  IWLabel1.StyleRenderOptions.RenderVisibility := False;
  IWLabel1.StyleRenderOptions.RenderStatus := False;
  IWLabel1.StyleRenderOptions.RenderAbsolute := False;
  IWLabel1.StyleRenderOptions.RenderPadding := False;
  IWLabel1.StyleRenderOptions.RenderBorder := False;
end;

procedure TIWForm1.DoCallBack1(EventParams: TStringList);
var
  List: TStringList;
  x: Integer;
begin
  x := EventParams.Values['x'].ToInteger; //获取 js 传来的参数

  List := TStringList.Create;
  List.LoadFromFile(gPath, TEncoding.UTF8);

  case x of
    1: List.Add(DateTimeToStr(Now));          //参数是 1 表示添加
    2: if List.Count > 0 then List.Delete(0); //参数是 2 表示删除
  end;

  IWLabel1.Text := List.Text.Replace(sLineBreak, '<br/>'); //呈现; 

  List.SaveToFile(gPath, TEncoding.UTF8);
  List.Free;
end;

initialization
  TIWForm1.SetAsMainForm;

end.


思路很简单, 在实践中可能会碰到一些小问题, 譬如:
1、如果真传到服务器, 那个 Data.txt 修改其属性为可写;
2、通过 executeAjaxEvent 传递中文参数时, 我在本机没发现问题, 但传到服务器不行了, 最后自己写了一个编码(js)、解码(Delphi)函数; 如果你需要可以告诉我.
不过都是小问题.

测试源文件(IW_MVC_Test.rar), 传到 "intraweb交流群 319037363" 了; 欢迎指正!

2
0
« 上一篇: 使用 IntraWeb (44) - 测试读取 SqLite (三)
» 下一篇: 高亮 TRichEdit 当前行
posted on 2014-09-17 18:57 万一 阅读( 5828) 评论( 7) 编辑 收藏

FeedBack:
#1楼   2014-09-17 20:12  findumars  
万一兄,我给你留言了,麻烦看一下。
  
#2楼   2014-09-19 11:00  noviastang  
万一老师,XE7出来了,有空带领大家梳理一下XE7的一些新特性嘛^_^
  
#3楼 [ 楼主2014-09-19 12:28  万一  
@ noviastang
先等等能用的版本
  
#4楼   2015-01-15 13:42  xiaoyan968  
万一老师,看了你的博客深受启发,请教个小问题,一直查不到该怎么弄,程序中怎么取得intraweb的active session数目?就是intraweb程序运行时那个server面板上显示的当前active session值。
  
#5楼   2015-12-13 20:08  丹心石  
现在在用XE10 感觉比XE7要好许多!有很多新功能还有待熟悉,只是感觉跟进的知识太少了!
  
#6楼   2016-02-10 23:51  嗟夫  
万老师,最近我一直在学习你的这个IntraWeb,现在在自己写的过程中也遇到了executeAjaxEvent 传递中文参数的问题,你发的编码(js)、解码(Delphi)函数在那个IntraWeb爱好者QQ群已经满了,我没法进去下载,只能在这里求组你了。
  
#7楼 3360458 2016/2/10 23:53:14  2016-02-10 23:53  嗟夫  
编码(js)、解码(Delphi)函数 如果不方便发这里请发我邮箱好吗? 22968869@qq.com


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
delphi / c++ builder 10.1 Berlin 安装Intraweb 14.1.5,仅供学习研究使用 说明:仅供学习研究使用 安装程序太大无法上传,请先到http://www.atozed.com下载iw14.1.5.exe 本人用的是Embarcadero RAD Studio 10.1 Berlin up2 1. 打开IDE,Component / Install Packages...,选择旧版本Intrawebxxxx.bpl,Remove. 2.用IWBundledRemovalTool工具将旧版本文件删除(如果没有此工具可从网上下载或先随便安装一个版本,把此工具复制出来)。 3.如果需要用bcb开发由进行这一步,如只需要用delphi开发则可跳过这步, 将C:\Program Files (x86)\Embarcadero\Studio\18.0\include\windows\vcl目录下IW*.hpp删除。 4.如果需要用bcb开发由进行这一步,如只需要用delphi开发则可跳过这步,本人前几次安装都没有成功, 后面增加了这步,不知道此步是否必须, 将C:\Program Files (x86)\Embarcadero\Studio\18.0\include\windows\vcl目录下, 从InAntiFreezeBase.hpp开始选中到InYarn.hpp,然后将这些文件删除。 5.运行iw14.1.5.exe安装,安装时输入如下LicenseKey(这个号也是网上找到的,由于找了一天也不记得在哪找到的了,感谢作者提供): +0010AAIACIABCAACABCACGABCABAAAGACGABCAAGABEAAEABEABIABEAAGABEAAIABCAACABCACEABEABGABEAAAAAAACGAAAACAAAIAAGABCADAABCACGABEAAAABCAACABCACIABEABIAAGACGAAIAACABEAAIABCADAABEACAABCABAABCAAIAAEAAAABAAAGABCADAABCABCABEAAIABEABEABCAACABEAAEABCABAAAAACGAAAACAAAIAAIABCABAABEABCABCABAABCACEABCADAABEAAAABCABAABEAAEAAGACGABCAAGABEAAEABEABIABEAAGABEAAIABCAACABCACEABEABGABEAAAAAAACGAAAACAAAIABAABEABGABEAAAABCABIABEAAEABCAACABEAAIABCABIABCADAABCACIAAGACGAAGABAAAGABGAAGABCAAGAAAAAGABGAAAACGAAAACAAAIABAABCAAIABCABIABEAAIABCABIABCADAABCACIAAGACGAAIABAAAIACIABAAAIAAAACGAAAACAABAAAGABCABAABEAAEABCABIABCAACABCACEAAIACIABCADAAAGACGAAGAAEAAGAAAAAGAACAAGABCAAGABAAAGAAAAAGABCAAGABGAAGABGAAAACGAAAACAAAIABAABCACGABCAACABCABIABCACEAAGACGAAAACGAAAACAAAIABGABCAACABEAAGABCABGAAGACGAAAACGAAAACAAAHAEDAAFACI 6.安装完成后如果选中License Registration则同样输入上面的LicenseKey。 7.先启动Delphi 10.1 Berlin IDE,Tools/Options,将iw14.1.5.exe安装目录(本人安装到C:\Program Files (x86)\IntraWeb XIV)下的LibD10_1W32、LibD10_1W64、Source三个目录添加到Library Path和Browsing Path。 8.随便创建一个Intraweb应用,选择win32平台,然后运行,报错后修改IWLicenseKey.pas: 将SetLicenseKey(xxxxxxxxxxxxxxxxxx改为: SetLicenseKey( '+0010AAIACIABCAACABCACGABCABAAAGACGABCAAGABEAAEAB'+ 'EABIABEAAGABEAAIABCAACABCACEABEABGABEAAAAAAACGAAA'+ 'ACAAAIAAGABCADAABCACGABEAAAABCAACABCACIABEABIAAGA'+

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值