前回は VCL の TColor について書きました。
今回は FireMonkey の TAlphaColor についてです。
TAlphaColor は、その名が示す通り、透明度(α)付きのカラーを表す型です。
TAlphaColor は TColor と同じく System.UITypes に定義されています。
各バイトの並びは AARRGGBB となっています。TAlphaColor = type Cardinal;
いわゆる 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);beginCanvas.Fill.Color := iColor;Canvas.FillRect(iRect, 0, 0, [], 1);end;procedure Fill(const iColor: TAlphaColor; const iPos: Integer);beginFillRect(iColor, iPos, TRectF.Create(iPos, iPos, iPos + 100, iPos + 100));end;beginFillRect($ffffffff, 0, ARect); // フォームを白で塗りつぶすFill($80ff0000, 10); // 50% の透過率で赤を塗るFill($cc0000ff, 60); // 80% の透過率で青を塗るend;
↓結果です。
アルファ付きで描画されています。
0 件のコメント:
コメントを投稿