在鼠標移動事件中畫當前點的十字坐標線時,為抹掉老線常采用刷新畫面的方法,這樣就產生了非常嚴重的閃爍現象。因此,我們采用在畫新線前將老線抹去的方法就能很好的解決這個問題,而且速度非常快。
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;