掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
UpdateLayeredWindowを使うには? (ID:17072)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
//LWindow.pas unit LWindow; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function MakeLayer(wHandle:HWND; LayerBmp:TBitmap):boolean; function MakeLayer2(wHandle:HWND; LayerBmp:TBitmap):boolean; function UpdateLayeredWindow(_hwnd:HWND; dstHDC:HDC; pptDst:PPoint; ASize:PSize; srcHDC:HDC; pptSrc:PPoint; crKey:COLORREF; var bf : BLENDFUNCTION; dwFlag:DWORD):BOOL; stdcall; const WS_EX_LAYERED = $80000; LWA_COLORKEY = 1; LWA_ALPHA = 2; ULW_COLORKEY = 1; ULW_ALPHA = 2; ULW_OPAQUE = 4; AC_SRC_ALPHA = 1; function UpdateLayeredWindow; external 'user32.dll' name 'UpdateLayeredWindow'; implementation function MakeLayer(wHandle:HWND; LayerBmp:TBitmap):boolean; var bf : TBlendFunction; zerop : TPoint; formsz : TSize; begin result:=false; with bf do begin BlendOp:=AC_SRC_OVER; BlendFlags:=0; SourceConstantAlpha:=255; // 完全にALPHAをBITMAPに依存する場合 AlphaFormat:=AC_SRC_ALPHA; end; SetWindowLong(wHandle, GWL_EXSTYLE, GetWindowLong(wHandle, GWL_EXSTYLE) or WS_EX_LAYERED); zerop.x:=0; zerop.y:=0; formsz.cx:=LayerBmp.Width; formsz.cy:=LayerBmp.Height; if not UpdateLayeredWindow( wHandle, 0, nil, // palleteを気にしないならnilでよろし @formsz, // フォームの大きさの指定 : 必須! LayerBmp.canvas.handle, // サーフェイスを定義するDC @zerop, // サーフェイスを定義する画像の開始点 0, bf, ULW_ALPHA) then begin ShowMessage(SysErrorMessage(GetLastError)); Exit; end; result:=true; end; function MakeLayer2(wHandle:HWND; LayerBmp:TBitmap):boolean; var bf : TBlendFunction; zerop : TPoint; formsz : TSize; begin result:=false; with bf do begin BlendOp:=AC_SRC_OVER; BlendFlags:=0; SourceConstantAlpha:=255; // 完全にALPHAをBITMAPに依存する場合 AlphaFormat:=AC_SRC_ALPHA; end; //SetWindowLong(wHandle, GWL_EXSTYLE, GetWindowLong(wHandle, GWL_EXSTYLE) or // WS_EX_LAYERED); zerop.x:=0; zerop.y:=0; formsz.cx:=LayerBmp.Width; formsz.cy:=LayerBmp.Height; if not UpdateLayeredWindow( wHandle, 0, nil, // palleteを気にしないならnilでよろし @formsz, // フォームの大きさの指定 : 必須! LayerBmp.canvas.handle, // サーフェイスを定義するDC @zerop, // サーフェイスを定義する画像の開始点 0, bf, ULW_ALPHA) then begin ShowMessage(SysErrorMessage(GetLastError)); Exit; end; result:=true; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.