如题!

解决方案 »

  1.   

    var
      NewSpeedButton: TSpeedButton;
      OldPoint: TPoint;procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      OldPoint := Point(X, Y);
      NewSpeedButton := TSpeedButton.Create(Self);
      NewSpeedButton.Parent := TSpeedButton(Sender).Parent;
      NewSpeedButton.BoundsRect := TSpeedButton(Sender).BoundsRect;
    end;procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      if (ssLeft in Shift) and Assigned(NewSpeedButton) then
      begin
        NewSpeedButton.Left := TSpeedButton(Sender).Left + X - OldPoint.X;
        NewSpeedButton.Top := TSpeedButton(Sender).Top + Y - OldPoint.Y;
      end;
    end;procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Assigned(NewSpeedButton) and
        (X = OldPoint.X) and (Y = OldPoint.Y) then // 没有发生变化
        NewSpeedButton.Free;
      NewSpeedButton := nil;
    end