精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>图形界面和窗体>>[转载] 窗体的淡入淡出效果--绝对要看!绝对精彩!!!

主题:[转载] 窗体的淡入淡出效果--绝对要看!绝对精彩!!!
发信人: kingron( )
整理人: kingron(2001-03-16 20:40:54), 站内信件
原著: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版直达快车
█┃印龍┃█        技术问题请勿寄到信箱,我会忽略此类信件
█┗━━┛█
██████
       

[关闭][返回]