Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mostrar una stringlist en algun tipo de tabla (https://www.clubdelphi.com/foros/showthread.php?t=54547)

turminator 22-03-2008 20:49:49

Mostrar una stringlist en algun tipo de tabla
 
Hola!

Actualmente tengo una función que me busca los archivos de un directorio y me muestra el directorio en una Tstringlist. esta sistema es sencillo y bueno, pero ocurre que si la lista excede el tamaño de pantalla noo permite visualizar todos los elementos encontrados

Me gustaria saber si hay algun modo de conseguir que en vez de mostrar los elementos en la stringlist, me los pudiera mostrar en una tabla como la que os adjunto ya que creo es bastante más funcional que la anterior.

¿Como creeis que se podria hacer? Tengo experiencia=0 con lo que cualquier información por poca que sea puede serme de gran utilidad.

Un saludo!

EDITO: http://img152.imageshack.us/my.php?image=tablahr3.jpg

poliburro 23-03-2008 00:48:48

Delphi incluye un componente llamado TStringGrid. ese es el que buscas. Suerte. (Otra solución sería generar el Xml de los resultados y cargarlo en un TAdoDatset, pero, mmm es más sencillo de usar el TStringGrid). Suerte

turminator 24-03-2008 01:04:24

Hola poliburro!

Muchas gracias por la información, he estado buscando y me he encontrado este tutorial http://www.formauri.es/arrobamasmas/...&cap=3#PrCells que parece bastante bueno. Voy a ver como me salgo y os cuento que tal.

Saludos!

keyboy 24-03-2008 01:23:48

Quizá quieras tambien considerar el control ListView, que, además, te permite poner "checkboxes" como los que se ven en tu imagen.

Bye

turminator 24-03-2008 01:37:44

Hola keyboy, acabo de leer tu recomenadación y me ha dejado un poco confundido. Creia que el control StringGrid era lo ideal y ahora descubro el listview.

La verdad no sé muy bien que diferencias/ventajas tiene entre ellos dos, pero ahora que lo comentas, pienso que quizás el listview tiene la ventaja de permitir la seleccion de más de un elemento, aunque quizás sea mas dificil de trabajar con la listview que el Stringgrid.

De todos modos acabo de encontrarme con un problema que intentaré resolver esta noche y mañana os cuento que tal.

Saludos!

Delfino 24-03-2008 02:47:44

Para una StringList esta el control TValueListEditor..

turminator 24-03-2008 13:11:09

Después de pensar un rato, creo que me conviene más usar TStringGrid ya que quizás en un futuro me sea útil meterle más de un valor por elemento.

Mi idea para este ejercicio era aprovechar la función que publicó David Esperalta acerca de como buscar archivos en un directorio y mostrarlos en una TString list

Código Delphi [-]
(*

  Busca y lista los archivos que cumplan con determinada
  máscara y que se encuentren en un determinado directorio
  y/o dentro de los subdirectorios del mismo.

  Parámetros:

  directorio: en el que buscar, por ejemplo: C:\
  mascara: de archivo, por ejemplo: *.txt
  atributos: de los archivos, por ejemplo: faAnyFile
  listado: donde guardar los posibles resultados (1)

  (1) Rutas completas de los archivos encontrados

*)

procedure BuscarArchivos(const directorio, mascara: string;
  atributos: Integer; var listado: TStrings);

  // Procedimiento anidado
  //
  procedure Buscar(const subdirectorio: string);
  var
    regBusqueda: TSearchRec;
  begin
    // Buscar en el directorio
    if FindFirst(subdirectorio + mascara,atributos,regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if (regBusqueda.Attr and faDirectory = 0)
            or (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                listado.Add(subdirectorio + regBusqueda.Name);
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
    // Buscar en los subdirectorios
    if FindFirst(subdirectorio + '*', atributos
      or faDirectory, regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if ((regBusqueda.Attr and faDirectory) <> 0)
            and (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                Buscar(subdirectorio + regBusqueda.Name + '\');
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
  end;
   //
  // Fin del procedimiento anidado:
 // Comienza "BuscarArchivos(...)"
//
begin
  Buscar(IncludeTrailingPathDelimiter(directorio));
end;

// Ejemplo de llamada a BuscarArchivos(...)
//
procedure TForm1.Button1Click(Sender: TObject);
var
  lista: TStrings;
begin
  lista := TStringList.Create;
  BuscarArchivos('C:\', '*.exe', faAnyFile, lista);
  ShowMessage(lista.Text);
  lista.Free;
end;

Creo que el error de esta aplicación se halla en que la función BuscarArchivos, está programada para que el resultado sea visualizado en una lista TStrings y no en una TStringGrid (la variable listado es un TString y no un tStringGrid). He probado en modificar levemente la función, pero me da error: creo que puede deberse a la siguiente sentencia:
listado.add(subdirectorio + regBusqueda.Name); ya que la propiedad .add es para el componente TString y no para el TStringGrid.

Donde me estoy equivocando?

Saludos!

eduarcol 24-03-2008 15:43:33

El error como bien lo dices es que el Grid no tiene el metodo Add. Tendrias que escribir directamente sobre la celda que quieras insertar o utilizar el metodo ADD del Row

Cita:

Replaces the first empty string with a specified string.

Delphi syntax:

function Add(const S: string): Integer; override;

C++ syntax:

virtual int __fastcall Add(const AnsiString S);

Description

Call Add to add a string to the list. Add searches the list for an empty string and replaces it with S. It then returns the index where it added S to the list. If there are no empty strings in the list, Add does not add S to the list and returns –1.
Ejemplo

stringgrid1.Rows[1].Add(subdirectorio + regBusqueda.Name);


La franja horaria es GMT +2. Ahora son las 06:42: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