2012年10月15日月曜日

VCL と FMX の Color 2


前回は VCL の TColor について書きました。
今回は FireMonkey の TAlphaColor についてです。

TAlphaColor は、その名が示す通り、透明度(α)付きのカラーを表す型です。
TAlphaColor は TColor と同じく System.UITypes に定義されています。

TAlphaColor = type Cardinal;
各バイトの並びは AARRGGBB となっています。
いわゆる ARGB の並びです。
例えば↓こうなります。

$ffff0000
黄色$ffffff00
半透明の赤$80ff0000

VCL でいう clWindow といったシステム定義の色はありませんが、定義済みの色はあります。
TAlphaColorRec 構造体から TAlphaColorRec.Red などとして取得できます。
TAlphaColorRec 構造体の色は claXXXX としても取得できます。
docwiki には「FMX.Types にある定数名は、'cla' を~」と書いてありますが、これは間違いで XE3 では System.UIConsts ユニットに定義されています。
System.UIConsts ユニットを uses しておけば、claRed といった色定数を利用できます。

なお、エンバカデロ Team Japan ブログに書かれていますが、MacOS と iOS 上では「ABGR」の並びが必要ですので、VCL の時と同じような変換ルーチンが必要になります。
この変換には System.UIConsts.RGBtoBGR が使えます。
Team Japan ブログには、条件コンパイルを使って MacOS と Windows で別々の変換を施すようにしたスマートなやり方が記載されていますので、参照してみてください。

それでは、透過率を実際に使って四角形を描画してみます。

procedure TForm1.FormPaint(
Sender: TObject;
Canvas: TCanvas;
const ARect: TRectF);
procedure FillRect(
const iColor: TAlphaColor;
const iPos: Integer;
const iRect: TRectF);
begin
Canvas.Fill.Color := iColor;
Canvas.FillRect(iRect, 0, 0, [], 1);
end;
procedure Fill(const iColor: TAlphaColor; const iPos: Integer);
begin
FillRect(iColor, iPos, TRectF.Create(iPos, iPos, iPos + 100, iPos + 100));
end;
begin
FillRect($ffffffff, 0, ARect); // フォームを白で塗りつぶす
Fill($80ff0000, 10); // 50% の透過率で赤を塗る
Fill($cc0000ff, 60); // 80% の透過率で青を塗る
end;

↓結果です。
アルファ付きで描画されています。


0 件のコメント:

コメントを投稿