我在窗体中,有一个panel,此pannel会在拖动滚动条时 改变位置,这样就会出现闪烁的问题。上网查了好久,好像有点眉目,应该是WM_ERASEBKGND。我尝试着截获了Form1    pannel   panel.parent 的WM_ERASEBKGND消息,可是移动滚动条时(panel位置随之改变)依然会闪烁。
    请高手指点,并谢绝看到‘闪烁’就回答双缓冲的同学。

解决方案 »

  1.   

    设置双缓存!
    DoubleBuffer := true;
      

  2.   

    如果不能说“双缓冲”那我就无话可说了,LZ却非要去纠结WM_ERASEBKGND想必大伙儿都笑了。
      

  3.   

    好吧,我错了
    那请问你  设置谁为双缓冲。
    我都试过了,不行的。我这个是拉滚动条,且移动panel位置造成的。
      

  4.   


    窗体、panel panel.parent 的双缓冲我都开了  
      

  5.   

    我贴点代码吧
    procedure TForm_FabricReport.MyProc_Scroll(var message: TMessage);
    begin
      if message.Msg = WM_HSCROLL then
      begin
        
        pnl_tool1.Left := Self.Width - pnl_left.Width- pnl_tool1.Width - 30 + Self.HorzScrollBar.Position;
        pnl_tool2.Left := Self.Width - pnl_left.Width- pnl_tool2.Width - 30 + Self.HorzScrollBar.Position;  end;
      FOldProc(message);
    end;
       pnl_tool1  pnl_tool2 闪烁
      

  6.   

    同问。
    另外 个人感觉 应该不用调用FOldProc...
      

  7.   

    这个事件是我重载windproc,截取WM_HSCROLL
    不调用滚动条就无效了 
      

  8.   

    啥米东东需要重载windproc
    俺不知道你是要做啥
    如果只是滚动条控制panel
    为啥不用TScrollBox中放一个panel
    不用设置双缓存也没有闪烁!
      

  9.   

    TScrollBox 上放个Panel中不?
    不用重载windproc也不用WM_ERASEBKGND
    还不用双缓存!
    呵呵!
      

  10.   

    不用搞的那么复杂,以前我也遇到过这个问题,你可以用第3方控件,ExtImage,来解决。
    很好用,很小,很方便。和你用image一模一样
      

  11.   

    FOldProc是原来的处理函数,不过我觉得不调用也行