怪怪怪,真奇怪!改变屏幕分辨率时竟然出现“list index out of bounds[0]”错误!?(88分)

Z

zl

Unregistered / Unconfirmed
GUEST, unregistred user!
怪怪怪,真奇怪!改变屏幕分辨率时竟然出现“list index out of bounds[0]”错误!?<br>我的代码如下:<br>function DynamicResolution(X, Y: word): BOOL;//改变显示分辨率 例如:DynamicResolution(800, 600);<br>var &nbsp;lpDevMode: TDeviceMode;<br>begin<br>&nbsp; Result := EnumDisplaySettings(nil, 0, lpDevMode);<br>&nbsp; if Result then<br>&nbsp; begin<br>&nbsp; &nbsp; lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;<br>&nbsp; &nbsp; lpDevMode.dmPelsWidth := X;<br>&nbsp; &nbsp; lpDevMode.dmPelsHeight := Y;<br>&nbsp; &nbsp; Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;<br>&nbsp; end;<br>end;<br>当使用DynamicResolution(800,600)或DynamicResolution(1024,768)时不会出现任何问题。<br>可使用 DynamicResolution(640,480)时总是在在第一次调用该语句时出现如题的信息,<br>以后再调用就不会出现了。<br><br>怪怪怪!!!
 
如果是执行最后一句后出现此错的话,我的分析是:<br>是VCL的BUG,<br>问题应该在TCanvas类,<br>这句话是说数组下标超界(为0),可能当TCanvas在处理重画消息时,Pixels[x,y]的上<br>下标超界造成的。<br>
 
下标超界不会产生“list index out of bounds[0]”错误。<br>也许不一定是这个函数有问题,你的程序中还用到了List吗?
 
各位,我没有用到除上述代码之外的任何东西,只是在一个新工程上测试如上代码的。<br>没有用到教父也说的"List",<br>我想可能douh兄所言有理,不过如何解决呢?
 
这个问题我也常遇到
 
&nbsp;我同意douh兄的,如果想要解决问题,估计需要刷新canvas之类的东西
 
你的代码我测试过了,没出现你所说的现象,640*480也正常<br>我用的是PIII700+Winnt4.0+Pack5,Delphi+d5entupdate
 
感谢Fyx兄的测试,我想可能在NT下没有问题,感谢Fyx兄。<br>还望各位继续发表高见,我在这里等着呢,很急!
 
我会不断将这个问题提前,直到得到解答为止。
 
初始化lpDevMode
 
这是delphi的bug,我碰到了好几回了!!!
 
我是98,可是刚刚测试了一下,成功了
 
到<br>http://www.inprises.com可以下载Delphi 5 Ent版的UpdatePack 1,估计装了以后<br>就没问题了。
 
超界错误,我也遇到过 把工作区设大一些能马虎过去<br>同意douh!
 
接受答案了.
 
顶部