moveto(x1,y1);
lineto(x2,y2); 解决了直线的问题,如果要吧箭头也画上,就要算出箭头的另外两个端点,然后用上述方法画即可

解决方案 »

  1.   

    fpack(超级大补丁)你还不满足啊,你的帖子两个高手都来了,我的帖子一个人都不来,哎............
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      LBeginX,LBeginY,LEndX,LEndY,RLx,RLy,RRx,RRy : integer;
    begin
      LBeginX := 10;
      LBeginY := 30;  LEndX := 60;
      LEndY := 30;  RLx := round((LEndX - LBeginX) * 0.9);
      RRx := RLx;  RLy := LBeginY + round((LEndX - RLx)*0.632);
      RRy := LBeginY - round((LEndX - RLx)*0.632);  with Form1.Canvas do
      begin
        MoveTo(LBeginX,LBeginY);
        LineTo(LEndX,LEndY);
        MoveTo(LEndX,LEndY);
        LineTo(RRx,RRy);
        MoveTo(LEndX,LEndY);
        LineTo(RLx,RLy);
      end;
    end;
      

  3.   

    我倒把 LEndY := 40 箭头就变形了。
      

  4.   

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    const
      K = 0.05;
      P = 20;
    var
      X0, Y0: Integer;
      X1, Y1: Integer;
      T: Real;
      R: Real;
    begin
      Refresh;
      X0 := ClientWidth div 2;
      Y0 := ClientHeight div 2;
      Canvas.MoveTo(X0, Y0);
      Canvas.LineTo(X, Y);
      if (X0 - X) = 0 then
        if (Y0 - Y) > 0 then
          T := Pi * 1.5
        else T := Pi * 0.5
      else if (X0 - X) < 0 then
        T := ArcTan((Y0 - Y) / (X0 - X))
      else T := Pi + ArcTan((Y0 - Y) / (X0 - X));
      R := Sqrt(Sqr(X0 - X) + Sqr(Y0 - Y));
      X1 := Trunc(Cos(T + K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T + K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
      X1 := Trunc(Cos(T - K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T - K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
    end;
      

  5.   

    一点改进:
    unit MAIN;interfaceuses
      Classes, Graphics, Controls, Forms;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      fst:boolean;
      X0, Y0: Integer;
      X1, Y1: Integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    fst:=true;
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    const
      K = 0.05;
      P = 20;
    var
      T: Real;
      R: Real;begin
    if fst then
    begin
      Canvas.MoveTo(X, Y);
      x0:=x;y0:=y;
      fst:=false;
    end
    else 
    begin
    Canvas.LineTo(X, Y);  if (X0 - X) = 0 then
        if (Y0 - Y) > 0 then
          T := Pi * 1.5
        else T := Pi * 0.5
      else if (X0 - X) < 0 then
        T := ArcTan((Y0 - Y) / (X0 - X))
      else T := Pi + ArcTan((Y0 - Y) / (X0 - X));
      R := Sqrt(Sqr(X0 - X) + Sqr(Y0 - Y));
      X1 := Trunc(Cos(T + K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T + K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
      X1 := Trunc(Cos(T - K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T - K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
    fst:=true;
    end;
    end;end.
      

  6.   

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    const
      P = 20;
    var
      X0, Y0: Integer;
      X1, Y1: Integer;
      T: Real;
      R: Real;
      K: Real;
    begin
      Refresh;
      X0 := ClientWidth div 2;
      Y0 := ClientHeight div 2;
      Canvas.MoveTo(X0, Y0);
      Canvas.LineTo(X, Y);
      if (X0 - X) = 0 then
        if (Y0 - Y) > 0 then
          T := Pi * 1.5
        else T := Pi * 0.5
      else if (X0 - X) < 0 then
        T := ArcTan((Y0 - Y) / (X0 - X))
      else T := Pi + ArcTan((Y0 - Y) / (X0 - X));
      R := Sqrt(Sqr(X0 - X) + Sqr(Y0 - Y));
      K := 4.2 / R;
      X1 := Trunc(Cos(T + K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T + K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
      X1 := Trunc(Cos(T - K) * (R - P)) + X0;
      Y1 := Trunc(Sin(T - K) * (R - P)) + Y0;
      Canvas.MoveTo(X, Y);
      Canvas.LineTo(X1, Y1);
    end;//自己想想办法//看看数学书吧
      

  7.   

    谢谢zswang(伴水)(需要充充电)老兄
    我开了个 [zswang(伴水)(需要充充电)来充电] 话题去拿分去,过时不侯。   ~@-@~   ^_^