请教各位:下面是我在屏幕上的某一坐标范围类画的一些点  
  ADODS_TrendGraph.First;
  X := (Img_TrendGraph.Width - 5 * 120) div 2 + 1;//46
  while not ADODS_TrendGraph.Eof do
  begin
    DataValue := ADODS_TrendGraph['xl'];
    Y := (Img_TrendGraph.Height - 30) - DataValue;//290-数据值
    Img_TrendGraph.Canvas.Pixels[X, Y] := clWhite;
    Img_TrendGraph.Canvas.Pixels[X + 1, Y] := clWhite;
    Img_TrendGraph.Canvas.Pixels[X + 2, Y] := clWhite;
    X := X + 5;
    ADODS_TrendGraph.Next;
  end;我在下一次再画新的点的时候应该抹除上一个,于是我用了下面的语句:
Img_TrendGraph.Canvas.Brush.Style := bsClear;
Img_TrendGraph.Canvas.Brush.Style := bsSolid;
Img_TrendGraph.Canvas.Brush.Color := clblack;
Img_TrendGraph.Canvas.Rectangle(46, 20, 645, 290);//坐标范围
但是这样的效果不是很好,请教各位有没有更好的办法,谢谢。说简单一些:在屏幕上的某一个坐标内画上一些离散的点,在发生某一事件的时候,清除现有坐标内的点,然后把新的点画上去。

解决方案 »

  1.   

    to: zwjchina(蒲石) 
    方法一会不会太复杂了啊
    方法二不是我要的效果,因为原来的点我们就是要放弃的,新的点与旧点是不一样的,
    我的做法是,在坐标内点的分布区域用画刷重新画一次背景色,大小为坐标的范围,但是这样做会不会因为图像每次都层叠而产生隐患呢?
    谢谢!
      

  2.   

    //在画布上绘字
    function DispOnDesk(Str,Font:String;x,y,FontSize:Integer;DeskCanvas:TCanvas):Boolean ;
    begin
      deskcanvas.Font.Name := Font;
      deskcanvas.Font.size := FontSize;
      deskcanvas.TextOut(x,y,Str);
      beginpath(deskcanvas.Handle);
      deskcanvas.TextOut(x,y,Str);
      endpath(deskcanvas.Handle);
      deskcanvas.Pen.Color :=RGB(0,0,160);
      StrokePath(deskcanvas.Handle);
    end;procedure TForm1.Timer3Timer(Sender: TObject);
    //画布清除
    procedure ClearDesk(x,y,x1,y1:Integer);
    var R: TRect;
    begin
      R := Rect(x,y,x1,y1);
      RedrawWindow(0,@R,0, RDW_INVALIDATE or RDW_ALLCHILDREN);
    end;//在画布上绘字
    function DispOnDesk(Str,Font:String;x,y,FontSize:Integer;DeskCanvas:TCanvas):Boolean ;
    begin
      deskcanvas.Font.Name := Font;
      deskcanvas.Font.size := FontSize;
      deskcanvas.TextOut(x,y,Str);
      beginpath(deskcanvas.Handle);
      deskcanvas.TextOut(x,y,Str);
      endpath(deskcanvas.Handle);
      deskcanvas.Pen.Color :=RGB(0,0,160);
      StrokePath(deskcanvas.Handle);
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var s,StrYB,StrWord,StrComm:String;
    i,x,y:integer;
    R: TRect;
    deskcanvas:TCanvas;
    begin
         DeskCanvas:=Tcanvas.create;
         deskcanvas.Handle:=GetDC(0);
          x:=screen.Width div 5;
          y:=Screen.Height div 2 -200;
          ClearDesk(x,y,x+2000,y+300);  //清除画布
          Sleep(10)  ;                  //很重要的一句,要不就会显示后就消失
          SetBkMode( deskcanvas.Handle, TRANSPARENT );
          deskcanvas.Font.style := [fsBold];
          deskcanvas.Font.Color :=RGB(255,0,0);
          x:=x;      y:=y+100;
         DispOnDesk('兄弟们,中秋节快乐...'+strYB+'!','DFPhonetic',x,y,45, deskcanvas) ; 
          x:=x;    y:=y+60;
          DispOnDesk(strcomm,'黑体',x,y,35, deskcanvas) ; 
         ReleaseDC(0,deskcanvas.Handle);
    end;
      

  3.   

    谢谢两位的指点,我用fillrect就把他们给实现了,虽然方法没有两位的好,但功能是有了,有什么隐患以后发现了及时的改正过来,谢谢两位。
      

  4.   

    谢谢两位的指点,我用fillrect就把他们给实现了,虽然方法没有两位的好,但功能是有了,有什么隐患以后发现了及时的改正过来,谢谢两位。