首先,我们在窗体上包含了一个数据集,数据集中有两个字段:Id 和 Name,由于在设计期添加了这两个字段,所以在定义中我们可以看到它们分别是 adsDataId 和 adsDataName。为了演示方便,我们在窗体的构造函数中生成了10条测试数据。
接下来,我们来看剩下的源码:
procedure TForm1.Button1Click(Sender: TObject);const STableTemplate: QStringW = ' ' + // ' 这是一个表格 '+ // ' 编号 姓名 ' + // ' %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 来提供进一步处理:
创建必要的实例; 将 adsData 数据集的字段入栈; 预编译 Rows 宏的参数,以便后面重复替换; 循环 adsData 生成,替换的每一步结果追加到 AHelper 中; 设置宏当前的值为 AHelper.Value; 清理局部变量的值;OK,这样子,就完成了上面的模板的替换工作。这里注意,我创建了一个局部的 TQMacroManager 对象的实例,当然你也可以用 Button1Click 里的 AMacros,那样,宏 Title 、Rows 的值也会被嵌入。
我们看一下实际的运行结果:
查看更多关于示例:使用QMacros玩转HTML模板_html/css_WEB-ITnose的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did111544