在鼠标移动事件中画当前点的十字坐标线时,为抹掉老线常采用刷新画面的方法,这样就产生了非常严重的闪烁现象。因此,我们采用在画新线前将老线抹去的方法就能很好的解决这个问题,而且速度非常快。现举例如下:
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
文章介绍了一种优化方法,在画十字坐标线时避免刷新画面导致的闪烁现象,通过在画新线前抹去老线来提高用户体验。详细步骤包括初始化变量、检查鼠标位置并判断是否在指定范围内,最终实现流畅的交互效果。

3112

被折叠的 条评论
为什么被折叠?



