Hola Histri.
Un ejemplo básico con dos items:
Código Delphi
[-]
type
TForm1 = class(TForm)
FileListBox1: TFileListBox;
PopupMenu1: TPopupMenu;
Edit1: TEdit;
...
private
procedure miCopyClick(Sender: TObject);
procedure miDeleteClick(Sender: TObject);
public
end;
...
implementation
procedure TForm1.miCopyClick(Sender: TObject);
var
i: Integer;
begin
if not DirectoryExists(Edit1.Text) then
raise Exception.Create('Ruta inválida');
with FileListBox1 do
begin
if Directory = Edit1.Text then
raise Exception.Create('Las carpetas de origen y destino son las mismas');
for i := 0 to Items.Count-1 do
if Selected[i] then
if not CopyFile(PChar(Directory+'\'+Items[i]),
PChar(Edit1.Text +'\'+ Items[i]), True) then
MessageBox(Handle,PChar('Error: '+SysErrorMessage(GetLastError)),'',
MB_ICONERROR);
end;
end;
procedure TForm1.miDeleteClick(Sender: TObject);
const
MSG = '¿ Desea borrar el archivo %s ?';
var
i: Integer;
begin
with FileListBox1 do
begin
for i := 0 to Items.Count-1 do
if Selected[i] then
if MessageBox(Handle, PChar(Format(MSG,[Directory+'\'+Items[i]])),
'', MB_ICONQUESTION+MB_YESNO) = IDYES then
if not DeleteFile(PChar(Directory+'\'+Items[i])) then
MessageBox(Handle,PChar('Error: '+SysErrorMessage(GetLastError)),'',
MB_ICONERROR);
Directory := '.';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
miCopy, miDelete: TMenuItem;
begin
miCopy := TMenuItem.Create(Self);
miCopy.Caption := '&Copiar';
miCopy.OnClick := miCopyClick;
PopupMenu1.Items.Add(miCopy);
miDelete := TMenuItem.Create(Self);
miDelete.Caption := '&Borrar';
miDelete.OnClick := miDeleteClick;
PopupMenu1.Items.Add(miDelete);
FileListBox1.Directory := 'C:\Una_Carpeta'; FileListBox1.MultiSelect := True; FileListBox1.PopupMenu := PopupMenu1;
end;
...
Cree los ítems y eventos de PopupMenu1 en tiempo de ejecución para darle mas claridad al ejemplo, pero lo podes realizar en tiempo de diseño.
Para que la copia se realice, el edit debe contener una carpeta de destino válida.
Saludos
Edito: Pero el ejemplo no evita el uso de un PopupMenu como solicitabas en el mensaje
#3.