最近遇到了问题,就是在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');
能力有限,分析至此。
本文探讨了在Delphi中如何通过Form1.FormState属性来判断窗体是使用ShowModal还是Show方法打开,并据此进行不同处理。通过核心代码示例说明了如何实现这一功能。

98

被折叠的 条评论
为什么被折叠?



