我在网上找到了让TPanel和TShape可以在窗口上被鼠标拖动的程序,问题是,这两段代码完全一样,除了粘贴复制,还有其他更好的办法吗?
type
TMyPanel = class(TPanel)
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); override;
end;
procedure TMyPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
fx := X;
fy := Y;
fMouseFlag := True;
end;
procedure TMyPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited;
if fMouseFlag then
begin
Left := Left + X - fx;
Top := Top + Y - fy;
end;
end;
procedure TMyPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
fMouseFlag := False;
end;
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); override;
end;