读书人

关于CopyRect()的两个有关问题

发布时间: 2012-03-21 13:33:14 作者: rapoo

关于CopyRect()的两个问题。
第一个:
case 7: //横向百叶窗
i=i+Step;
if (i <dh)
for (int a=0;a <dh_size;a++)
{
Image1-> Canvas-> CopyRect(Rect(0,a*dh,width,a*dh+i),
bit1-> Canvas,Rect(0,a*dh,width,a*dh+i));
}
else
{
Image1-> Canvas-> Draw(0,0,bit1);
Timer1-> Enabled=false;

}
break;//为什么不是逐叶画?就是画完一叶再画下叶,这是我对
//这个for语句的理解。结果是所有的同时画。
第二个:
case 5: // 水平交错
if (i <=width){
y=i;
while (y > 0){
bit2-> Canvas-> CopyRect(Rect(y-1,0,y,height),
bit1-> Canvas,
Rect(width-i+y-1,0,width-i+y,height));
bit2-> Canvas-> CopyRect(Rect(width-y,0,
width-y+1,height),


bit1-> Canvas,
Rect(i-y,0,i-y+1,height));
y=y-2;
}
Image1-> Canvas-> Draw(0,0,bit2);
i+=Step;
}
else
Timer1-> Enabled=false;
break;//加了一个y,怎么保证画完之后,两边合起来正好是一幅
//完整的画?

[解决办法]
第一个for中加Sleep(300);就是加延时
[解决办法]
加延时或者加 Application-> ProcessMessages();
[解决办法]
加完延时要通知系统去画它,并显示它。Application-> ProcessMessages();
[解决办法]
第一步:
拷贝原图的(0,0,width,i):宽度为width,高度为i 的长方条到Image1的相同位置上

第二步:
拷贝原图的(0,dh,width,dh+i):宽度高度同上,位置下移dh像素 的长方条到Image1的相同位置上.

第三步:
拷贝原图的(0,dh*2,width,dh*2+i):宽度高度同上,位置再下移dh像素 的长方条到Image1的相同位置上.

...
这个循环执行完后是一行行的条条, 随着Timer里的i慢慢变大, 这里的条条就慢慢变粗. 最后盖满.而且你的代码还不放心,又再Draw了一次

读书人网 >C++ Builder

热点推荐