Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Llenar combobox con el contenido de un folder (https://www.clubdelphi.com/foros/showthread.php?t=51940)

enecumene 04-01-2008 17:10:21

Llenar combobox con el contenido de un folder
 
Hola compañeros, aqui vengo con una duda, quiero hacer lo siguiente, tengo un folder con archivos de imagenes, y quisiera llenar un combobox con esos archivos, pero quisiera hacerlo con un dialog OpenDirectoryDialog parecido al opendialog, pero no encuentro algo asi, lo se llenar con el opendialog pero que es uno a uno, lo quiero de un solo golpe, pero aparte de eso tambien necesito que los datos se muestren con el nombre del archivo no con la ruta completa asi:

Dibujo1.Jpg
Dibujo2.Bmp

espero que puedan entender porque hoy estoy un poco espeso en el escribir ;).

Saludos.

adfa 04-01-2008 17:23:26

Pues si en el OpenDialog activas en options la opcion ofAllowMultiSelect puedes seleccionar varios archivos que lo tienes en la propiedad files (que es un TStrings) del OpenDialog.
Luego si solo quieres el nombre del archivo basta con usar la funcion extractFileName

Saludos

enecumene 04-01-2008 17:30:40

Hola, Gracias por responder tan pronto amigo adfa, lo que pasa es que con el OpenDialgog tendria que seleccionar uno a uno yo solo quiero seleccionar el folder y que se llene con todo el contenido, parecido a Add Folder de Winamp. De nuevo gracias.

Saludos.

Neftali [Germán.Estévez] 04-01-2008 17:47:19

Si no recuerdo mal, el truco número 15 lista todos los ficheros de un directorio hacia un TStrings, a partir de la ruta del directorio.
Basta con que a cada línea le apliques un ExtractFileName para desechar el path y quedarte sólo con el nombre y luego hacer un Add para añadilo al combo.

No se si me expliqué bien...:o

enecumene 04-01-2008 17:49:35

Vale no te preocupes ahora mismo revisare el truco 15 y luego te comento.

Saludos.

Neftali [Germán.Estévez] 04-01-2008 18:12:39

Me refería a algo así, vamos...

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  TS:TStrings;
  i:Integer;


  procedure ArchivosDirectorio(dir, mascara: string;
    var lista: TStrings; const soloNombres: boolean);
  var
    SR: TSearchRec;
  begin
    dir := IncludeTrailingPathDelimiter(dir);
    if FindFirst(dir + mascara, faAnyFile, SR) = 0 then
    begin
      repeat
        if not soloNombres then
          lista.Add(ExtractFileName(ChangeFileExt(dir + SR.Name, '')))
        else
          lista.Add(dir + SR.Name);
      until FindNext(SR) <> 0;
      SysUtils.FindClose(SR);
    end;
  end;

begin

  TS := TStringList.Create();
  try
    ArchivosDirectorio(Edit1.Text, '*.bmp', TS, True);

    for i := 0 to (TS.Count - 1) do begin
      TS.Strings[i] := ExtractFileName(TS.Strings[i]);
    end;


    ComboBox1.Items.Clear;
    ComboBox1.Items.AddStrings(TS);
    ComboBox1.ItemIndex := 0;

  finally
    FreeAndNil(TS);
  end;

end;

enecumene 04-01-2008 18:28:44

Excelente Amigo Neftali me funcionó perfecto era lo que estaba buscando, estaba haciendo algo asi con el truco 15:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i: integer;
  begin
    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;
  
    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre
    while IsFound do  begin
      FilesList.Add(StartDir + SR.Name);
      IsFound := FindNext(SR) = 0;
    end;
  
    FindClose(SR);
  
    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);
  
        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;
end;

Pero no me daba, con este ultimo codigo que posteaste me funciona excelente, Garcias Neftali por tu tiempo os agradezco.

Saludos.

adfa 04-01-2008 18:51:43

El TFileListBox quiza te pueda servir tiene una propiedad items donde podes acceder a los archivos, no me acuerdo bien como se usa. Creo que con eso podrías cargar el combo.
Ya veo que llegue tarde (eso es por empezar a escribir y tener que atender otra cosa). :) :)
Saludos

enecumene 04-01-2008 18:59:16

Cita:

Empezado por adfa (Mensaje 256018)
El TFileListBox quiza te pueda servir tiene una propiedad items donde podes acceder a los archivos, no me acuerdo bien como se usa. Creo que con eso podrías cargar el combo.
Ya veo que llegue tarde (eso es por empezar a escribir y tener que atender otra cosa). :) :)
Saludos

jajaja no te preocupes amigo adfa eso me sucede todo el tiempo por auqi, lo que vale es la intencion no? ;)

Saludos.


La franja horaria es GMT +2. Ahora son las 04:53:49.

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