unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses
  GDIPAPI,GDIPOBJ; //包含这两个GDI+单元
var
  flag:Integer; //声明一个用作标志位的变量,根据它的值来决定是否开始画图
  Downx,Downy:Integer; //记录鼠标点下时的坐标
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  flag:=1; //鼠标点下了,标志置1
  Downx:=x; //同时记录下点击的坐标
  Downy:=y; 
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  g: TGPGraphics;
  p: TGPPen;

begin
  Form1.DoubleBuffered:=True; //开启双缓冲
  if flag = 1 then      //判断是否开始画图,标志为1就开始画
  begin
    g := TGPGraphics.Create(Canvas.Handle); //创建对象
    p := TGPPen.Create(aclRed,2);

    p.SetStartCap(LineCapRound); //设置线帽,让线看起来更圆润
    p.SetEndCap(LineCapRound);

    g.SetSmoothingMode(SmoothingModeHighQuality); //抗锯齿
    g.DrawLine(p,Downx,Downy,x,y); //画线
    Downx:=x; //保存旧的坐标,留待下一次使用
    Downy:=y;

    p.Free; //对象释放
    g.Free;
  end;


end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  flag:=0; //鼠标抬起了,标志置0,表示不再画图了
end;

end.

 

 

posted on 2010-11-19 17:53  巅枫  阅读(28901)  评论(0)    收藏  举报