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.
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... ;)
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.:( :)
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();
}
//---------------------------------------------------------------------------
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.