https://www.cnblogs.com/false/archive/2013/02/24/2924308.html

通过百度网盘分享的文件:DesignVCL.rar
链接:https://pan.baidu.com/s/1CBNyyNl357Oi44ajH0xR8g
提取码:uxz9

两个组件 要 注册为包,才能再加载

https://www.cnblogs.com/yangxuming/p/9232599.html

一定要先拖放一个Button,在界面上,不要问为什么

 

var
      MStream  : TMemoryStream;
      List     : TList;
      aCheckButton: TButton;   // 新 Button的指针
var
  c: boolean; // 是否移动的开关
  tx, ty: Integer; // 鼠标在控件上按下时的坐标
复制代码
//新增button
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  aCheckButton :=  TButton.Create(self);
  With aCheckButton do
  begin
    Top := 60;          // button 的出现的坐标
    Width := 60;        // button 的宽度
    Left := 20 ;
    height:=34;
    Parent := panel1;     // 指明在那个窗体显示
//    OnClick := CustomButtonClick;       // 指定button click事件
    OnMouseDown:=Button3MouseDown;
    OnMouseMove:=Button3MouseMove;
    OnMouseUp :=Button3MouseUp;
       DragMode:=dmManual;
    Caption := 'aButton';
  end;  // with

  if aCheckButton.CanFocus then       aCheckButton.Focused;

end;
复制代码
procedure TForm1.ToolButton3Click(Sender: TObject);   //  窗口控件 ->   MStream->文件
begin
     MStream.Position := 0;
    ComPersist.SaveComsToStream(MStream, List);
    MStream.SaveToFile('aaa.tula');

end;
procedure TForm1.ToolButton2Click(Sender: TObject);   //文件->MStream-> 窗口
begin
MStream.Position := 0;
 MStream.LoadFromFile('aaa.tula');
  ComPersist.LoadComsFromStream(MStream, Self);
end;

 

复制代码
procedure TForm1.Button3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     if Button = mbLeft then   //判断按下的是不是鼠标左键
  begin
    c := true; // 按下鼠标左键后,可以移动
    tx := X; // 记录下鼠标点击的开始坐标X
    ty := Y; // 记录下鼠标点击的开始坐标 Y
  end;
end;

procedure TForm1.Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
      if c then
      if sender is TButton then    begin
    TButton(sender).Left := Tbutton(sender).Left + X - tx; // 改变控件的Left坐标 ,X-tx是相对开始时移动的距离
    TButton(sender).Top  := Tbutton(sender).Top + Y - ty; // 改变控件的Top坐标 ,Y-ty是相对开始时移动的距离
    end;
end;

procedure TForm1.Button3MouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);
begin
  c := false; // 放开鼠标后,不可以移动
  if sender is TButton then
   List.Add(sender);
end;
复制代码

 

 

 

 

 

 

With aCheckListBox do
begin
Parent := panel1; // 指明在那个窗体显示
aCheckListBox.Items.Add('1');
aCheckListBox.Items.Add('2');