很长时间没在大富翁提问了,问一个GetWindowRect取delphi编写的程序时,结果是0*0的问题(100分)

  • 主题发起人 主题发起人 roc
  • 开始时间 开始时间
R

roc

Unregistered / Unconfirmed
GUEST, unregistred user!
用了刘麻子的代码<br>http://www.2ccc.com/article.asp?articleid=1393<br><br>发现对Delphi编写的程序,全部取不到窗体的大小,显示为0*0<br>包括刘麻子的程序本身也取不到Delphi编写的程序的窗体大小<br><br>看他的代码,用的是GetWindowRect函数,也没有错误啊,Left和Top都能正确判断,但Right、Bottomt就和Left、Top重合。结果判断出来的宽高就为0*0<br><br>这明显就有问题了,请大家讨论一下。
 
我想问题应该是出在这里:<br>李维在INSIDE VCL中说:&quot;TApplication类会在内部创建一个秘密窗口.这个窗口的大小是零,而且是DELPHI的WINDOWS应用程序的主窗口,DELPHI应用程序的主窗体事实上是这个秘密窗口的子窗口.&quot;(电子工业版本,inside VCL P188)<br><br>所以GetWindowRect取到的总是主窗口即秘密窗口的大小,结果总是0.
 
不明白,我的怎么可以正确取值?
 
to:beamgx<br>这样的话怎么解决呢?<br><br>to:tianliangle2003<br>发你的程序给我看看行吗?<br>drroc@21cn.com
 
var<br> h:thandle;<br> r:trect;<br>begin<br> h:=findwindow(nil,pchar(edit1.Text));//edit1.text指定窗体标题<br> if h&lt;=0 then exit;<br> GetWindowRect(h,r);<br> memo1.Lines.Add('Left'+inttostr(r.Left));<br> memo1.Lines.Add('Top'+inttostr(r.Top));<br> memo1.Lines.Add('Width:'+inttostr(r.Right - r.Left));<br> memo1.Lines.Add('Height:'+inttostr(r.Bottom-r.Top ));<br>end;
 
按Application.Handle取的话,得到的值Left, Top是屏幕的中心,宽和高都是0,因此应该取Form1.Handle才是对的<br>var<br> &nbsp;R: TRect;<br>begin<br> &nbsp;GetWindowRect(Application.Handle, R);<br> &nbsp;ShowMessage(IntToStr(R.Left) + ',' + IntToStr(R.Top) + ',' + IntToStr(R.Right) + ',' + IntToStr(R.Bottom) + ',');
 
楼上的和楼上的楼上,你俩是来抢分的吧,请看清楚题目
 
不是很明白你的意思?
 
到这时下载回来运行一下就知道什么意思了<br>http://www.2ccc.com/article.asp?articleid=1393
 
并不是无法获得,而是确实为0,不知道这个解释合理不
 
后退
顶部