HotXLS ドキュメント

XlsGetDrawingThemeColor 関数

ユニット: lxHandle
呼び出し元が指定した描画カラースロットに対して XlsApplyThemeColorToDrawing に以前渡したテーマ idx + ティントを復元します。ワークブックのインメモリサイドテーブルにそのスロットのエントリがある場合は両方の出力値を設定して True を返します。それ以外の場合は False を返すため、呼び出し元は ColorFormat.RGB にフォールスルーできます。v2.64.0 以降で使用可能です

構文

function XlsGetDrawingThemeColor(
  ColorFormat : TXLSColorFormat;
  Workbook    : TXLSWorkbook;
  out ThemeIdx: Word;
  out Tint    : Double): Boolean;

パラメーター

ColorFormat — クエリする描画カラースロット(XlsApplyThemeColorToDrawing に渡したのと同じハンドル)
Workbook — ホストの TXLSWorkbook — サイドテーブルはカラースロットではなくワークブックインスタンスにあります
ThemeIdx (出力) — 関数が True を返したときの記録された 0 ベースのテーマスロット。それ以外は 0
Tint (出力) — 関数が True を返したときの -1.0 .. +1.0 の範囲の記録されたティント。それ以外は 0

備考

サイドテーブルは (ColorFormat._Container, ColorFormat._Pid) をキーとしています。セッターが使用するのと同じキーです。同じ図形 + 同じプロパティ ID は常に同じエントリになるため、連続した XlsApplyThemeColorToDrawing 呼び出しは履歴を累積するのではなく互いに上書きします
シングルプロセスのスコープ。 サイドテーブルはディスクにシリアライズされません — BIFF8 OfficeArt にはオンディスク書式のテーマカラースロットがなく、テーマインテント自体は保持できず、解決された RGB のみが保持されます。SaveAs または Open の後、ワークブックは空のサイドテーブルを持つ新しい TXLSWorkbook インスタンスとなり、このゲッターはすべてのクエリに対して False を返します。永続的なインテントが必要なアプリケーションコードは、ワークブックと並行して独自の状態を保持する必要があります
XlsApplyThemeColorToDrawing の代わりに ColorFormat.RGB を直接使用して設定されたスロットでゲッターを呼び出した場合も False を返します — 記憶すべきテーマインテントはなく、RGB が情報源です

使用例

1 枚目のワークシートの図形を処理し、存在する場合はテーマ idx + ティントをログに書き込み、それ以外の場合は生の RGB にフォールバックします

var
  i        : Integer;
  Shape    : TXLSShape;
  ThemeIdx : Word;
  Tint     : Double;
begin
  for i := 0 to Workbook.Worksheets[1].Shapes.Count - 1 do
  begin
    Shape := Workbook.Worksheets[1].Shapes.Items[i];

    if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
    then
      LogLine(Format('shape %d: theme=%d tint=%.2f', [i, ThemeIdx, Tint]))
    else
      LogLine(Format('shape %d: rgb=%.8x',         [i, Shape.Fill.ForeColor.RGB]));
  end;
end;

関連項目