透明な窓は、窓は、透明可能に、半透明の、プロパティを制御するように設定することができます

{
__STATIC_STYLE__定義
}
部UPHMTransWin。

インタフェースが

使用する
Windowsの、メッセージ、sysutilsの、クラス、グラフィックス、コントロール、ダイアログ、フォーム。


TWinFlags =(fColorKey、fAlphaKey、fBoth)。

TPHMTransWin =クラス(TComponentの)
プライベート
{
プライベート宣言
}
FdwFlags:DWORD。
FColorKey:TColorの。
FAlpha:バイト。
FHandle:HWND;
FWinFlags:TWinFlags。
FWinControl:TWinControlの。
手続きSetWinFlags(値:TWinFlags)。
手続きSetWinControl(値:TWinControlの);
手順SetAlpha(値:バイト)。
手続きSetColorKey(値:TColorの);
手順DoRefresh;
保護
{
保護宣言
}
公共
{
パブリック宣言
}
プロパティWinCtrl:のTWinControlはFWinControlがSetWinControlを読み書き。
コンストラクタは(AOwner:TComponentの)を作成します。オーバーライド;
デストラクタは破棄します。オーバーライド;
公表
{
公開宣言
}
プロパティWinFlags:TWinFlagsはFWinFlagsがSetWinFlagsを読み書き。
プロパティアルファ:バイトFAlphaがSetAlphaを読み書き。
プロパティのカラーキー:TColorのはFColorKey書き込みSetColorKeyを読みます。
プロパティHandle:HWNDはFHandleがFHandleを読み書き。
終わり;

手順の登録;

実装

のconst
lwa_ColorKey = 1。
lwa_Alpha = 2。
WS_EX_LAYERED = $ 80000;

{
$ IFDEF __STATIC_STYLE__は
}
入力
TSetLayeredWindowAttributes =関数(:、:COLORREF;:; bAlphaバイトdwFlagsパラメータ:DWORD crKey HWND WND):ブール値。STDCALL;
VaRの
SetLayeredWindowAttributes:TSetLayeredWindowAttributes。
DllHandle:THandle。
{
他$
}
関数SetLayeredWindowAttributes(WND:HWND; crKey:COLORREF; bAlpha:バイト; dwFlagsパラメータ:DWORD):ブール。STDCALL; 外部'user32.dllの';
{
$ ENDIF
}

// -------------------------------------------- -------------------------------
プロシージャレジスタ。
ベギン
RegisterComponents( 'ウィン効果'、[TPHMTransWin])。
終わり;

// ------------------------------------------------ ---------------------------
コンストラクタTPHMTransWin.Create(AOwner:TComponentの);
始める
継承(AOwner)を作成します。

WinFlags:= fAlphaKey。
アルファ:= 255;
カラーキー:= clBlack。
FHandle:= 0;
終わり;

// ------------------------------------------------ ---------------------------
デストラクタTPHMTransWin.Destroy。
始める
継承されました。
終わり;

// ------------------------------------------------ ---------------------------
手順TPHMTransWin.SetColorKey(値:TColorの)。
開始
(バリュー<> FColorKey)ならば、
始めます
FColorKey:=値;
DoRefresh;
終わり;
終わり;

// ------------------------------------------------ ---------------------------
手順TPHMTransWin.SetAlpha(値:バイト)。
開始
(値<> FAlpha)場合、次に
開始
FAlphaを:=値。
DoRefresh;
終わり;
終わり;

// ------------------------------------------------ ---------------------------
プロシージャTPHMTransWin.SetWinFlags(値:TWinFlags)。
開始
(値<> FWinFlags)場合、次に
開始
FWinFlagsを:=値。

IF(FWinFlags = fAlphaKey)を
開始
FdwFlagsを:= lwa_Alpha。
終了
他の場合(FWinFlags = fBoth)を
開始
FdwFlags:= lwa_Alphaまたはlwa_ColorKey。
終了

始める
FdwFlagsを:= lwa_ColorKey。
終わり;

DoRefresh;
終わり;
終わり;

// ------------------------------------------------ ---------------------------
手順TPHMTransWin.SetWinControl(値:のTWinControl);
開始
((値<> FWinControl)と(値<> NIL))ならば、
開始
FWinControlを:=値。
FHandle:= FWinControl.Handle。

もしそうでないと(ComponentStateでcsDesigning)を
始める
のSetWindowLong(FHandle、gwl_ExStyle、GetWindowLong(FHandle、gwl_ExStyle)またはWS_EX_LAYERED)。
DoRefresh;
終わり;
終わり;
終わり;

// ------------------------------------------------ ---------------------------
手順TPHMTransWin.DoRefresh。
開始
((FHandle> 0)としないComponentStateで(csDesigning))、次いで場合
始める
SetLayeredWindowAttributes(FHandle、ColorToRGB(FColorKey)、FAlpha、FdwFlags)を、
終わり;
終わり;

{
$ IFDEF __STATIC_STYLE__
}
// ------------------------------------------- --------------------------------
初期
DllHandle:=のLoadLibrary( 'user32.dllの')。
@SetLayeredWindowAttributes:= nilを;
DllHandle <> 0の場合、
開始
@SetLayeredWindowAttributesを:=のGetProcAddress(DllHandle、 'SetLayeredWindowAttributes')。
@SetLayeredWindowAttributes = nilの後、場合
始める
ShowMessage( '!OSがWindows 2000でなければなりません');
停止;
終わり;
終わり;

// ------------------------------------------------ ---------------------------
ファイナライズ
場合DllHandle <> 0の場合にFreeLibrary(DllHandle)。
{
$ ENDIF
}

終わり。

ユニットUnit1は、

インターフェイスは

使用しています
Windowsの、メッセージ、sysutilsの、クラス、グラフィックス、コントロール、フォーム、ダイアログ、
StdCtrls、UPHMTransWinを。

入力
TForm1 =クラス(TFormは)
PHMTransWin1:TPHMTransWinと、
ボタン1:TButtonの。
ボタン2:TButtonの。
ボタン3:TButtonの。
手続きButton1Click(送信者:TObjectを);
手順Button2Click(送信者:TObjectを);
手順Button3Click(送信者:TObjectを);
プライベート
{
プライベート宣言
}
公共
{
公開宣言
}
エンド。

VAR
をForm1:TForm1;

実装

{
$ R * .DFM
}

手順TForm1.Button1Click(送信者:TObjectを);
開始
PHMTransWin1.WinCtrlを:=自己;
PHMTransWin1.ColorKey:= Self.Color。
PHMTransWin1.WinFlags:= fColorKey。
終わり;

手順TForm1.Button2Click(送信者:TObjectを);
開始
PHMTransWin1.WinCtrlを:=自己;
PHMTransWin1.ColorKey:= Self.Color。
PHMTransWin1.Alpha:= 32;
PHMTransWin1.WinFlags:= fAlphaKey。
終わり;

手順TForm1.Button3Click(送信者:TObjectを);
開始
PHMTransWin1.WinCtrlを:=自己;
PHMTransWin1.ColorKey:= Self.Color。
PHMTransWin1.Alpha:= 128;
PHMTransWin1.WinFlags:= fBoth。
終わり;

終わり。

おすすめ

転載: www.cnblogs.com/blogpro/p/11446518.html