写一个可拖动的 TShape

来源:互联网 发布:比特币闪电网络交易所 编辑:程序博客网 时间:2024/05/19 10:15

interfaceuses  Classes, Controls, ExtCtrls;type  TMyShape = class(TShape)  private    fMouseFlag: Boolean;    fx,fy: Integer;  protected    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer;      Y: Integer); override;    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer;      Y: Integer); override;    procedure MouseMove(Shift: TShiftState; X: Integer; Y: Integer); overrideend;implementation{ TMyShape }procedure TMyShape.MouseDown(Button: TMouseButton; Shift: TShiftState; X,  Y: Integer);begin  inherited;  fx := X;  fy := Y;  fMouseFlag := True;end;procedure TMyShape.MouseMove(Shift: TShiftState; X, Y: Integer);begin  inheritedif fMouseFlag then  begin    Left := Left + X - fx;    Top := Top + Y - fy;  end;end;procedure TMyShape.MouseUp(Button: TMouseButton; Shift: TShiftState; X,  Y: Integer);begin  inherited;  fMouseFlag := False;end;end.

调用测试:
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}uses Unit2;procedure TForm1.Button1Click(Sender: TObject);begin  Randomize;  with TMyShape.Create(Self) do begin    Brush.Color := Random($FFFFFF);    Parent := Self;    Left := 10;    Top := 10end;end;end.

0 0
原创粉丝点击