窗体淡入淡出效果

        找到主窗体的AlphaBlend属性和AlphaBlendValue属性。将AlphaBlend设置为True。然后更改AlphaBlendValue属性的值即可。值从:0-255。窗体的淡入淡出效果,可以在程序启动的时候用时钟控件,动态增加AlphaBlendValue的值。关闭则相反。
 
*************************************************************************************
用AnimateWindow

--------------------------------------------------------------------------------
        Windows图形界面实现了卷帘、淡入淡出和弹出效果,使界面更吸引人。如果你要在你的窗体中使用这些效果,你只需要一个API函数:AnimateWindow!  

        这个API函数使用简单,你只需要提供你的窗体的句柄、动画进行的毫秒数和一些指定效果和方向的标志。

        试着在你的窗体的OnShow事件处理函数中加入下面的代码:  

...  
AnimateWindow(Self.Handle,   250,   AW_BLEND   or   AW_ACTIVATE);  
...  

        执行工程并看一下结果。很酷,是不是?

        这个函数默认使用卷帘效果,但是你可以用AW_SLIDE获得幻灯效果,用AW_CENTER获得垮塌或扩展效果,用AW_BLEND获得平滑的淡入淡出效果。

        还有,你可以加上AW_ACTIVATE标志如果你的窗体正在出现,或是AW_HIDE如果你的窗体将要被隐藏,这一标志颠倒动画的方向。

        当你使用卷帘和淡入淡出效果时,你可以指定效果在水平和垂直轴发生的方向,添加AW_HOR_POSITIVE和AW_HOR_NEGATIVE设置x轴,添加W_VER_POSITIVE或是AW_VER_NEGATIVE设置y轴。

        当你用AW_CENTER标志时,所有这些标志都可以省略。

        试验不同的标志组合并看一下结果!

--------------------------------------------------------------------------------

        当你玩了一段时间后,你会发现一个奇怪的地方:一些控件显示正常,其他的控件绘图有错误,还有一些根本不画!!

        原因很简单,但是解决方法很麻烦。

        MSDN文档说窗体中的控件的windows程序必须处理WM_PRINT或WM_PRINTCLIENT消息,使它们与AnimateWindow   API函数一起使用。这些消息当Windows需要在屏幕以外的显示环境(如打印机,在这里使屏幕外位图)绘图时被使用。该文档说普通控件和对话框的窗口程序已经处理了这些消息。

        这就解释了一些控件绘图正常:例如TButton,   TCheckBox和TRadioButton它们拥有和管理底下的按钮控件,这样它们能正确的处理消息。

        绘图有错误的控件是一种中间类型,它们拥有按钮控件但是一些部分使应用Dephi的TCanvas而不是Windows   GDI绘制的,如TEdit,   TRichEdit和其他这样的控件。  

        不可见的控件是完全不拥有普通控件的那些,它们都是TGraphic的后代,如TShape和TBevel。这些控件决不会画出来,因为它们接收不到需要的消息。

        但是,对从TWinControl衍生出来的Delphi对象,你可以这样从中间截取和处理WM_PRINTCLIENT消息:

unit   TestGroupBox;  

interface  

uses  
    Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
    StdCtrls;  

type  
    TTestGroupBox   =   class(TGroupBox)  
    private  
        {   Private   declarations   }  
    protected  
        {   Protected   declarations   }  
        procedure   WMPrintClient(var   Msg:   TMessage);   message   WM_PRINTCLIENT;  

    public  
        {   Public   declarations   }  
    published  
        {   Published   declarations   }  
    end;  

procedure   Register;  

implementation  

procedure   Register;  
begin  
    RegisterComponents( 'Test ',   [TTestGroupBox]);  
end;  

{   TTestGroupBox   }  

procedure   TTestGroupBox.WMPrintClient(var   Msg:   TMessage);  
begin  
          PaintTo(HDC(Msg.WParam),   0,   0);  
end;  

end.  

        这是一个从TGroupBox派生出来的例子组件。由于TGroupBox拥有的不是一个普通窗口控件,WM_PRINTCLIENT没有被处理。程序添加消息处理函数并在一个不同的显示环境中使用PaintTo方法,这些都是直接了当的。

        现在是麻烦的部分了:你窗体的每一个控件都必须这样修改,而且你必须修改你所有的对象才能安全使用AnimateWindow   API函数。
 
 
 
1.動畫顯示窗體。。。
    
    
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end ; var Form1: TForm1; implementation { $R *.dfm } procedure TForm1.FormCreate(Sender: TObject); begin AnimateWindow(Handle, 2000 { 速度:2秒 } ,AW_BLEND); { AW_HOR_POSITIVE = $00000001; AW_HOR_NEGATIVE = $00000002; AW_VER_POSITIVE = $00000004; AW_VER_NEGATIVE = $00000008; AW_CENTER = $00000010; AW_HIDE = $00010000; AW_ACTIVATE = $00020000; AW_SLIDE = $00040000; AW_BLEND = $00080000; } end ; end .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值