ユニット: lxHandle
セルが
Interior.SetThemeColor を通じてワークブックのテーマパレットを追跡するのと同じように、グラフの塗りつぶし、グラフの線の色、または図形の塗りつぶしがワークブックのテーマパレットを追跡するようにしたい場合に、このヘルパーを使用します
構文
procedure XlsApplyThemeColorToDrawing(
ColorFormat: TXLSColorFormat;
Workbook : TXLSWorkbook;
ThemeIdx : Word;
Tint : Double);
パラメーター
Workbook — ホストの TXLSWorkbook。テーマパレットの解決とインメモリサイドテーブルの保持に必要です
ThemeIdx — 0 ベースのテーマスロット (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — -1.0 .. +1.0 の範囲のスペックスタイルの明暗調整
備考
このヘルパーは 1 回の呼び出しで 2 つの書き込みを実行します:
- OfficeArt opt blob(ディスク上) theme idx + tint はブックの BIFF theme パレットで具体的な RGB に解決され、描画の色スロットに書き込まれます。BIFF8 OfficeArt は Office 2007 より前のバイナリ形式で、ネイティブの theme 色エンコードを持たないため、Save / Open を通過して残るのはこの部分だけです
- ワークブック上のメモリ内サイドテーブル(v2.64.0 以降) も同時に、
TXLSWorkbook.FDrawingThemeColors に元の (ThemeIdx, Tint) を (ColorFormat._Container, ColorFormat._Pid) をキーとして記録します。対応する XlsGetDrawingThemeColor リーダーは、同じプロセス内でその値を取り出します。同じスロットを再設定するとエントリは上書きされるため、サイドテーブルは履歴を蓄積するのではなく最新の意図を追跡します
シングルプロセスのみの理由。 BIFF8 OfficeArt の 4 バイト ColorRef はインデックス/RGB/スキーム/sysColor バリアントをエンコードしますが、テーマ idx + ティントを保持できる XFExt $087D に類似した拡張レコードはありません。そのため、Save/Open ラウンドトリップの制限はファイル形式の構造的な制限であり、HotXLS のギャップではありません。再ロード後、ワークブックは空のサイドテーブルを持つ新しい TXLSWorkbook インスタンスとなり、XlsGetDrawingThemeColor は False を返して ColorFormat.RGB にフォールスルーします
使用例
図形のソリッド塗りつぶしを accent5 に 25% 暗いティントで再着色し、プロパティパネルに表示するためにワークブックのサイドテーブルからテーマインテントを読み取ります。SaveAs / Open の後、サイドテーブルは再び空になるため、永続的なインテントが必要な呼び出し元は自分自身の状態を保持する必要があります
var
Shape : TXLSShape;
ThemeIdx : Word;
Tint : Double;
begin
Shape := Workbook.Worksheets[1].Shapes.Items[0];
XlsApplyThemeColorToDrawing(Shape.Fill.ForeColor, Workbook, 8, - 0.25);
// Same process — the side-table still has the entry.
if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
then
ShowMessage(Format('theme=%d tint=%.2f', [ThemeIdx, Tint]));
Workbook.SaveAs('ThemedShape.xls', xlExcel97);
end;
関連項目