要求是就是鼠标开始下压的那个点为圆心坐标,移动后的点为圆上的一个点,半径就是这两个点的距离!
谢谢了!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,jpeg,ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        fselecting:boolean;
        fbeginpt,fendpt:tpoint;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fselecting:=true;
      fbeginpt:=Form1.ScreenToClient(mouse.CursorPos);
    end;
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fselecting:=false;
      fendpt:=Form1.ScreenToClient(mouse.CursorPos);
      Self.Repaint;
    end;
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     fendpt:=Form1.ScreenToClient(mouse.CursorPos);
     if fselecting then
     begin
       Canvas.FillRect(Canvas.ClipRect);
       //Canvas.Rectangle(rect(fbeginpt,fendpt));
       canvas.Ellipse(rect(fbeginpt,fendpt));
       canvas.Pen.Color:=clred;
       Canvas.Pen.Width:=1;
     end;
    end;end.
      

  2.   

    用控件 托拽就可以了 就这么简单
    用visual graph来做