这样处理:
private
{ Private declarations }
procedure OnMin(var msg : TMessage);messageWM_SYSCOMMAND;procedure TForm1.OnMin(var msg: TMessage);
begin
if msg.WParam = SC_MINIMIZE then
showMessage('OK');
inherited;
end;procedure TForm1.Button1Click(Sender: TObject);begin
SendMessage(handle,WM_SYSCOMMAND,SC_MINIMIZE,0);end;
private
{ Private declarations }
procedure OnMin(var msg : TMessage);messageWM_SYSCOMMAND;procedure TForm1.OnMin(var msg: TMessage);
begin
if msg.WParam = SC_MINIMIZE then
showMessage('OK');
inherited;
end;procedure TForm1.Button1Click(Sender: TObject);begin
SendMessage(handle,WM_SYSCOMMAND,SC_MINIMIZE,0);end;
self.OnMinimize:=你自己的过程!
Application.OnMinimize :=你自己的处理过程!
ApplicationEvents控件在Additional标签页中!
用ApplicationEvents的OnMinimize事件时,第一次成功处理了自己的事件,但恢复窗口后就再不能最小化了,为什么啊!
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;procedure TForm1.WMSysCommand(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_ICON then
begin //如果用户最小化窗口则将窗口 隐藏并在任务栏上添加图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88; //SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end
else
begin //如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。
DefWindowProc(Form1.Handle,Message.Msg,Message.WParam,Message.LParam);
end;
end;procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin //如果用户点击任务栏图标则将图标删除并回复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
能完成你所要求的功能
是什么类型
用
visible:=not visible;
application.ShowMainForm:=visible;
setforegroundwindow(application.handle);
我试过最小化和托盘一起用会有点问题,请指教指教