Show 与 ShowModal 区别

来源:互联网 发布:如何ringerlink数据库 编辑:程序博客网 时间:2024/04/30 06:04


    最近遇到了问题,就是在form关闭时,需要判断一下是以哪种方式打开的然后分别处理,所已就看了一下ShowModal方法的源码,我截取了一段核心的


    Show;    try      SendMessage(Handle, CM_ACTIVATE, 0, 0);      ModalResult := 0;      repeat        Application.HandleMessage;        if Application.FTerminate then ModalResult := mrCancel else          if ModalResult <> 0 then CloseModal;      until ModalResult <> 0;      Result := ModalResult;      SendMessage(Handle, CM_DEACTIVATE, 0, 0);      if GetActiveWindow <> Handle then ActiveWindow := 0;    finally      Hide;    end;

大家一看就会明白,它也是先调用Show方法, 然后对他发送CM_ACTIVATE 消息,使当前窗体为活动窗体

关键是下面那个循环,这个循环导致你只有关闭了该窗口之后,才能操作其他之前打开的窗口。


关于判断打开的方式,可以用 Form1.FormState这个属性,这是个集合属性,如果Form是以ShowModal打开的,那边fsModal一定在集合中,所以

代码应该是 

if fsModal in self.FormState then     ShowMessage('I am opened by ShowModal method')   else     ShowMessage('I am opened by Show method');

能力有限,分析至此。

原创粉丝点击