イメージコンポーネントを塗りつぶす
コンポーネントの中には,プロパティでその色を指定できるものがありますが,イメージコンポーネントにはその色をコントロールするプロパティがありませ ん。そこで,次のようなコードでイメージコンポーネントを塗りつぶすことができます。
まず,フォームにImageコンポーネントを貼り付け, Image1.Clickイベントハンドラを作成します。
procedure TForm1.Image1Click(Sender: TObject);
begin
with image1.Canvas do
begin
brush.Color:=clblue; //塗る色を青にする
fillrect (image1.Canvas.ClipRect); //「Image1.Canvas.ClipRect」はimage全体を表す
end;
end;
これを実行して,イメージコンポーネントをクリックすると,イメージコンポーネントが青色になります。
また上のコードの中の 「Image1.Canvas.ClipRect」の部分を,Rect(40,50,80,100)とすると,
(40,50),(80,50),(80,100), (40,100)の4点を結んでできる長方形の部分だけ色を塗ります。
これをもう少し変化させてみます。
まず,Privateに変数iの整数宣言をします。その後,Image1.Clickイベントハンドラに下のように記述します。
type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1Click(Sender: TObject);
private
{ Private 宣言 }
i:integer; //←これを記述
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1Click(Sender: TObject);
begin
with image1.Canvas do
begin
case i of //iの値によって場合分けする
0:brush.Color:=clgreen; //iが0のとき色を緑にする
1:brush.Color:=clyellow; //iが1のとき色を黄色にする
2:brush.Color:=clred; //iが2のとき色を赤にする
end;
fillrect(image1.Canvas.ClipRect); //イメージ全体に色を塗る
inc(i); //iに1を加える
if i=3 then i:=0; //もしiが3ならiを0にする
end;
end;
これを実行し,Imageコンポーネントをクリックする と,イメージ部分の色が, 緑→黄色→赤→緑…,と変化します。