AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>半透明のウィンドウ(win2000以上)
Delphi Tips
Delphi Win32API
ダウンロード

Delphi Tips & Tricks

半透明のウィンドウ(win2000以上)

 windows2000から導入された機能でウィンドウを半透明にするというのがあります。DelphiのTFormにはこれを簡単に実現できるプロパティが備わっています。
 プログラムでウィンドウを半透明にするサンプルと一緒に紹介します。
//フォームのプロパティを操作する例
procedure TForm1.Button1Click(Sender: TObject);
begin
  AlphaBlend :=true;
  AlphaBlendValue :=120;//0で完全に透明、255で完全不透明
end;

//APIを使ったコードで同じことを再現
//SetLayeredWindowAttributes関数・・・たぶんDelphi6でもあると思います
//Delphi7ではforms.pasに定義済みでした。
procedure TForm1.Button2Click(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE,
                GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

  SetLayeredWindowAttributes(Handle, 0, 120, LWA_ALPHA);
end;

 普通はフォームのAlphaBlendプロパティとAlphaBlendValueプロパティを変更すればことは足りるでしょう。設計時にも実行時にも変更できます。
 
APIを使って実現するとサンプルの下のようになります。先にSetWindowLong関数でウィンドウの拡張スタイル(GWL_EXSTYLE)にWS_EX_LAYEREDを加えます。そしてSetLayeredWindowAttributes関数で半透明のウィンドウに設定して描画され直されます。
 SetLayeredWindowAttributes関数の第1引数は半透明にするウィンドウのハンドル、第2引数はこの場合0で、第3引数に透明にする度合い(0→255=透明→不透明)を指定、最後は半透明だけの場合はLWA_ALPHAを指定します。表示されたときに半透明にしたい場合はFormCreateイベントハンドラに記述してください。