PDA

Ver la Versión Completa : Como en un FileListBox cambiar el nombre de un archivo


JuanErasmo
12-10-2005, 17:34:05
Buenos dias amigos.
Necesito con un Popup menu sobre un FileListBox, poner una opcion para cambiar el nombre. El problema es que no encuentro la función que me permita hacerlo.
Si alguien sabe como hacerlo, le agradeceré su respuesta eternamente.
Gracias.

dec
12-10-2005, 18:02:23
Hola,


procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
// Podrías usar "TAction's", de forma que en el evento
// "OnUpdate" de la acción "remobrarArchivo" (es un nombre
/// de ejemplo) hicieras que dicha acción estuviera habilitada
// o no dependiendo de que exista algún item seleccionado.
//
// Si dicha acción está asignada al item "renombrar archivo"
// del "TPopupMenu" conseguirás que al deshabilitarse aquella
// se deshabilite también este, por eso lo dicho arriba.
//
itemRenombrarArchivo.Enabled := (FileListBox1.ItemIndex <> -1);
end;

procedure TForm1.itemRenombrarArchivoClick(Sender: TObject);
var
i: integer;
dir: string;
nombreAntiguo,
nuevoNombre: string;
begin

i := FileListBox1.ItemIndex;

if i = -1 then
Exit; // Si haces lo de más arriba esto no tendrá sentido

dir := IncludeTrailingPathDelimiter(FileListBox1.Directory);

// Formamos el nombre "antiguo"
nombreAntiguo := dir + FileListBox1.Items[i];

// Solicitamos el nuevo nombre al usuario
nuevoNombre := InputBox('Renombrar archivo', 'Nuevo nombre:', '');

if nuevoNombre = '' then
Exit; // No hay para qué seguir

// Formamos el nuevo nombre del archivo
nuevoNombre := dir + nuevoNombre + ExtractFileExt(nombreAntiguo);

RenameFile(nombreAntiguo, nuevoNombre); // Renombramos el archivo

FileListBox1.Update; // Actualizamos la lista de archivos

end;

Nota: Revisa cuanto quieras el código. Ten en cuenta que se hizo en un rato y que pueden cambiarse acaso algunas cosas, optimizarse otras y adaptar buena parte a tus necesidades y/o preferencias, cuando no arreglar los posibles desperfectos que contenga el código. En todo caso creo que la idea de cómo implementar el asunto te la he dado: merezco las gracias eternas... una pena que eso sea algo imposible... o quizá no... ;)

dec
12-10-2005, 18:06:50
Hola,

Luego releo el Hilo y me doy cuenta de que buscabas una respuesta para C++ Builder... no sé en qué estoy pensando, la verdad... ¿es preciso traducir el código o más o menos coges el hilo de lo que en el mismo se lleva a cabo? :D

JuanErasmo
12-10-2005, 18:08:27
Gracias Dec, pero recuerda que es Builder C++ 6.0
te agradecería si lo "tradujeras" con tu experiencia en los dos lenguajes,
te confieso que aunque es casi lo mismo, para mí es un poco dificil, convertir a este lenguaje.
Gracias.:( :)

dec
12-10-2005, 18:49:49
Hola,



(...) te agradecería si lo "tradujeras" con tu experiencia en los dos lenguajes,

Asegúrote que en Delphi es poca mi experiencia y en C++ Builder mucha menos. Lo que ocurre es que hay traducciones de código y traducciones de código: la VCL ayuda no poco. El de más arriba no parece demasiado complicado de traducir. De ahí el siguiente intento:



//---------------------------------------------------------------------------

void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
itemRenombrarArchivo->Enabled = (FileListBox1->ItemIndex != -1);
}

//---------------------------------------------------------------------------

void __fastcall TForm1::itemRenombrarArchivoClick(TObject *Sender)
{
int i = -1;

AnsiString dir, nombreAntiguo, nuevoNombre;

i = FileListBox1->ItemIndex;

if(i == -1) return;

dir = IncludeTrailingPathDelimiter(FileListBox1->Directory);

nombreAntiguo = dir + FileListBox1->Items->Strings[i];

nuevoNombre = InputBox("Renombrar archivo", "Nuevo nombre:", "");

if(nuevoNombre == "") return;

nuevoNombre = dir + nuevoNombre + ExtractFileExt(nombreAntiguo);

RenameFile(nombreAntiguo, nuevoNombre);

FileListBox1->Update();
}
//---------------------------------------------------------------------------