form的有上角的最小化和最大化对应什么事件(50分)

  • 主题发起人 主题发起人 imstev
  • 开始时间 开始时间
I

imstev

Unregistered / Unconfirmed
GUEST, unregistred user!
如何截获这两种事件
 
wm_size
{ WM_SIZE message wParam values }
{$EXTERNALSYM SIZE_RESTORED}
SIZE_RESTORED = 0;
{$EXTERNALSYM SIZE_MINIMIZED}
SIZE_MINIMIZED = 1;
{$EXTERNALSYM SIZE_MAXIMIZED}
SIZE_MAXIMIZED = 2;
{$EXTERNALSYM SIZE_MAXSHOW}
SIZE_MAXSHOW = 3;
{$EXTERNALSYM SIZE_MAXHIDE}
SIZE_MAXHIDE = 4;
用消息处理函数
 
就没有更简单的方法吗?delphi 这点做的不太理想
 
用窗体的resize事件,同时要判断窬体大小,不就ok了
 
你试试,最小化时经过onresize( )的断点吗?
 
还要别的方法,这已经很简单了,方法很多
在application的onmessage里面些代码判断,
或者自己写一个消息映射过程,(推荐这种,因为相当于添加了一个事件)
或者重载窗体的 WinProc都行,代码不麻烦的。
 
to imstev: 我试过了,不行,对不起!
to djdsz:如何用消息处理函数,请多指教!
 
我发现一个好东东,你去试试:
原理:用application.onMinimize去获得最小化事件,并赋给一个处理该事件的函数如下为
AppStartTimer;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := AppStartTimer;
end;

procedure TForm1.AppStartTimer(Sender: TObject);
begin
//事件处理
end;
 
delphi的窗体最小话是不激发CM_SIZE的,
是触发CM_SYSCOMMAND的,他的wPara = SC_MINIMIZE,
我给你写了个例子;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Btn: TButton;
public
{ Public declarations }
procedure OnMin(Var Msg: TMessage);MESSAGE WM_SYSCOMMAND;
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.OnMin(Var Msg: TMessage);
begin
if Msg.WParam= SC_MINIMIZE then
begin
Caption:= DateTimeToStr(Now);
end
else
inherited;
end;
 
to puzzle:谢谢,不过也请你试试我贴出的方法
 
to zgdtxf;
忘了 delphi 5已经把TApplication变成控件了,他的事件很多。
我现在用的是delphi 4,所以只能写带码了。 :)
我估计窗体的OnResize可能就是用CM_SIZE消息,他不能在最小话的时候触发。
 
来晚了
同意 puzzle
 
zgdtxf说的Application.OnMinimize:=proc 比较可行
 
Application.OnMinimize:=proc 其实和我说的一样,感兴趣你可以跟踪一下带码,看看application的执行过程。
 
多人接受答案了。
 
后退
顶部