首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-03-21 
关于CopyRect()的两个问题。第一个:case7://横向百叶窗ii+Stepif(i dh)for(inta0a dh_sizea++){Imag

关于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了一次

热点排行