请问在image中怎样通过拖动鼠标画出圆、矩形等图形,还有能不能像画图工具中的画笔那样画出任意的不规则图形呢?可不可以记录他们的坐标呢?能给我一些例子吗?
thx!!!!

解决方案 »

  1.   

    老贴了... 今天刚琢磨会的,现学现卖了:(用两个工程测试的,没有合并,楼主可以加按钮选择画笔形式,然后把下面两个代码合并在一个工程里用。)1、画规则图形(以矩形为例):type
      TForm1 = class(TForm)
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
        Pic : TBitmap;
        Rct : TRect;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Pic := TBitmap.Create;
      with Pic do
        begin
        Canvas.Brush.Color := clRed;
        Height := image1.Height;
        Width := image1.Width;
        Canvas.FillRect(Rect(0,0,Width,Height));
        end;
      image1.Picture.Bitmap := Pic;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Pic.Free;
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Rct.Left := X;
      Rct.Top := Y;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Rct.Right := X;
      Rct.Bottom := Y;
      Pic.Canvas.Brush.Color := clNavy;
      Pic.Canvas.FrameRect(Rct);
      Image1.Picture.Bitmap := Pic;
    end;end.
    2、用画笔画任意曲线:type
      TForm1 = class(TForm)
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
        Pic : TBitmap;
        Pnt : TPoint;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Pic := TBitmap.Create;
      with Pic do
        begin
        Canvas.Brush.Color := clRed;
        Height := image1.Height;
        Width := image1.Width;
        Canvas.FillRect(Rect(0,0,Width,Height));
        end;
      image1.Picture.Bitmap := Pic;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Pic.Free;
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Pnt.X := X;
      Pnt.Y := Y;
      Pic.Canvas.Pen.Color := clNavy;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Pic.Canvas.Pen.Color := clNavy;
      Pic.Canvas.MoveTo(pnt.X,pnt.Y);
      Pic.Canvas.LineTo(x,y);
      //Image1.Picture.Bitmap := Pic;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if ssLeft in shift then
         begin
         Pic.Canvas.MoveTo(pnt.X,pnt.Y);
         Pic.Canvas.LineTo(x,y);
         Pnt.X := x;
         Pnt.Y := Y;
         Image1.Picture.Bitmap := Pic;
         end;
    end;end.