怎样在一个form的oncreate or onshow or onactive中执行close?(50分)

  • 主题发起人 主题发起人 jbas
  • 开始时间 开始时间
J

jbas

Unregistered / Unconfirmed
GUEST, unregistred user!
即我执行完一段程序后,让它自动关闭!
 
可以定义一个关闭窗口的消息,然后再你需要的时候sendmessage( )就可以了
 
老兄能否讲的明白点。
那为什么这样不行:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;
××××××××××××××
procedure TForm2.FormActivate(Sender: TObject);
begin
close;
end;

 
在那些事件中
PostMessage(Self.Handle,WM_Close,0,0);

SendMessage是绝对不行的,跟Close效果一样,会有异常抛出
 
用timer,我都是这么做的

放个timer,enabled=false,interval=100
timer.timer()
begin
Close;
end;

FormCreate;
begin
...
Timer1.Enabled := True;
end;
 
sendmessage(self.Handle,wm_close,0,0);
不会抛出异常,但确实关不闭。谢谢szf。
to qdyoung:thanks!这都能想到,佩服!
但各位能说说我的为什么不行呢?
谢谢!一会就发分:)
 
先给分了,真希望各位高手告诉我why?
 
to jbas:
因为Delphi的TCustomForm类实质上是调用的WINDOWS的API实现窗口显示的,在它的
建立,显示,激活过程中,分别有事件句柄给我们编程。WINDOWS本身对窗口的操作就有
限制,不是可以乱来的,DELPHI虽然帮我们封装了它,我们仍然是受制于WINDOWS,所以
在那些特定的事件(基本上是窗口建立过程)中,是不能直接闭它的。
PostMessage把一个关闭窗口的消息排队在最后,相当于一个窗口已经完全正常了,
就收到这个关闭的消息,所以自己乖乖的关闭了。
SendMessage是一个立即消息调用和返回过程,跟调用函数差不多,只是这个函数
只有一个Message的参数而已。
对于定时器的作法,跟PostMessage差不多,只要中途不出其它消息,差异就只不过
延时了100ms。
 
谢谢szf的教诲!使我对PostMessage和SendMessage有了更深的映象。.
怎么才来大富翁呀?不然受你帮助人可更多了:)
 
我才知道有大富翁这个BBS呀 :)
这里的高手很多,我也觉得很受益的。
对了,我只是对WINDOWS编过程,可能编程思想在linux的kylix环境下不适用的。
 
后退
顶部