実際の開発では、さまざまな理由により、ブラウザを組み合わせて、Delphi 自体では実現するのが難しい効果を実現する場合があります。また、Web ページが文字列の綴りによって完成される場合、その効率は明らかに理想的ではありません。 QMacros と組み合わせると、すべてが非常にシンプルになることがわかります。 QMacros のサンプルには、新しい HTML テンプレートのサンプル コードが含まれています。QMacros に関連する部分を解釈して、HTML テンプレートを使用する方法を見てみましょう。
まず、フォームにデータ セットを含めます。データ セットには Id と Name の 2 つのフィールドがあります。これらの 2 つのフィールドは設計期間中に追加されたものであるため、定義ではそれらが adsDataId と adsDataName であることがわかります。デモンストレーションの便宜上、フォームのコンストラクターで 10 個のテスト データを生成しました。
次に、残りのソース コードを見てみましょう:
procedure TForm1.Button1Click(Sender: TObject);const STableTemplate: QStringW = '<html><head><title><%Title%></title></head>' + // '<body>这是一个表格<table border="1" cellspacing="0" cellpadding="0" bordercolor="#000000" style="BORDER-COLLAPSE: collapse">'+ // '<th><tr><td>编号</td><td>姓名</td></tr></th>' + // '<%Rows("<tr><td>%Id%</td><td>%Name%</td></tr>")%>' + // '</table></body>';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 が何をするのか見てみましょう:
ここで、マクロ Title は固定値であり、Rows はさらなる処理のために DoReplaceRows によって提供される関数マクロです。
実際の実行結果を見てみましょう: