窗体中声明私有变量:
IsAdding: boolean;
X1, Y1, X2, Y2: integer;
有一个Image控件,实现了它的鼠标事件如下:
procedure TMainForm.imgMapMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button = TMouseButton.mbLeft) then
begin
IsAdding := true;
X1 := X;
Y1 := Y;
X2 := X;
Y2 := Y;
imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
end;
end;
procedure TMainForm.imgMapMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if IsAdding = true then
begin
IsAdding := false;
end;
end;
procedure TMainForm.imgMapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if IsAdding = true then
begin
imgMap.Canvas.Pen.Mode := TPenMode.pmNotXor;
imgMap.Canvas.Brush.Style := TBrushStyle.bsClear;
imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
X2 := X;
Y2 := Y;
imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
end;
end;
就是实现拖动时的橡皮筋效果,但是拖动时图片闪烁很厉害,不知道Delphi里双缓冲代码是怎么写的 |