掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
オブジェクトを表示可能なAlphaBlendフォーム (ID:35860)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まずやりたい事。 VCLコンポーネントを配置してあるフォームの背景だけを透明にして、32bitのビットマップを背景を透けるように表示したい。 やった事。 その① UpdateLayeredWindow関数を使う。 これだと背景(デスクトップ等)とビットマップはうまくブレンド出来るけど、オブジェクトが表示されなくなってしまう。 procedure TForm1.FormCreate(Sender: TObject); var BlendFunction: TBlendFunction; BitmapPos: TPoint; BitmapSize: TSize; exStyle: DWORD; Bitmap: TBitmap; begin // Enable window layering exStyle := GetWindowLongA(Handle, GWL_EXSTYLE); if (exStyle and WS_EX_LAYERED = 0) then SetWindowLong(Handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED); Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('test.bmp'); Bitmap.PixelFormat = pf32bit; ClientWidth := Bitmap.Width; ClientHeight := Bitmap.Height; BitmapPos := Point(0, 0); BitmapSize.cx := Bitmap.Width; BitmapSize.cy := Bitmap.Height; BlendFunction.BlendOp := AC_SRC_OVER; BlendFunction.BlendFlags := 0; BlendFunction.SourceConstantAlpha := 255; BlendFunction.AlphaFormat := AC_SRC_ALPHA; UpdateLayeredWindow(Handle, 0, nil, @BitmapSize, Bitmap.Canvas.Handle, @BitmapPos, 0, @BlendFunction, ULW_ALPHA); finally Bitmap.Free; end; end; その② TransparentColorを使い背景を透明にしてから、アルファなビットマップを絵画する。 これだとオブジェクトは表示されるけど、ビットマップが背景ではなく、フォームの元の色とブレンドされてしまう・・・orz (当り前かw) procedure TForm1.Button1Click(Sender: TObject); var BF :TBlendFunction; bmp :TBitmap; begin BorderStyle := bsNone; Color := clWhite; TransparentColorValue := clWhite; TransparentColor := True; bmp :=TBitmap.Create; try bmp.LoadFromFile('test.bmp'); bmp.PixelFormat := pf32bit; BF.BlendOp :=AC_SRC_OVER; BF.BlendFlags :=0; BF.SourceConstantAlpha := 255; BF.AlphaFormat := AC_SRC_ALPHA; Windows.AlphaBlend(Canvas.Handle, 10, 10, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, BF); finally bmp.Free; end; end; ソースはテスト用の物(コピペ)なので汚くてすいません。 と、いろいろ事項錯誤してみましたが、結局解決できず・・・ 分かる方や参考になりそうなサイトを知っている方は教えてください。 よろしくお願いします。 WinXP + Delphi 2010 です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.