{
__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。
終わり;
終わり。