请教!用以下代码我可以在image里有一个随鼠标移动的十字架出来,但在image有图的情况下,这十字架的颜色就变了,如何让它不变色呢?procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);  procedure DrawCross(AX, AY: Integer);
  begin
    with image, Canvas do
    begin
      Pen.Color := clYellow;
      Pen.Style := psSolid;
      Pen.Mode := pmXor;
      Pen.Width := 1;
      MoveTo(ax, 0);
      LineTo(ax, 600);
      MoveTo(0, ay);
      LineTo(800, ay);
    end;
  end;begin
  if ismove = True then
  begin
    Image.Parent.DoubleBuffered := True;
    if (OldX <> -1) then
    begin
      DrawCross(OldX, OldY);
      OldX := -1;
    end;
    if x > 0 then
    begin
      DrawCross(X, Y);
      Image.Cursor := crCross;
      { store old position }
      OldX := x;
      OldY := y;
    end;
  end;
end;

解决方案 »

  1.   

    为什么使用Pen.Mode := pmXor; 
      

  2.   

    pmXor   输出颜色为canvas背景色和画笔颜色的异或,当画布有图时,画笔颜色和画布颜色进行异或运算,肯定和原始颜色不一样了
      

  3.   

    因为我是需要做一个随鼠标移动的十字架,我试过用其它的(pmCopy),这十字架就会出现一大堆不消失的!
      

  4.   

    去掉Pen.Mode := pmXor; 
      

  5.   

    楼上,如果我去掉Pen.Mode := pmXor之后,我的十字架就会出现一大堆不会消失的十字架了!不行啊!
      

  6.   

    你在清除原来线的时候用pmNotXor,画新线时设为常规模式
      

  7.   

    给你一个方法,可能不能直接用擦除线的方法了,先把图像保存到流中,然后移动时先Bitmap.LoadFromStream(stream),然后在画自己的线,不知你的图像是不是很大,会不会产生闪烁
      

  8.   

    不要在Image上画图,在TPaintBox的OnPaint中画Image和其它图形,当状态改变的时候调用Invalidate。
      

  9.   

    也可以从TCustomControl继承一个类,因为它有窗口句柄,可以调用InvalidateRect。
    很久没用GDI了。
      

  10.   

    楼上,你所说的方法!我还不太了解!能不能说详细一些呢!谢谢!
    我需要在image里不断的增加一些图,然后在这个图之间画一些线!
      

  11.   

    我一般这么做,首先,定义一个基类:
    TGeometry = class
    public
      procedure Draw(ACanvas: TCanvas); virtual; abstract;
      ...
      ...
    end;从这个基类派生出一系列的图形:
    TLine = class(TGeometry)
    private
      FBegin: TPoint;
      FEnd: TPoint;
    public
      procedure Draw(ACanvas: TCanvas); override;
    end;TYourImage = class(TGeometry)
    TCircle = class(TGeometry)
    ....
    ....然后需要有一个TList保存这些类的实例,在绘图控件的OnPaint事件中画出所以这些图形,在其它事件中建立、删除、改变这些图形的属性。
      

  12.   

    楼上你的建议很好!
    我正在用PaintBox和image组合一起用!谢谢
      

  13.   

    但还是解决不了变色的问题!
    如果我是用
      paintbox1.invalidate;
      paintbox1.update;
    是可以不变色了,但却把我画的线也给清空了,暂时没有做到两全其美啊!可惜!