![]() |
エディットに 0.5 と入力して「混ぜる」ボタンを押すと |
![]() |
左のパネルと真中のパネルの色が半々に混ぜられて右のパネルに現れ、 |
![]() |
エディットに 0.8 と入力して「混ぜる」ボタンを押すと |
![]() |
左のパネルの色が8割、真中のパネルの色が2割の割合で混ぜられて右のパネルに現れる、というプログラムを作りましょう。 |
まずは、次のようにコンポーネントを配置して下さい。
コンポーネント | Name プロパティ |
---|---|
「混ぜる」ボタン | ButtonBlend |
「混合率」エディット | EditRate |
左のパネル | Panel1 |
真中のパネル | Panel2 |
右のパネル | Panel3 |
まず、このユニットを kisof_4_f という名前で保存しておいてください。
このプログラムでも、 customcolor ユニットを使います。「プロジェクト」→「プロジェクトに追加」で customcolor ユニットを追加しておき、kisof_4_f ユニットの interface 部の uses 節に次のように書き加えておいて下さい。
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, customcolor;
FormCustomColor の Visible プロパティは True にしておいて下さい。
更に、このプログラムでは、FormCustomColor が2つ必要です。kisof_4_f ユニットの implementation 部の直前に
var Form1: TForm1; FormCustomColor1: TFormCustomColor; FormCustomColor2: TFormCustomColor; implementation
と書き加え、逆に customcolor ユニットの
var FormCustomColor: TFormCustomColor;
の部分を削除し、更にプロジェクトファイルを
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TFormCustomColor, FormCustomColor1); Application.CreateForm(TFormCustomColor, FormCustomColor2); Application.Run; end.
と変更して下さい。これで、プログラムを実行すると「色」フォームが2つ出現します。
※ プロジェクトファイルを表示させるには、Delphiのメニューバーから「プロジェクト」→「ソースの表示」を選択してください。「混ぜる」ボタンのイベントハンドラを次のように書いて下さい。
// 「混ぜる」ボタン procedure TForm1.ButtonBlendClick(Sender: TObject); begin FormCustomColor1.SetColor(Panel1.Color); FormCustomColor2.SetColor(Panel2.Color); Panel3.Color := FormCustomColor1.Blend(FormCustomColor2, StrToFloat(EditRate.Text)); end;
また、このイベントハンドラが正しく動作するよう、customcolor ユニット内に Blend という関数を次のように作って下さい。この
// 色を混ぜる function TFormCustomColor.Blend(AnotherColor: TFormCustomColor; Rate: Real): TColor; var RMix,GMix,BMix:TColor; begin RMix:= ; GMix:= ; BMix:= ; Blend := BMix*256*256 + GMix*256 + RMix; // 値を返す end;ヒント
さて、パネル1の混合率を0に近づけると、混合色はパネル2の色そのものに近づきます。つまり、ある色の混合率を0に近づけるとすると、その色はだんだん透明になると考えることができます。実は、この「色の透け具合 (透明度)」も色に関する属性の一つととらえることができ、専門用語でアルファチャンネルと呼びます。
【基礎課題 F-7】をもとに、次のように「色」フォームに「アルファチャンネル」エディット (EditA) を追加し、
これに対応して「混ぜる」ボタンのイベントハンドラを次のように書き換え、
// 「混ぜる」ボタン procedure TForm1.ButtonBlendClick(Sender: TObject); begin FormCustomColor1.SetColor(Panel1.Color, StrToFloat(EditRate.Text)); FormCustomColor2.SetColor(Panel2.Color, 1); Panel3.Color := FormCustomColor1.Blend(FormCustomColor2〔ここは削除〕); end;
これに合うように手続き SetColor と関数 Blend も改良して下さい。
11-5 を参考に、「色」フォームを TCusColor という単なるクラスにして下さい(ここで作ったクラスは、第G章で使います)。 その際、次のように名付けて下さい。
古いものの名前 | 新しいものの名前 |
---|---|
SpinEditColor | Color: Integer |
SpinEditR | R: Integer |
SpinEditG | G: Integer |
SpinEditB | B: Integer |
EditH | H: Real |
EditS | S: Real |
EditV | V: Real |
EditA | A: Real |
ButtonDisplayClick | CalcColor (protected 部へ) |
ButtonRGBtoHSVClick | RGBtoHSV (protected 部へ) |
ButtonHSVtoRGBClick | HSVtoRGB (protected 部へ) |
また、kisof_4_f ユニットの中で宣言されているオブジェクトを
var Form1: TForm1; CustomColor1: TCusColor; CustomColor2: TCusColor; implementation
というように変更して下さい。そしてこれに伴って他にも修正を要する箇所があります。不明な点があれば、11-5節を参照してください。
出来上がったら、実行して正しく動作するかどうか確認しましょう。