2011-02-05 16 views
2

疑わしいパラメータ値がある場合に表示されるダイアログに「注意」イメージが表示されます。ユーザーはいつも気づくとは限りませんので、1秒以上かけて周期的にフェードインまたはフェードアウトしたいと思います(Visibleプロパティを切り替えることもできますが、Visibleプロパティを切り替えるだけです)。それを自分のフォームに置き、それをダイアログ上に浮かべる(そしてフォームのAlphaBlendValueプロパティを変更する)より簡単な方法はありますか?DelphiのTImageにAlphaBlendValueプロパティを追加する最も簡単な方法は何ですか

答えて

8

これはOpacityパラメータをTCanvas.Drawとして使用できます。舞台裏では、TGraphic.DrawTransparentが呼び出され、Windows AlphaBlend API関数が呼び出されます。これを実装する簡単な方法はTPaintBoxである:

procedure TAlphaBlendForm.FormCreate(Sender: TObject); 
begin 
    FBitmap := TBitmap.Create; 
    FBitmap.Assign(Image1.Picture.Graphic);//Image1 contains a transparent PNG 
    PaintBox1.Width := FBitmap.Width; 
    PaintBox1.Height := FBitmap.Height; 
    Timer1.Interval := 20; 
end; 

procedure TAlphaBlendForm.PaintBox1Paint(Sender: TObject); 
begin 
    PaintBox1.Canvas.Draw(0, 0, FBitmap, FOpacity); 
end; 

procedure TAlphaBlendForm.Timer1Timer(Sender: TObject); 
begin 
    FOpacity:= (FOpacity+1) mod 256; 
    PaintBox1.Invalidate; 
end; 

あなたが直接AlphaBlendを使用することができますTCanvas.DrawOpacityパラメータを指定せずにデルファイの古いバージョンを使用している場合。

procedure TAlphaBlendForm.PaintBox1Paint(Sender: TObject); 
var 
    fn: TBlendFunction; 
begin 
    fn.BlendOp := AC_SRC_OVER; 
    fn.BlendFlags := 0; 
    fn.SourceConstantAlpha := FOpacity; 
    fn.AlphaFormat := AC_SRC_ALPHA; 
    Windows.AlphaBlend(
    PaintBox1.Canvas.Handle, 
    0, 
    0, 
    PaintBox1.Width, 
    PaintBox1.Height, 
    FBitmap.Canvas.Handle, 
    0, 
    0, 
    FBitmap.Width, 
    FBitmap.Height, 
    fn 
); 
end; 

TCanvas.DrawOpacityパラメータを示唆ためのGielのおかげで、それはTCanvas.Drawに非常に最近追加されたことを指摘しSertacため。

+0

これは基本的に私がやる方法です。ただし、TCanvas.Drawは "不透明度"パラメータを渡すことができるので、TAlphaBlendForm.PaintBox1Paintは単純な "PaintBox1.Canvas.Draw(0、0、FBitmap、FAlpha)"になります。 – Giel

+0

@Gielさらに良い!私はそのようにするために私の答えを編集します。 –

+0

'TCanvas.Draw'にはD2006の「不透明度」パラメータがありますか? –

1

TImageは、あなたが探しているようなアルファ透明度をサポートしていません。別のフローティングTFormを使用するのが最も簡単なオプションです。

関連する問題