在线请教:ScrollWindowEx 为啥总有几次不成功!?

ThenLong 2010-01-11 03:46:06
在线请教:ScrollWindowEx 为啥总有几次不成功!?
Delphi7 XP系统
Canvas是TPanel的

从A区域 srcRect -> B区域 dstRect 剪切

现象是
成功的 能够滚动画面 B区域显示A区域的图像
不成功的 则B区域显示黑块!(黑色矩形)

交换srcRect和dstRect的值

成功的还是A区域成功显示B区域的图像
失败的则A区域显示黑块!

------------
b := ScrollWindowEx(self.Panel3.Canvas,
x1-x2,y1-y2,
@srcRect,
@dstRect,

rgn,
@updateRect,
SW_ERASE);

b的值为 1 2 3 都是正确值

...全文
283 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThenLong 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yflk 的回复:]
好像是Delphi与图形显卡的内存数据交换时出问题了(是系统底层的问题),你将这部分内容用asm写,看看行不。
[/Quote]

应该与这无关
经过试验,虽然没有解决,但是
发现了规律

b := ScrollWindowEx(self.Panel3.Canvas,
x1-x2,y1-y2,
@srcRect,
@dstRect, //这个参数比较关键
rgn,
@updateRect,
SW_ERASE);
dstRect如果比srcRect小,或者dstRect没有包含srcRect和dstRect(有点绕口)
则黑屏,于是做了修正
将srcRect修正使得与dstRect相适应(w,h一样大)
然后再计算srcRect与dstRect的合并矩形 赋值给dstRect
经过测试,还真有效果,不再黑块了!
ps:与同事也讨论了,认为这判断及修正本应该是API内部的事情啊,
很明显 现在修正后ScrollWindowEx能正常工作了!就算没修正,也应该正常工作的!
但是没找到原因,暂时就先这么将就了。。。

ps:MSDN上说dstRect参数 作用是限制滚动区域的绘图
从此区域外滚动到区域内 将绘图
从区域内 到区域外 不绘图
。。。
ThenLong 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dd_zhouqian 的回复:]
ScrollWindowEx
UpdateWindow (hwnd);[/Quote]

谢谢,应该不是这个问题
其实我的代码是照着c语言的rdp客户端用delphi写的

c语言的代码好的很- -

代码基本上一样,就是scrollWindowEx遇到了问题-_-!
yyl_211 2010-01-12
  • 打赏
  • 举报
回复
UP
YFLK 2010-01-12
  • 打赏
  • 举报
回复
好像是Delphi与图形显卡的内存数据交换时出问题了(是系统底层的问题),你将这部分内容用asm写,看看行不。
kfcoffe 2010-01-11
  • 打赏
  • 举报
回复
mark
dd_zhouqian 2010-01-11
  • 打赏
  • 举报
回复
ScrollWindowEx
UpdateWindow (hwnd);
dd_zhouqian 2010-01-11
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/bb787531%28VS.85%29.aspx
hjkto 2010-01-11
  • 打赏
  • 举报
回复
up
cuixd2020 2010-01-11
  • 打赏
  • 举报
回复
不会,帮顶

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧