PDA

Ver la Versión Completa : Ayuda con un filelistbox


Jorghino reyes
24-08-2005, 18:26:15
Hola a todos saludos desde mexico.

Tengo un problema con filelistbox ( soy nuevo en POO), la cuestion es que quiero obtenerr los elemntos (files) de un directorio a un filelistbox (todods loa archivos). ok, eso es sencillo, pero no los quiero en orden alfabetico. y cuando los paso de ese a otro filelistbox tambien me los va acomodando por orden alfabetico sin importar el orden en que los valla agregando. que puedo hacer? filelistbox no tiene propiedad sorted. he oido sobre modificar algo en el tcustombox pero no se si sea posible, o como le hago. Gracias de antemano!. ( todo ello es por que no quiero la ruta completa de los archivos en la lista)

dec
25-08-2005, 03:29:42
Hola,

El caso es que no voy sino a confundir, pero, allá va. "TFileListBox" no cuenta con una propiedad "Sorted", es cierto, pero "TFileListBox" hereda de "TCustomListBox", y, este sí cuenta con una propiedad "Sorted". No solo eso, sino que, en el constructor de "TFileListBox" se da a dicha propiedad el valor "True". ¿Entonces, qué puede hacerse?

Probablemente de varias formas pueda conseguirse lo que se trata de conseguir, sin embargo, parece funcionar con el "truco" de las Clases interpuestas (http://www.marteens.com/trick46.htm), que explica Ian Marteens (http://www.marteens.com/) y alguna vez refirió aquí mismo roman (http://www.clubdelphi.com/foros/showthread.php?t=4453).

Una forma de implementar lo dicho. En el formulario en donde utilizas el "TFileListBox", antes de su declaración, es decir, antes de la declaración del tipo del formulario, incluye el siguiente código:


type
TFileListBox = class(FileCtrl.TFileListBox)
public
constructor Create(AOwner: TComponent); override;
end;

Dicho constructor (es lo que nos interesa, puesto que es en el constructor de "TFileListBox" donde se da "por defecto" el valor "True" a la propiedad "Sorted", como se ha dicho, heredada de "TCustomListBox") se implementa como sigue:


constructor TFileListBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Sorted := false;
end;

Y eso es todo: tu "FileListBox" ya no mostrará ordenados alfabéticamente los elementos que contenga. En el ejemplo que se adjunta lo verás claramente.

Sin embargo, creo que lo propuesto no sirve del todo, puesto que no se ordenaran los elementos del "TFileListBox" que tú añadas, pero sí parecen ordenarse los elementos que el propio componente añade, es decir, los archivos que encuentra en un determinado directorio.

No sabré ir más allá por el momento, puesto que creo que esto último tiene que ver con cómo se añaden elementos al componente en cuestión: se recorre un directorio en busca de sus archivos (véase el método privado "ReadFileNames" de "TFileListBox") y estos se encuentran ya de forma ordenada, y de forma ordenada se añaden al componente...

Algo como lo siguiente se permite, quiere decirse que compila sin problemas, sino es que no parece tener efecto alguno:


TStringList(TCustomListBox(FileListBox).Items).Sorted := false;

Tal vez podríamos ceñirnos a lo que verdaderamente te preocupa:


(todo ello es por que no quiero la ruta completa de los archivos en la lista)
Si te refieres a no ver la ruta completa de los archivos en el "FileListBox" no me cuadra el asunto: no parece mostrarse la ruta de los mismos y sí solamente el nombre de los archivos.

Si te refieres a obtener el nombre de los archivos, sin la ruta, por ejemplo el archivo seleccionado en el "FileListBox" (aunque creo que no la obtendrías, por lo dicho más arriba) tal vez podrías utilizar la función "ExtractFileName".

A ver si alguien puede aclarar un poco más el asunto y a ti puede servirte de algo el rollo que acabo de soltar.

Jorghino reyes
26-08-2005, 05:25:44
ok tratare de ponerlo en marcha y te comento lo que sucede.

Lo que pasa es que tengo varios listbox (referentes a distintos directorios) pero cuando quiero agregar a un tercero, uno de los seleccionados en los listbox anteriores , en este tercero, me los va agregando en forma alfabetica y con la ruta completa: (bueno, asi lo hago)

filelistbox3.Items.add(filelistbox1.filename);

y alguien me recomedo algo como esto:_

filelistbox2.Items.add(filelistbox1.Items.Strings[filelistbox1.ItemIndex]);

pero ahora que me comentaste de "extractfilename", podre resolver uno de los puntos. Gracias !

Jorghino reyes
26-08-2005, 06:28:03
ok ya lo probe, de hecho funciona (gracias) pero alreves, los archivos que abre segun el directorio que se le indique los acomoda en orden alfabetico y los que se van agregando esos si los va acomodando en el orden en que se agreguen.

De hecho me sirve para resolver parte del problema.!

Ahora otra cuestion.

Una vez utilizando el extractfilename, que como comento parafines de mostrar unicamente el nombre de los archivos en el filelistbox a la que se le fueron agregando los elementos, Ya no puedo recuoerar la ruta para utilizar dicha seleccion. ??

Es decir, para mostrar la lista se requiere ademas de que no se muestre en orden alfabetico, se muestre solo el nombre del archivo. Pero requiero recuperar la ruta al ahora de utilizar el elemneto seleccionado.

Gracias de antemano y un saludo!