发信人: kingron( )
整理人: teleme(2001-06-07 09:07:47), 站内信件
|
原著:Dragon P.C. <[email protected]>
原载:http://www.webking.com.cn
Windows 2000支持淡入淡出效果,大家都知道了。前两天研究FormContainer的Form显示效果时,得高人告知,核心API函数就是SetLayeredWindowAttributes,以下的控件代码是让你的窗口实现淡入淡出效果而设计,通过编程时动态改变AlphaValue值,您就可以看到效果了。
unit TranForm; {DragonPC 2001.2.21 }
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TTranForm = class(TComponent)
private
FAlphaValue : integer ;
FHandle : HWND ;
procedure SetFAlphaValue(Alpha:integer) ;
protected
procedure UpdateDisplay ;
public
constructor Create(AOwner: TComponent); override;
published
property AlphaValue : integer read FAlphaValue write SetFAlphaValue ;
end;
procedure Register;
function SetLayeredWindowAttributes
(Handle : HWND; COLORKEY : COLORREF; Alpha : BYTE; Flags : DWORD) :
Boolean;
stdcall; external 'USER32.DLL';
implementation
procedure Register;
begin
RegisterComponents('Standard', [TTranForm]);
end;
{ TTranForm }
procedure TTranForm.SetFAlphaValue(Alpha: integer);
begin
if (Alpha >= 0) and (Alpha < 256) then begin
FAlphaValue := Alpha ;
UpdateDisplay() ;
end else
ShowMessage('请输入0~255之间的值!') ;
end;
procedure TTranForm.UpdateDisplay;
begin
if not (csDesigning in ComponentState) then
SetLayeredWindowAttributes(FHandle, 0, FAlphaValue, 2);
{我屏蔽了设计期的显示效果,如果你愿意可以改改,建议设计时最好不要看到效果}
end;
constructor TTranForm.Create(AOwner: TComponent);
begin
inherited;
FAlphaValue := 255 ;
FHandle := TForm(Owner).Handle ;
if not (csDesigning in ComponentState) then
SetWindowLong(FHandle,GWL_EXSTYLE, GetWindowLong(FHandle, GWL_EXSTYLE )
or $80000 );
{我屏蔽了设计期的显示效果,如果你愿意可以改改,建议设计时最好不要看到效果}
end;
end.
************
下面是如何安装和使用::
用Delphi的Component-->Install Component安装这个之后,在Standed页面上就会有一个图标。把它放到一个窗体上即可。
例子:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=255;
while i>=1 do
begin
tranform1.AlphaValue:=i; //淡出
dec(i,20);
end;
tranform1.AlphaValue:=255; //恢复正常。
end;
---- ██████
█┏━━┓█
█┃之金┃█ 广州社区Delphi版直达快车
█┃印龍┃█ 技术问题请勿寄到信箱,我会忽略此类信件
█┗━━┛█
██████ |
|