判斷窗體是否按下最小化等按鈕時,可以截取鼠標按下按鈕時的消息.下面有2種方法可以做到.轉自Delphi共和國--<<如何判斷鼠標按下了窗體最小化按鈕>>:
方法一:截获 WM_SYSCOMMAND消息,看窗体是否处于最小化状态
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMM
AND;
//...
end;
implementation
{$R *.DFM}
procedure TForm1.WMSysCommand(var Message:TMessage);
begin
if Message.WParam = SC_ICON then //最小化了.最大化 SC_ZOOM,關閉:SC_CLOSE
begin
//form1.hide; ...
end
else
inherited;//很重要的.上次就是因為沒加這句,導致窗體不能拖動等問題
end;
方法一:截获 WM_SYSCOMMAND消息,看窗体是否处于最小化状态
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMM
AND;
//...
end;
implementation
{$R *.DFM}
procedure TForm1.WMSysCommand(var Message:TMessage);
begin
if Message.WParam = SC_ICON then //最小化了.最大化 SC_ZOOM,關閉:SC_CLOSE
begin
//form1.hide; ...
end
else
inherited;//很重要的.上次就是因為沒加這句,導致窗體不能拖動等問題
end;
方法二,直接判断是否点了窗体非客户区的最小化按钮
type
TForm1 = class(TForm)
private
procedure Minimize(var mess:TWMNCLBUTTONDOWN);message WM_NCLBUTTON
DOWN;
//...
end;
implementation
{$R *.DFM}
procedure TForm1.Minimize(var mess:TWMNCLBUTTONDOWN);
begin
if mess.hittest=htreduce then //htreduce表示是否按了最小化按钮.關閉:HTCLOSE
begin
//Form1.hide; ...
end
else
inherited;//同樣重要
end;
其實,知道了什么時候是按下了窗體最小化等按鈕的處理,其它的就很清楚了.