当前位置: 行情首页 >> 技术文章 >> 怎样实现类似金山毒霸的动画效果的

  • 怎样实现类似金山毒霸的动画效果的界面? PowerBuilder / 控件与界面
  • 2007-10-20 0:48:50 杭州电脑数码城 转载来源:csdn.net
  • 社区 - PowerBuilder / 控件与界面

    怎样实现类似金山毒霸的动画效果的界面?

    () 2000-03-01 15:12:00在 PowerBuilder / 控件与界面 提问

    金山毒霸中,按动右上角的按钮,Tpanel移近移出的动画效果是怎样实现?
    仅仅是改变Tpanel的Left等属性会导致严重的闪烁,水能告诉我怎么做?
    谢过了!!!
    问题点数:0、回复次数:15

    1楼 Firing_Sky (火的天空) 回复于 2000-03-01 17:23:00 得分 0


    我觉得那就像是TPanel做的……

    2楼 () 回复于 2000-03-01 21:16:00 得分 0


    Just like Netants V1.0
    I also wanna known it.

    3楼 () 回复于 2000-04-22 19:29:00 得分 0


    好象是用animatewindow这个api,不过我没试出来
    不知哪位大侠可以指教一下

    4楼 () 回复于 2000-04-23 03:24:00 得分 0


    用一个TIMER控制两个TPANEL交替重绘。

    5楼 () 回复于 2000-04-23 21:30:00 得分 0


    参考如下代码:
    Panel1.Visible := false;
    AnimateWindow( Panel1.Handle, 1000, AW_HOR_POSITIVE );
    Panel1.Visible := true; //此句必要,否则下次调用会失败

    6楼 () 回复于 2000-04-27 08:43:00 得分 0


    I also wanna known it.

    7楼 Lin (林) 回复于 2000-04-27 17:48:00 得分 0


    It's so easy: 应该是三个Panel,在其中的一个上放俩,再用两个TThread(用Timer)也行...需要的话,我可以张贴一段Source。

    8楼 hf () 回复于 2000-04-28 11:19:00 得分 0


    贴一下喽!

    9楼 Lin (林) 回复于 2000-04-28 19:38:00 得分 0


    我连Timer也省了:
    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    ListBox1: TListBox;
    RadioGroup1: TRadioGroup;
    Memo2: TMemo;
    RadioGroup2: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Panel3.Left := Panel1.ClientWidth;
    Panel3.Top := 0;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var nLoop: Integer;
    begin
    Panel3.Visible := True;
    Panel3.BringToFront;
    while Panel3.Left > 0 do
    begin
    Panel2.Left := Panel2.Left + 4;
    Panel3.Left := Panel3.Left - 4;
    Application.ProcessMessages;
    end;
    if Panel3.Left < 0 then Panel3.Left := 0;
    Panel2.Visible := False;
    Button1.Enabled := False;
    Button2.Enabled := True;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var nLoop: Integer;
    begin
    Panel2.Visible := True;
    Panel2.BringToFront;
    while Panel2.Left > 0 do
    begin
    Panel3.Left := Panel3.Left + 4;
    Panel2.Left := Panel2.Left - 4;
    Application.ProcessMessages;
    end;
    if Panel2.Left < 0 then Panel2.Left := 0;
    Panel3.Visible := False;
    Button1.Enabled := True;
    Button2.Enabled := False;
    end;

    end.

    10楼 Kingron (单身走我路……) 回复于 2001-05-12 20:22:00 得分 0


    提前。

    11楼 WuHeHai (风之影) 回复于 2001-05-12 20:29:00 得分 0


    好古董噢!

    12楼 () 回复于 2001-07-26 11:48:14 得分 0


    up

    13楼 dana (dana) 回复于 2001-07-26 11:50:43 得分 0


    没想到前面那位比我抢先了一步。
    我连Timer也省了:
    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    ListBox1: TListBox;
    RadioGroup1: TRadioGroup;
    Memo2: TMemo;
    RadioGroup2: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Panel3.Left := Panel1.ClientWidth;
    Panel3.Top := 0;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var nLoop: Integer;
    begin
    Panel3.Visible := True;
    Panel3.BringToFront;
    while Panel3.Left > 0 do
    begin
    Panel2.Left := Panel2.Left + 4;
    Panel3.Left := Panel3.Left - 4;
    Application.ProcessMessages;
    end;
    if Panel3.Left < 0 then Panel3.Left := 0;
    Panel2.Visible := False;
    Button1.Enabled := False;
    Button2.Enabled := True;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var nLoop: Integer;
    begin
    Panel2.Visible := True;
    Panel2.BringToFront;
    while Panel2.Left > 0 do
    begin
    Panel3.Left := Panel3.Left + 4;
    Panel2.Left := Panel2.Left - 4;
    Application.ProcessMessages;
    end;
    if Panel2.Left < 0 then Panel2.Left := 0;
    Panel3.Visible := False;
    Button1.Enabled := True;
    Button2.Enabled := False;
    end;

    end.



    14楼 () 回复于 2001-07-27 09:33:07 得分 0


    up

竟价广告:

    业界行情新闻声明事项:

    • ☉本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性!
    • ☉如其他媒体、网站或个人从本网下载使用,必须保留本网注明的“稿件来源”,并自负版权等法律责任。如对稿件内容有疑议,请及时与我们联系.
    • ☉如本网转载稿涉及版权等问题,请作者在速来电或来函与杭州电脑数码城网联系.
    • ☉本站网址:http://www.ititt.com/投诉邮箱:6371222@qq.com