お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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