<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      動畫關閉窗口的示例

      [摘要]可以像QQ一樣實現最小化窗口時窗口到系統欄的動畫效果。 Unit main; Interface Uses Windows, Messages, SysUtils, Classes, Grap...
      可以像QQ一樣實現最小化窗口時窗口到系統欄的動畫效果。

      Unit main;

      Interface

      Uses
         Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
         RXShell, StdCtrls;
      Type TZoomDirection = (ZoomFormOpen, ZoomFormClosed);//枚舉類型
      Type
         TFormMain = Class(TForm)
            TrayIcon1: TRxTrayIcon;//Rx組件里的系統欄圖標控件
            Label1: TLabel;
            Procedure FormShow(Sender: TObject);
          procedure TrayIcon1DblClick(Sender: TObject);
         Private
            Procedure OnMinCmd(Var Message: Tmessage); Message WM_SYSCOMMAND; //捕獲消息
            Procedure FrmZoomToTray(Frm: TForm; Direction: TZoomDirection); //產生窗體從系統工作區中進入或出來的動態效果子過程
         Public
          { Public declarations }
         End;
      Var
         FormMain: TFormMain;

      Implementation

      {$R *.DFM}

      Procedure TFormMain.FormShow(Sender: TObject);
      Begin
      ShowWindow(Application.Handle, SW_HIDE);//消除任務欄顯示
      End;

      Procedure TFormMain.OnMinCmd(Var Message: Tmessage);
      Begin
         If (Message.WParam = SC_MINIMIZE) Then //如果是最小化消息
            Begin
               TrayIcon1.Active := True; //顯示圖標
               FrmZoomToTray(FormMain,ZoomFormClosed);
               FormMain.Hide; //隱藏窗體
               Exit;
            End;
         Inherited; //讓窗體處理其它消息
      End;

      Procedure TFormMain.FrmZoomToTray(Frm: TForm; Direction: TZoomDirection);
      Var
         TrayWnd: HWND;
         sClassName: Array[0..255] Of Char;
         xFrom, xTo: TRect;
      Begin
         If (Direction = ZoomFormClosed) And (Frm.Visible = False) Then
            Exit;
         If (Direction = ZoomFormOpen) And (Frm.Visible = True) Then
            Exit;
         TrayWnd := FindWindow('Shell_TrayWnd', Nil);
         TrayWnd := GetWindow(TrayWnd, GW_CHILD);
         Repeat
            GetClassName(TrayWnd, @sClassName, 255);
            If StrPas(sClassName) = 'TrayNotifyWnd' Then
               Break;
            TrayWnd := GetWindow(TrayWnd, GW_HWNDNEXT);
         Until TrayWnd = 0;
         Case Direction Of
            ZoomFormOpen:
               Begin
                  GetWindowRect(TrayWnd, xFrom);
                  xFrom.Left := (xFrom.Right - (xFrom.Right - xFrom.Left) Div 2);
                  xFrom.Right := xFrom.Left + 1;
                  GetWindowRect(Frm.Handle, xTo);
                  DrawAnimatedRects(Frm.Handle, IDANI_OPEN Or IDANI_CAPTION, xFrom, xTo);
               End;
            ZoomFormClosed:
               Begin
                  GetWindowRect(Frm.Handle, xFrom);
                  GetWindowRect(TrayWnd, xTo);
                  xTo.Left := (xTo.Right - (xto.Right - xTo.Left) Div 2);
                  xTo.Right := xTo.Left + 1;
                  DrawAnimatedRects(Frm.Handle, IDANI_CLOSE Or IDANI_CAPTION, xFrom, xTo);
               End;
         End;
      End;

      procedure TFormMain.TrayIcon1DblClick(Sender: TObject);
      begin
         TrayIcon1.Active := False;
         FrmZoomToTray(FormMain,ZoomFormopen);
         FormMain.Show;
      end;

      End.


      日韩精品一区二区三区高清