2

疑わしいパラメーター値がある場合に表示されるダイアログに「注意」イメージがあります。ユーザーは常にそれに気付くとは限らないので、1 秒程度で周期的にフェードインおよびフェードアウトしたいと考えています (そうです、Visible プロパティを切り替えることもできますが、Visible プロパティを切り替えただけのように見えます)。それを独自のフォームに配置してダイアログ上に浮かせる (そしてフォームの AlphaBlendValue プロパティを変更する) よりも簡単な方法はありますか?

4

2 に答える 2

8

Opacityのパラメータを使用してこれを行うことができますTCanvas.Draw。舞台裏でこれが呼び出さTGraphic.DrawTransparentれ、次に Windows AlphaBlendAPI 関数が呼び出されます。これを実装する簡単な方法は、次の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.DrawGiel と、 に最近追加されたものであることを指摘してくれた Sertac に感謝しTCanvas.Drawます。

于 2011-02-05T12:22:20.567 に答える
1

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

于 2011-02-05T08:28:53.623 に答える