|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"透明なウィンドウ(Windows2000のみ)"
2月18日にリリースされるWindows2000の新しいAPIを使うと簡単にウィンドウ
を透明 or 半透明(レイヤードウィンドウ)にすることができます。
(Windows95/98/NT4.0では使えません)
フォームにMemoをひとつ配置します。
MemoのColorプロパティはclWindow(デフォルト)
サンプルを実行すると、Memoコンポーネントは完全に透過し、それ以外の部分は
半透明になります。
サンプルは、Windows2000 Professional(RC2) with Delphi5 Enterprise版でテスト
しています。
SetLayeredWindowAttributesの引数
hwnd : HWND 透明にするウィンドウのハンドル
crKey: COLORREF 透過色
bAlpha: BYTE 透過度合 (0 = 完全透明 255 = 不透明)
dwFlags: DWORD アクションフラグ(LWA_COLORKEY, LWA_ALPHA)
LWA_COLORKEY 透明色として crKey を使います。
LWA_ALPHA bAlpha を使って、レイヤードウィンドウの不透明度を決定します。
SetLayeredWindowAttributes APIの詳細は以下のURLを参照
http://www.microsoft.com/japan/developer/library/
psdk/jpuipf/_Win32_SetLayeredWindowAttributes.htm
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
procedure CreateParams(var Params: TCreateParams); override;
end;
function SetLayeredWindowAttributes(hwnd: HWND; crKey: COLORREF;
bAlpha: BYTE; dwFlags: DWORD): BOOL; stdcall;
var
Form1: TForm1;
implementation
{$R *.DFM}
const
WS_EX_LAYERED = $80000;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
function SetLayeredWindowAttributes;
external 'user32.dll' name 'SetLayeredWindowAttributes';
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do ExStyle := ExStyle or WS_EX_LAYERED;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLayeredWindowAttributes(Handle,
ColorToRGB(clWindow),
200,
LWA_ALPHA or LWA_COLORKEY);
end;
end.
★ Private : nakanon@tke.att.ne.jp ★ NIFTY SERVE : GCH02346 なかのん ★
★ Office : nakano_k@daiwa-futures.co.jp ★ 2000/01/01(土) PM 18:03 ★
Original document by なかのん 氏 ID:(GCH02346)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|