如何在image中画任意线(50分)

  • 主题发起人 主题发起人 xiaowei78
  • 开始时间 开始时间
X

xiaowei78

Unregistered / Unconfirmed
GUEST, unregistred user!
按下鼠标后,任意移动鼠标,在image上出现线条。
最好随鼠标移动实时出现
 
var
pts:array [0..1] of TPoint;
isDraw : boolean;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pts[0]:= Point(X, Y);
pts[1]:= Point(X, Y);
isDraw:=true;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if isDraw then
begin
Canvas.Pen.Style:= psDot;//线型
Canvas.Pen.Color:= clGray;//颜色
Canvas.Pen.Mode := pmNotXor;
Canvas.MoveTo(pts[0].X, pts[0].Y);
Canvas.LineTo(pts[1].X, pts[1].Y);
Canvas.MoveTo(pts[0].X, pts[0].Y);
Canvas.LineTo(X, Y);
pts[1] := Point(X, Y);
Canvas.Pen.Mode := pmCopy;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Canvas.Pen.Mode := pmNotXor;
// Canvas.MoveTo(pts[0].X, pts[0].Y);
// Canvas.LineTo(X, Y);
// Canvas.Pen.Mode := pmCopy;
//如果不需要保留线段,则使用上面几句
isDraw:=false;
end;
不好意思,匆匆忙忙没有调试。现更正。
 
谢谢楼上的程序。
可是我要的是沿鼠标移动轨迹的任意线(就是按住鼠标拖出一条任意线),您给的只是直线啊
 
考虑用控件拖动,如:shape
 
哈哈,这个更简单了
var
pt: TPoint;
isDraw : boolean;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pt:= Point(X, Y);
isDraw:=true;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if isDraw then
begin
Canvas.Pen.Style:= psSolid;//线型
Canvas.Pen.Color:= clRed;//颜色
Canvas.Pen.Width:=2;//线宽
Canvas.MoveTo(pt.X, pt.Y);
Canvas.LineTo(X, Y);
pt := Point(X, Y);
Canvas.Pen.Mode := pmCopy;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
isDraw:=false;
end;
 
接受答案了.
 
后退
顶部