Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con un filelistbox (https://www.clubdelphi.com/foros/showthread.php?t=24533)

Jorghino reyes 24-08-2005 18:26:15

Ayuda con un filelistbox
 
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

1 Archivos Adjunto(s)
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, que explica Ian Marteens y alguna vez refirió aquí mismo roman.

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:

Código Delphi [-]
  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:

Código Delphi [-]
  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:

Código Delphi [-]
  TStringList(TCustomListBox(FileListBox).Items).Sorted := false;
Tal vez podríamos ceñirnos a lo que verdaderamente te preocupa:

Cita:

Empezado por Jorghino reyes
(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!


La franja horaria es GMT +2. Ahora son las 03:38:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi