form1最小化检查(难道没有人知道吗?2005年1月20日) ( 积分: 50 )

  • 主题发起人 主题发起人 smallestmonkey
  • 开始时间 开始时间
S

smallestmonkey

Unregistered / Unconfirmed
GUEST, unregistred user!
系统:windows 2003
环境:delphi 7.0
如下代码:
form1.Memo1.text:=form1.Memo1.text+#13#10+'WindowState:'
+inttostr(ord(form1.WindowState));
form1.Memo1.Text:=form1.Memo1.text+#13#10+'IsIconic:'
+booltostr(IsIconic(form1.Handle));
可是当最小化及正常显示时得到的总是:
WindowState:0
IsIconic:0
而当窗口最大化时,则是:
WindowState:2
IsIconic:0
不知何故?
 
系统:windows 2003
环境:delphi 7.0
如下代码:
form1.Memo1.text:=form1.Memo1.text+#13#10+'WindowState:'
+inttostr(ord(form1.WindowState));
form1.Memo1.Text:=form1.Memo1.text+#13#10+'IsIconic:'
+booltostr(IsIconic(form1.Handle));
可是当最小化及正常显示时得到的总是:
WindowState:0
IsIconic:0
而当窗口最大化时,则是:
WindowState:2
IsIconic:0
不知何故?
 
你取的是枚举类型的序号当然是数字,布尔也是0和1。它们的含义是不能直接显示出来的。

var
state1,state2:string;
begin
case form1.WindowState of
wsNormal : state1 := 'Normal';
wsMinimized : state1 := 'Minimized';
wsMaximized : state1 := 'Maximized';
end;

if IsIconic(form1.Handle) then
state2 := 'True'
else
state2 := 'False';

form1.Memo1.text:=form1.Memo1.text+#13#10+'WindowState:'+state1;
form1.Memo1.Text:=form1.Memo1.text+#13#10+'IsIconic:'+state2;
end;
 
对状态作转换就行了
 
以此类推,其他的状态参数也可作同样的转换。
 
我试过此方法:
结果是:
1、最小化和正常显示时:state1 ='Normal',state2=false
2、最大化时:state1='Maximized',state2=false
3、利用ord,枚举类型的序号当然是数字,但有:
TWindowState = (wsNormal, wsMinimized, wsMaximized);
ord(wsNormal)=0
ord(wsMinimized)=1
ord(wsMaximized)=2
4、Booltostr得到的当然是0或1,但应是:
Booltostr(true)=1;
Booltostr(false)=0;
即:
IsIconic(form1.Handle)=true时,为1,反之为0
可结果却不是这样!
 
在最小化的时候你是这么得到这个数据的,因为当时不可见。
 
我将程序设置了热键,
当我按下热键后,就会执行上面的程序。
 
可以在窗口最小化的时候作些处理:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
private
{ Private declarations }
procedure myMessage(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.myMessage(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
ShowMessage('最小化了!');
inherited;
end;

end.
 
以上方法是可以。但需要增加一个变量。
因为我并不是在窗体最小化时执行程序。
而是执行程序时“检查窗体是否为最小化”。
我想用[purple]程胜[/purple]等的方法行不通是不是因为Delphi本身的原因?

如果一周后再没有人能给出较好的方法,我就[red]结贴[/red]了。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
704
import
I
后退
顶部