OnShow 事件 在窗体实际显示之前瞬间触发 
OnResize 事件 重新调整窗体大小触发 
OnCreate 事件 窗体第一次创建时触发 
OnActivate 事件 焦点移到窗体上时触发 好象上面都不行,OnShow看来好用但我的代码可能和窗口显示太有关系,不凑效。我主要想在窗口框架都出来以后自动的缩成一个图标在状态栏,而不是通过用户按一下按纽。
缩成一个图标在状态栏的方法我知道我是用一个按纽实现的,代码如下:
procedure mainform.holditClick(Sender: TObject);
begin
  ntida.cbSize := sizeof(tnotifyicondataa); //指定ntida的长度
  ntida.Wnd := handle; //取应用程序主窗体的句柄
  ntida.uID := iid; //用户自定义的一个数值,在uCallbackMessage参数指定的消息中使
  ntida.uFlags := nif_icon + nif_tip + nif_message;//指定在该结构参数都有效
  ntida.uCallbackMessage := WM_OPENPAGE;
  //指定的窗口消息
  ntida.hIcon := Application.Icon.handle;
  //指定系统状态栏显示应用程序的图标句柄
  //  ntida.szTip := '淳星办公';
  //当鼠标停留在系统状态栏该图标上时,出现该提示信息 (为产生消息冲突,关闭此功能)
  shell_notifyicona(NIM_ADD, @ntida);
  //在系统状态栏增加一个新图标  ShowWindow(Handle, SW_HIDE); //隐藏主窗体
  //隐藏应用程序窗口在任务栏上的显示
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
  GetWindowLong(Application.handle, GWL_EXSTYLE)
  or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
end

解决方案 »

  1.   

    在OnActivate 里写上代码:Self.OnActivate := Nil;//避免下一次运行;
    Self.Refresh;//显示能显示的所有控件
    Self.holditClick(Holdit);就行了。
      

  2.   

    把上面的代码放到onCreate代码里面:再加上Application.ShowMainForm := false;
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ShellAPI, StdCtrls;
    const
      WM_TRAY = WM_USER + 1000;
      
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        MyTrayIcon: TNotifyIconData;
        procedure WMTRAY(var Msg: TMessage); message WM_TRAY;    procedure WMSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}  procedure Tform1.WMSYSCOMMAND(var Msg: TMessage);
    begin
      if Msg.WParam = SC_MINIMIZE then begin //用户点"最小化"按钮
        self.Hide;
        SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
      end
      else
        Inherited;
    end;procedure Tform1.WMTRAY(var Msg: TMessage);
    begin
      case Msg.LParam of
        WM_LBUTTONDBLCLK, WM_LBUTTONDOWN:
          begin
            visible := Not visible;
            Application.ShowMainForm := visible;
            SetForegroundWindow(Application.Handle); 
          end;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      MyTrayIcon.cbSize := Sizeof(TNotifyIconData);
      MyTrayIcon.Wnd := self.Handle;
      MyTrayIcon.uID := 1;
      MyTrayIcon.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
      MyTrayIcon.uCallbackMessage := WM_TRAY;  MyTrayIcon.hIcon := Application.Icon.Handle;
      MyTrayIcon.szTip := '托盘Application.';
      Shell_NotifyIcon(NIM_ADD, @MyTrayIcon);
      Application.ShowMainForm := false;
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Shell_NotifyIcon(NIM_Delete, @MyTrayIcon);
    end;我的一段代码,可参考
      

  4.   

    yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜) 的主意挺好的!