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
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
Self.Refresh;//显示能显示的所有控件
Self.holditClick(Holdit);就行了。
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;我的一段代码,可参考