疑わしいパラメーター値がある場合に表示されるダイアログに「注意」イメージがあります。ユーザーは常にそれに気付くとは限らないので、1 秒程度で周期的にフェードインおよびフェードアウトしたいと考えています (そうです、Visible プロパティを切り替えることもできますが、Visible プロパティを切り替えただけのように見えます)。それを独自のフォームに配置してダイアログ上に浮かせる (そしてフォームの AlphaBlendValue プロパティを変更する) よりも簡単な方法はありますか?
1275 次
2 に答える
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;
Opacity
のパラメータなしで古いバージョンの Delphi を使用している場合は、直接TCanvas.Draw
使用できますAlphaBlend
。
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;
Opacity
のパラメータを提案してくれたTCanvas.Draw
Giel と、 に最近追加されたものであることを指摘してくれた Sertac に感謝しTCanvas.Draw
ます。
于 2011-02-05T12:22:20.567 に答える
1
TImage は、探しているようなアルファ透明度をサポートしていません。別のフローティング TForm を使用するのが最も簡単なオプションです。
于 2011-02-05T08:28:53.623 に答える