[QMacros]示例:使用 QMacros 玩转 HTML 模板

我们在实际开发中,由于各种各样的原因,可能会结合浏览器来实现一些 Delphi 本身不好实现的效果。而如果网页是靠拼字符串来完成,显然其效率不是太理想。而如果结合 QMacros ,你会发现一切都变的那么简单。QMacros 的示例中包含了一个新的 HTML 模板示例代码,我们来解读其中与 QMacros 相关的部分,来看看如何玩转 HTML 模板。

首先,我们在窗体上包含了一个数据集,数据集中有两个字段:Id 和 Name,由于在设计期添加了这两个字段,所以在定义中我们可以看到它们分别是 adsDataId 和 adsDataName。为了演示方便,我们在窗体的构造函数中生成了10条测试数据。

接下来,我们来看剩下的源码:

好了,我们来说明一点,我们在示例中直接定义了一个常量字符串STableTemplate,实际上这个东西你完全可以定义到外部文件中,然后在运行时用 LoadTextW 加载。后面的步骤就和这个示例一样了。

我们来看 Button1Click 都做了啥:

  • 创建 TQMacroManager 对象实例 AMacros;
  • 入栈了两个宏:
    • Title :用来做为表格标题
    • Rows :一个带参数的宏,参数是要重复的HTML内容
  • 执行 AMacros 的替换,并将替换结果保存到当前程序下,命名为 index.html。
  • 用 Navigate 函数加载保存的网页,以显示生成的 HTML 内容。

在这里,宏 Title 是一个固定值,而 Rows 是一个函数式的宏,由 DoReplaceRows 来提供进一步处理:

  1. 创建必要的实例;
  2. 将 adsData 数据集的字段入栈;
  3. 预编译 Rows 宏的参数,以便后面重复替换;
  4. 循环 adsData 生成,替换的每一步结果追加到 AHelper 中;
  5. 设置宏当前的值为 AHelper.Value;
  6. 清理局部变量的值;

OK,这样子,就完成了上面的模板的替换工作。这里注意,我创建了一个局部的 TQMacroManager 对象的实例,当然你也可以用 Button1Click 里的 AMacros,那样,宏 Title 、Rows 的值也会被嵌入。

我们看一下实际的运行结果:

qmacrohtml

 

 

分享到:

0 条评论

沙发空缺中,还不快抢~