<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card id="discuz_wml" title="CnPack Forum">
<p>#1 Delphi 2009 VCL 源码中一处可能导致死循环的 Bug<br /><small>Delphi 2007/2009 的 source\Win32\vcl\Forms.pas 中，GetNonToolWindowPopupParent 函数实现部分：<br />
<br />
function GetNonToolWindowPopupParent(WndParent: HWND): HWND;<br />
begin<br />
  Result := GetParent(WndParent);<br />
  while (Result &lt;&gt; 0) and (GetWindowLong(Result, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = WS_EX_TOOLWINDOW) do<br />
    Result := GetParent(WndParent);<br />
    ... // 以下省略<br />
    <br />
很明显，如果第一次进入 while 时判断成立，那么 Result 的值就始终是 WndParent 的 Parent ..</small><br />
</p>
<p>#1 <a href="index.php?action=thread&amp;tid=2414&amp;start=0&amp;offset=497&amp;sid=2veNHu">&gt;&gt;Next Page</a><br />
<br />Forum:<a href="index.php?action=forum&amp;fid=28&amp;sid=2veNHu">技术板块灌水区 ...</a>
<br />Thread:<a href="index.php?action=thread&amp;tid=2414&amp;sid=2veNHu">Delphi 2009 VCL 源码 ...</a>
<br />Next Thread:<a href="index.php?action=thread&amp;tid=2094&amp;sid=2veNHu">Delphi面向对象学习随 ...</a>
</p>
<p align="center"><br /><a href="index.php?sid=2veNHu">Home</a><br />
<a href="index.php?action=login&amp;sid=">Login</a><br /><br />
<small>Powered by Discuz!</small></p>
</card>
</wml>