このMicrosoft ナレッジ ベースの質問 (KB267240)の情報に従って、TWebBrowser から印刷するときにカスタム ヘッダーとフッターを実装しようとしています。ナレッジベースの記事は非常に役に立ち、長いコード例も含まれていますが、コード例は Delphi ではなく C++ で書かれているため、必要なデータ構造を自分で Delphi コードに変換する必要がありました。必要なコードの部分を正しく変換したかどうかについては、あまり自信がありません。
これはおそらくその記事の最も重要な部分です。ここでは、以下のコードのパラメーター vaIn に何が入るかを説明しています。
OLECMDID_PRINT 要素の OLECMDID 列挙を ExecWB メソッドと共に使用すると、VARIANT 引数 pvaIn を介して SAFEARRAY 構造体を渡すことにより、拡張印刷情報を指定できます。この SAFEARRAY データ型は、最大 5 つの項目を取ります。
1) A string (BSTR) that contains a custom header. 2) A string (BSTR) that contains a custom footer. 3) ...
私が書いたコードを実行すると、元のヘッダーとフッターは正常に削除されますが、新しいヘッダーとフッターの文字列に置き換えられません。 、または、ナレッジベースの記事が書かれた時点で最新の 4 ~ 6 の範囲のバージョンではない IE 9 を使用しているため、単に動作することを期待すべきではない場合。
var
vaIn, vaOut: OleVariant;
begin
vaIn := VarArrayCreate([0,1], varOleStr);
vaIn[0] := VarAsType('new header', VarOleStr); //header
vaIn[1] := VarAsType('new footer', VarOleStr); //footer
// Show print-preview dialog
WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINTPREVIEW,
OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
end;