Hola Carmelo Cash.
Otra opción diferente, es usar un
TPopupMenu con las opciones 'Cortar', 'Pegar' y 'Deshacer'. Y si lo deseas, con sus respectivos
ShortCut como por ejemplo: Ctrl+C, Ctrl+V, Ctrl+Z.
Código Delphi
[-]
...
var
SL: TStrings;
procedure TForm1.FormCreate(Sender: TObject);
begin
SL := TStringList.Create;
ListBox1.DragMode := dmAutomatic;
ListBox1.MultiSelect := True;
ListBox1.PopupMenu := PopupMenu1;
end;
procedure TForm1.Cortar1Click(Sender: TObject);
var
i : Integer;
begin
with TListBox(PopupMenu1.PopupComponent) do
begin
for i := 0 to Count-1 do
if Selected[i] then SL.AddObject(Items[i], TObject(i));
for i := Count -1 downto 0 do
if Selected[i] then Items.Delete(i);
end;
end;
procedure TForm1.Pegar1Click(Sender: TObject);
var
CurrItem,i: Integer;
begin
if SL.Count > 0 then
with TListBox(PopupMenu1.PopupComponent) do
begin
CurrItem:= ItemIndex+1;
Items.BeginUpdate;
try
for i := SL.Count-1 downto 0 do
Items.Insert(CurrItem, SL[i])
finally
SL.Clear;
Items.EndUpdate
end
end;
end;
procedure TForm1.Deshacer1Click(Sender: TObject);
var
i: Integer;
begin
if SL.Count > 0 then
begin
for i:= 0 to SL.Count-1 do
ListBox1.Items.Insert(Integer(SL.Objects[i]),SL[i]);
SL.Clear
end
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
Cortar1.Enabled := SL.Count = 0 ;
Pegar1.Enabled := not Cortar1.Enabled;
Deshacer1.Enabled:= not Cortar1.Enabled;
end;
Saludos.