在FormPaint上绘图,在台式机上没这个问题,到了笔记本上绘制的图形就会出现问题,也不是所有笔记本,试过在同事的笔记本上就没事,比如在上面show个子窗体,绘制的线都映到这个子窗体上面了,大家遇到这个问题没有呢,绘线就是在FormPaint事件里简单moveto,lineto!有遇到类似问题的朋友帮帮忙!顺便祝大家愚人节快乐!不过千万别误会哦,我的问题是真的!!!~~

解决方案 »

  1.   

    貼下你寫的代碼看下。 應該不會的。是不是取過 GetDC,   getWindowDC  這些
      

  2.   


    没有啊,代码不知从何帖起,只是在formpaint事件里,moveto,lineto.还有把它放大缩小,只是将绘图缓冲的数据放大倍数,绘图还是一样的呀!
      

  3.   


    procedure DrawMovingPoint(Mx,My: Integer)stdcall;
    begin
      //清除上次绘出的十字型指针
      Form1.Canvas.Pen.Color := EraseColor;//clBtnFace;
      Form1.canvas.MoveTo(MmouseX,upscrY);
      Form1.Canvas.LineTo(MmouseX,lowscrY);  //mi2 := upscrY;
      Form1.Canvas.Pen.Color := MesansuPointColor;//clYellow;
      Form1.canvas.MoveTo(MX,UpscrY);
      Form1.Canvas.LineTo(MX,LowscrY);
      //备份当前鼠标XY值,擦除十字型指针
      MmouseX := Mx;
      MmouseY := My;
      //计算当前指针光标位置的幅值和时间
      Form1.Timer1.Enabled := True;
    end;
      

  4.   

    能不能给我推荐个画图好的方式呢,我都是Paint的,屏幕上线还有点闪!
      

  5.   

    在FormCreate里加上DoubleBuffered := True;
    可以解决闪烁的现象如果你只是简单的MoveTo LineTo建议不要放到Onpaint事件里吧
    放到MouseDown,MouseUp事件里
    放到OnPaint里会不停的执行画图的代码
    MouseDown\MouseUp只让它在MouseUp的时候执行一次
      

  6.   


    不要放到 OnPanit  裏面, 應該是在計算 Rect 時,出錯了吧。
      

  7.   

    楼主用GDI画图吧 方便多了
      

  8.   

    感觉大家说的都不在点子上,OnPaint会不会有优先级呢,比如在主窗体绘图区域,Show个子窗体,线映到子窗体上了,而且这个问题在我们公司所有机器上,都没出现,包括部分笔记本,就是新买的这台上有这个问题,挺郁闷的!DoubleBuffered := True; 不是这个问题,说不在Onpaint里画,倒是有道理,但因为要做图形,上下移动,对称等操作,还有更新之类的,不停画虽然笨了点.但效果还不错,因为做图形的每一个变换,对应的都是缓冲里的数据在变换,这个软件是公司内部进行工业控制调试用的,所以数据跟图形的一一对应非常重要,换种绘图方式正在考虑!谢谢各位关注!