コントロールの背景を透過するには?


おおさわ  2005-05-04 19:13:13  No: 14627

こんにちは。

現在、サイズ 32x32 の画像を表示するコントロールを作成しているのですが、背景が透過できずに困っています。
画像の縁が消去できず、矩形領域全体に描画されてしまうのです。
私は Paint メソッドを次のようにコーディングしたのですが、背景が透過されるような方法があれば、どなかたご教授いただければ幸いです。

procedure TCharacter.Paint;
var
  Dest, Source: TRect;
begin
  inherited;

  Dest:= Rect(0, 0, 31, 31);
  Source:= Rect(0, 0, 31, 31);

  if FFace <> nil then begin
    Canvas.CopyRect(Dest, FFace.Canvas, Source);
  end;

  Width := chWidth;
  Height:= chHeight;
end;
//

ちなみに FFace の中に、描画すべき画像を保持しています。FFace は Bitmap オブジェクトです。
よろしくお願いいたします。


おおさわ  2005-05-04 19:14:36  No: 14628

ちなみに、chWidth = 32(const.), chHeight = 32(const.) です。


りおりお  2005-05-04 21:15:09  No: 14629

背景透過は CopyRect() では効きません。
一度ビットマップ(32x32) に写し取って、背景色を設定してから Canvas.Draw()
で描画するといいです。


おおさわ  2005-05-05 03:49:44  No: 14630

ありがとうございます!FFace の Transparent プロパティを真にして、Canvas.Draw で描画したところ、縁を透過することができました。
ただ、コンポーネント自体の背景は透過されないみたいです(clBtnFace で塗りつぶされる)。ここはどのようにして透過すればよろしいでしょうか?
また、アルファ値の調整したいのですが、可能でしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加