cvs := TCanvas.Create;
  cvs.Handle := GetWindowDC(Panel1.Handle);
//  cvs.Draw(0,0,bakImg);
  hei:=0;
  repeat
    cvs.Draw(0,hei,TopLftImg);
    wid:=TopLftImg.Width;
    repeat
      cvs.Draw(wid,hei,TopRigImg);
      wid:=wid+TopRigImg.Width; 
    until wid>=width;    inc(hei,TopLftImg.Height);
  until hei>=Panel1.Height;
  ReleaseDC(Panel1.Handle, cvs.Handle);
  cvs.Free;程序一开始 就 执行 这个,  但 发现 图上 的图片 晃了一下就不见了。

解决方案 »

  1.   

    但是 直接 画在 Form上 就 不会 不见啊。 为什么??
      

  2.   

    画在Form上也会不见的,你最小化再恢复,就可以看到了。
      

  3.   

    linzhengqun(风):  我在 resize事件中进行重画了啊。
      

  4.   

    linzhengqun(风):  我在Form的 resize事件中进行重画了啊,所以Form上不会不见,但在panel上就不见了。是不是应该在 panel的resize事件中 也要重画??
      

  5.   

    应该把代码写有onPaint事件中.不然你的表单只要被别的东东挡一下后就没有你画的图了
      

  6.   

    这其实和系统有的自动刷新有关系的(也可以叫重画)。WINDOWS是在接受到WM_PAINT消息后就会重画窗口(指有句柄的控件)。在FORM ,PANEL上画了东西,想要保持的话,就必须截获WM_PAINT消息(还有其他的重画消息),在消息事件中重画就可以了。还有个简单的方法,就是使用TIMAGE,原因是TIMAGE将图画保存在TBITMAP中,并且TIMAGE可以自动接受系统重画的消息,所以你只要在TIMAGE上画图就可以了,而不需要考虑重画的问题。
      当然也会有些问题,不过只要不要十分强调效率话,一般的机器都没有问题。记得使用DoubleBuffered模式。