疑わしいパラメータ値がある場合に表示されるダイアログに「注意」イメージが表示されます。ユーザーはいつも気づくとは限りませんので、1秒以上かけて周期的にフェードインまたはフェードアウトしたいと思います(Visibleプロパティを切り替えることもできますが、Visibleプロパティを切り替えるだけです)。それを自分のフォームに置き、それをダイアログ上に浮かべる(そしてフォームのAlphaBlendValueプロパティを変更する)より簡単な方法はありますか?DelphiのTImageにAlphaBlendValueプロパティを追加する最も簡単な方法は何ですか
2
A
答えて
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.Draw
のOpacity
パラメータを指定せずにデルファイの古いバージョンを使用している場合。
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.Draw
のOpacity
パラメータを示唆ためのGielのおかげで、それはTCanvas.Draw
に非常に最近追加されたことを指摘しSertacため。
1
TImageは、あなたが探しているようなアルファ透明度をサポートしていません。別のフローティングTFormを使用するのが最も簡単なオプションです。
関連する問題
- 1. オブジェクトにプロパティを設定する最も簡単な方法は?
- 2. Androidアプリにインストール可能なコンポーネントを追加する最も簡単な方法は何ですか?
- 3. サードパーティのJoomlaテーマにコードスニペットを追加する最も簡単な方法は何ですか?
- 4. LinearLayoutに複数のビューを追加する最も簡単な方法は何ですか?
- 5. DBフィールドの追加/削除後にEntity Modelを更新する最も簡単な方法は何ですか?
- 6. SilverlightでWCFに圧縮を追加する最も簡単な方法は何ですか?
- 7. IOCPベースのWindowsサーバーにSSLを追加する最も簡単な方法は?
- 8. Winforms - スレッドセーフな方法でプロパティを更新する最も簡単な方法は何ですか
- 9. 自動バージョン情報をMSSQLテーブルに追加する最も簡単な方法は何ですか?
- 10. Dojo Treeノードにツールチップを追加する最も簡単な方法は?
- 11. Printing.PrintDocument(.Net 2.0)にヘッダーとフッターを追加する最も簡単な方法は?
- 12. DelphiからOutlook 2010のメールを作成する最も簡単な方法は?
- 13. Omniauth-Facebook Gemでプロファイル画像を追加する最も簡単な方法は何ですか?
- 14. プロジェクトにプログラムでファイルを追加する最も簡単な方法
- 15. プロパティをUITableViewControllerに渡す最も簡単な方法
- 16. boost :: statechart :: state_machineをスレッドセーフにする最も簡単な方法は何ですか?
- 17. ソースコードをリモートコンピュータにアップロードする最も簡単な方法は何ですか?
- 18. 城ActiveRecord:SQLを見るのに最も簡単な方法は何ですか?
- 19. 春の最も簡単で最も透過的な方法をキャッシングする方法は何ですか?
- 20. VisualStudio2008の開発にlibpngを利用する最も簡単で簡単な方法は何ですか?
- 21. このheirarchicalテーブルをフラットテーブルに非正規化する最も簡単で簡単な方法は何ですか?
- 22. iOSアプリケーションにヘルプページを追加する簡単な方法は何ですか?
- 23. 短いアニメーション画像/ビデオをWPFに追加する最も簡単な方法
- 24. 最も簡単な方法
- 25. GoogleのAPIを使用する最も簡単な方法は何ですか?
- 26. .NETリモートサーバーオブジェクトに接続する最も簡単な方法は何ですか
- 27. RailsでERBを実装する最も簡単な方法は何ですか?
- 28. Javaでカスタムバイナリデータメッセージを設定する最も簡単な方法は何ですか?
- 29. OSXでPostgreSQLを設定する最も簡単な方法は何ですか?
- 30. XAMLでScrollViewerをスタイルする最も簡単な方法は何ですか
これは基本的に私がやる方法です。ただし、TCanvas.Drawは "不透明度"パラメータを渡すことができるので、TAlphaBlendForm.PaintBox1Paintは単純な "PaintBox1.Canvas.Draw(0、0、FBitmap、FAlpha)"になります。 – Giel
@Gielさらに良い!私はそのようにするために私の答えを編集します。 –
'TCanvas.Draw'にはD2006の「不透明度」パラメータがありますか? –