随鼠标移动的十字线的快速画法

在鼠标移动事件中画当前点的十字坐标线时,为抹掉老线常采用刷新画面的方法,这样就产生了非常严重的闪烁现象。因此,我们采用在画新线前将老线抹去的方法就能很好的解决这个问题,而且速度非常快。现举例如下:
var  
  OldX, OldY: Longint;// 使用前初始化OldX:=-1;   

procedure TfrmMain.PaintBoxCMouseMove(Sender: TObject; Shift: TShiftState;   
  X, Y: Integer);   

  Procedure DrawCross(AX, AY: Integer);   
  begin  
    With PaintBoxC.Canvas do  
    begin  
      Pen.Color := CrossColor;   
      Pen.Style := CrossStyle;   
      Pen.Mode := pmXor;   
      Pen.Width := 1;   
      MoveTo(AX, 0);   
      LineTo(AX, PaintBoxC.Height);   
      MoveTo(0, AY);   
      LineTo(PaintBoxC.Width, AY);   
    end;   
  end;   

begin  
  if (OldX <> -1) then  
  begin  
    DrawCross(OldX, OldY); { 画旧十字线 }  
    OldX := -1;   
  end;   
  { 检查当前鼠标点是否在指定范围内 }  
  if PtInRect(Rect(0, 0, PaintBoxC.Width, PaintBoxC.Height), Point(X, Y)) then  
  begin  
    DrawCross(X, Y); { 在当前鼠标点画十字线 }  
    { 保存旧鼠标点 }  
    OldX := X;   
    OldY := Y;   
  end;   
end;
原文链接: http://www.tansoo.cn/?p=9
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值