将 ListBox 项目从 ListBox 拖放到 ListBox 及其图像并避免重复 Delphi

Drag Drop ListBoxItems from ListBox1 to ListBox2 with their images and avoiding duplication Delphi

我的代码正在运行并且可以拖放,但我想添加的是将项目从 ListBox1 拖放到 ListBox2 及其图像。此外,当我想重新排列 ListBox2 中的项目时,它会重复而不删除前一个项目。

或者,如果可能的话,我很想知道如何通过双击将项目从 ListBox1 移动到 ListBox2,而无需拖放。

我使用的是10.2版本

这是我的代码,如果有人能帮助我,我将不胜感激:

type
  TListBoxItem = class(FMX.ListBox.TListBoxItem)

private
    function GetData: String;
    procedure SetData(const Value: String);

published
    property Data:String Read GetData Write SetData;
end;

var
  Form13: TForm13;


procedure TForm13.ListBox3DragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);

var
  T,D:TListBoxItem;

Begin
  ListBox3.ItemHeight:=81;
  ListBox3.Canvas.Font.Size:=20;


  T:= TListBoxItem.Create(nil);
  D:= TListBoxItem(Data.Source);

  T.Data:= D.Data;
  ListBox3.AddObject(T);    

end;

procedure TForm13.ListBox3DragOver(Sender: TObject; const Data: TDragObject;
  const Point: TPointF; var Operation: TDragOperation);
begin

 if (Sender is TListBoxItem) and (Data.Source is TListBoxItem) and (Sender is TImage)
    and Not (Sender = Data.Source)
    and  (TListBoxItem(Data.Source).Text<>'')
    then Operation:=TDragOperation.Move
    else Operation:=TDragOperation.None;

end;

{ TListBoxItem }

function TListBoxItem.GetData: String;
begin
  Result := Text;
end;

procedure TListBoxItem.SetData(const Value: String);
begin
  Text:=Value;
end;

将 DblClick 事件放在列表框 1 上,将所选项目的父项移动到另一个列表框。

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.Selected <> nil then
    ListBox1.Selected.Parent := ListBox2;
end;