DelphiX 页面丢失如何解决(100分)

  • 主题发起人 主题发起人 Miros
  • 开始时间 开始时间
M

Miros

Unregistered / Unconfirmed
GUEST, unregistred user!
DelphiX 页面丢失如何解决

记得以前在哪看到过 没有注意 现在找不到了。

高手帮帮忙
 
感兴趣,关注一下。楼主把问题描述的详细一些吧。
 
DirectX不是可以Restore
 
程序在某个时候创建了若干个DirectDrawSurface 这个程序并非全屏 是窗口化的 当Form被移动的时候 这些Surface就丢失了 如果继续使用这些Surface就出错了。
 
即使程序全屏 但是使用Alt+Tab将程序最小化再还原后Surface同样会Lost 但是程序无抱错
 
我的BLOG上(http://www.huosoft.com)有解决方法,但这两天打不开,我把它贴在这里:
DelphiX在全屏模式下Alt+Tab一次后,页面丢失的问题
[分类:编程园地][发表日期:2006-3-1] [发表:huasoft] [查看:423]

可能很多朋友曾经遇到过这样的问题:DelphiX在全屏模式下Alt+Tab切换出来后,再回到原来的窗口时,页面变成一片空白。这对游戏玩家来说是难以忍受的。
火人专门为此搜索了不少资料,发现DelphiX一直存在这样的问题,但大都用屏蔽ALT+TAB来解决,估计这是DELPHIX的一个小BUG。
但火人不太喜欢用这种比较“霸道”的方式解决,这会给使用者带来相当的不方便。经多次测试,火人发现了产生这类问题的条件和避免出现这类问题的方法(但不能说彻底解决,因时间有限,无法解释原因,希望高手能进一步研究并给出理论上的解释),与朋友们共享:

先下载如下例程:
点击下载此文件
此例程运行后一切正常,但Alt+Tab切换出来后,再回到原来的窗口时,页面就会变成一片空白,要避免此错误,火人发现如下两个方法:
1、设DXDraw.Options := DXDraw.Options + [doFlip];但如果Form上有其它VCL控件(如TEdit)时,VCL控件就不能正常显示。
2、设:DXDraw.AutoSize:=False,另外为了DXDraw能按正确的分辨率显示,在FormCreate中加入:
程序代码: [ 复制代码到剪贴板 ]
DXDraw.SurfaceWidth := DXDraw.Display.Width;
DXDraw.SurfaceHeight := DXDraw.Display.Height;

此方法在流行的传奇2程序上测试通过。


引用内容:
另经网友测试,也可使用如下方法:
关键是在ALT+TAB之后要把窗口还原到窗口模式:
DXDraw.Finalize;
DXDraw.Options := DXDraw.Options - [doFullScreen];
DXDraw.Initialize;
窗口激活时再设置为全屏模式如下:
DXDraw.Finalize;
BorderStyle := bsNone;
DXDraw.Options := DXDraw.Options + [doFullScreen];
InitDXDraw;
 
Finnalize和Int..的时候如果在画图呢?
 
恩不错 不过创建的超宽的Surface还是不能用了
如果之前创建的Surface宽度 或高度大于显示器的的宽或高 这个Surface还是不行
 
接受答案了.
 
后退
顶部