Delphi 4中如何捕捉非main窗体的onminimized事件?

firewing 2000-01-25 11:16:00
Delphi 4 中好像只有main窗体才能出发application 的onminimized事件
其他窗体怎样办?
...全文
192 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahfei 2000-01-26
  • 打赏
  • 举报
回复
email to me , i will send it to you
firewing 2000-01-26
  • 打赏
  • 举报
回复
我想写一个程序生成一个TrayIcon 在任务蓝里。
再窗体Onminimized的事件把窗体Hide掉。
光明山人 2000-01-26
  • 打赏
  • 举报
回复
其实Application.OnMinimize也是Application最小化后才触发的事件:
TApplication.OnMinimize
Occurs when an application is minimized.

WM_SYSCOMMAND只是告诉你,用户执行了系统菜单上的“最小化”命令了,让你最小化这个窗口,如果你不主动最小化(也没有调默认消息处理函数),这个消息就失灵了,哈哈哈!

其它的Forms最小化时怎么办呢?
其实每个窗口最小化后都发出WM_SIZE消息,体现在Delphi中就是OnSize事件,你可以用你自己定义的类里的(一般情况下是Form中的(尤其主Form))方法(method:类中的函数/过程,请别嫌我罗索,我自己就觉得)来赋值(若还有什么疑问的话,直接昧儿我),如FormSon.OnSize := DoSonSized, DoSonSized定义为procedure DoSonSized(Sender TObject),是你的一个类中,比如主窗体中的一个方法。然后你在DoSonSize中判断是不是TForm(Sender).WindowState=wsMinimize。

你想实现什么,也许我能给更多建议。
ahfei 2000-01-25
  • 打赏
  • 举报
回复
>>>不可能吧,窗口最大/最小化发的消息是WM_SIZE
不要张口就否定,没有调查,就没有发言权:(
WM_Size只是window改变大小是发出的消息,不仅是窗口最大/最小化才会有!而且,窗口最大/最小化会发出一系列的消息,我们当然是取其中有用的.
至于limodou的第二种方法,实际上是不可取得,因为最小花一个窗口,不一定要点那个minimize button,很多时候也要用程序最小花windos(比如多文档程序),那时这个方法
就不管用了.
limodou 2000-01-25
  • 打赏
  • 举报
回复
好几种方法:
捕捉WM_SYSCOMMAND消息;
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
//...
end;

implementation

{$R *.DFM}
procedure TForm1.WMSysCommand(var Message:TMessage);
begin
if Message.WParam = SC_ICON then //最小化了
begin
//form1.hide; ...
end
else
inherited;
end;

2捕捉WM_NCLBUTTONDOWN
type
TForm1 = class(TForm)
private
procedure Minimize(var mess:TWMNCLBUTTONDOWN);message WM_NCLBUTTONDOWN;
//...
end;

implementation

{$R *.DFM}
procedure TForm1.Minimize(var mess:TWMNCLBUTTONDOWN);
begin
if mess.hittest=htreduce then //htreduce表示是否按了最小化按钮
begin
//Form1.hide; ...
end
else
inherited;
end;
将代码写在相要处理的窗体里面

WHQ 2000-01-25
  • 打赏
  • 举报
回复
不可能吧,窗口最大/最小化发的消息是WM_SIZE
ahfei 2000-01-25
  • 打赏
  • 举报
回复
捕捉WM_SYSCOMMAND消息即可

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
procedure DoMinimize(var msg:TWMSysCommand); message WM_SysCommand;
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

{ TForm2 }

procedure TForm2.DoMinimize(var msg: TWMSysCommand);
begin
if msg.CmdType=SC_MINIMIZE then ShowMessage('hello,Minimize the form');
inherited;
end;

end.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧