怎样画这样的直线:象imageeditor里工具的一样,当末尾端摁住,鼠标没有松手的时候,直线可以移动?
并且用什么来记录所画的一系列直线的轨迹,因为以后要改变它们 的颜色.0谢谢!

解决方案 »

  1.   

    这条直线是一个类的对象(你自己定义),当你点到屏幕时创建他,并且记录它起始坐标,当拖动鼠标时,根据鼠标的位置在界面上话一条虚象,当up鼠标时,得到他的终止坐标,此时,就象你才界面上放了一个Tlabel样,你可以拖动他,改变颜色等等操作
      

  2.   

    var
      Form1: TForm1;
      LMouseDown: Bool;
      StartX: integer;
      StartY: integer;
      OldX: integer;
      OldY: integer;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      LMouseDown := True;
      StartX := X;
      StartY := Y;  OldX := X;
      OldY := Y;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      LMouseDown := False;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      LMouseDown := False;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if LMouseDown then
      begin
        if (OldX <> StartX) or (OldY <> StartY) then //擦去上一次画的线
        begin
          Canvas.Pen.Color := Self.Color;
          Canvas.MoveTo(StartX, StartY);
          Canvas.LineTo(OldX, Oldy);
        end;
        Canvas.Pen.Color := clBlack;
        Canvas.MoveTo(StartX, StartY);
        Canvas.LineTo(X, Y);
      end;
      OldX := X;
      OldY := Y;
    end;
      

  3.   

    谢谢JUN!
    具体怎样实现Tlabel那样的虚线效果呢?能否给出代码提示?
    谢谢!
      

  4.   

    顺便问一下,各位是用什么组件来画图的阿?
    我是用的drawgrid,效果不好,老是画出来的东东不平滑阿,怎么解决呢?