procedure TForm1.WMEraseBkng(var MSg:TWMEraseBkgnd);
begin
     Msg.Result:=1;
end;   上面这个函数是为了在屏幕上取色用的,它可以把整个屏幕载入窗口,这时,屏幕就像被锁定一样。移动窗口时,也会在屏幕上留下痕迹。    请问,不需要取色的时候,怎样让这个过程失效,或者说禁用它,让屏幕恢复正常,需要取色时再用。

解决方案 »

  1.   

    做个标记,比如真假,取色为真,取色完毕为假if true then
    Msg.Result:=1;
      

  2.   


    试过了,不行,就算整个Msg.Result:=1;这一句不要,也一样,甚至Msg.Result:=0;,也一样。只有删除整个过程,屏幕才正常。这个过程应该叫屏幕重画吧?
      

  3.   

    WMEraseBkng是当屏幕需要擦除背景时发出的消息。你如果仅仅是需要取色,把屏幕截图,载入你所说的form中,然后对这个form内的坐标点取色。根本不需要在WMEraseBkng消息上做文章。
      

  4.   


    我只是取一个点的颜色,而是在两个屏幕间不停地切换,不停地取色,如果用你的方法截入Form,那是相当耗时的,并且我切换的屏幕是两个外部程序的窗口。
      

  5.   

    根本不用窗体,用 Tbitmap 在内存里面不能取吗?
      

  6.   


    这个可以有。
    再不行,可以只截取目标像素那一点到TBitmap中
      

  7.   


    sailxia,能稍稍给些提示吗?最好贴点代码上来研究