最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

[QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose

来源:动视网 责编:小采 时间:2020-11-27 16:22:10
文档

[QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose

[QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose:我们在实际开发中,由于各种各样的原因,可能会结合浏览器来实现一些 Delphi 本身不好实现的效果。而如果网页是靠拼字符串来完成,显然其效率不是太理想。而如果结合 QMacros ,你会发现一切都变的那么简单。QMacros 的示例中包含了一个新的 HTML 模板
推荐度:
导读[QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose:我们在实际开发中,由于各种各样的原因,可能会结合浏览器来实现一些 Delphi 本身不好实现的效果。而如果网页是靠拼字符串来完成,显然其效率不是太理想。而如果结合 QMacros ,你会发现一切都变的那么简单。QMacros 的示例中包含了一个新的 HTML 模板


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

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

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

procedure TForm1.Button1Click(Sender: TObject);const STableTemplate: QStringW = '<%Title%>' + // '这是一个表格'+ // '' + // '<%Rows("")%>' + // '
编号姓名
%Id%%Name%
';var AMacros: TQMacroManager; AHtmlFile: String;begin AMacros := TQMacroManager.Create; try AMacros.Push('Title', 'QMacros HTML表格'); AMacros.Push('Rows', DoReplaceRows); AHtmlFile := ExtractFilePath(Application.ExeName) + 'index.html'; SaveTextW(AHtmlFile, AMacros.Replace(STableTemplate, '<%', '%>', MRF_PARSE_PARAMS)); WebBrowser1.Navigate('file:///' + StringReplaceW(AHtmlFile, '\', '/', [rfReplaceAll])); finally FreeAndNil(AMacros); end;end; procedure TForm1.DoReplaceRows(AMacro: TQMacroItem; const AQuoter: QCharW);var AMacros: TQMacroManager; AReplace: TQMacroComplied; AHelper: TQStringCatHelperW;begin AMacros := TQMacroManager.Create; AHelper := TQStringCatHelperW.Create; adsData.DisableControls; try AMacros.Push(adsData, ''); adsData.First; AReplace := AMacros.Complie(AMacro.Params[0].AsString, '%', '%'); while not adsData.Eof do begin AHelper.Cat(AReplace.Replace); adsData.Next; end; AMacro.Value.Value := AHelper.Value; finally FreeAndNil(AMacros); FreeAndNil(AHelper); FreeAndNil(AReplace); adsData.EnableControls; end;end;

好了,我们来说明一点,我们在示例中直接定义了一个常量字符串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 的值也会被嵌入。

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

    文档

    [QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose

    [QMacros]示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose:我们在实际开发中,由于各种各样的原因,可能会结合浏览器来实现一些 Delphi 本身不好实现的效果。而如果网页是靠拼字符串来完成,显然其效率不是太理想。而如果结合 QMacros ,你会发现一切都变的那么简单。QMacros 的示例中包含了一个新的 HTML 模板
    推荐度:
    标签: 模板 html css
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top