Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2006
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cómo filtrar por tipos de archivo en un componente ShellTreeView

Hola, tengo un ShellTreeView y un ShellListView perfectamente sincronizados, pero quiciera saber, como puedo hacer para que simplemente el ShellListView muestre los archivos que yo quiera, por ejemplo solo los *.txt y no todo el conjunto que manda el ShellTreeView. Ni en el ShellComboBox encuentro opciones para filtrar como es el caso cuando usamos FilterComboBox de un DriveComboBox.

Gracias
Responder Con Cita
  #2  
Antiguo 14-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No estoy seguro, pero, creo que tienes que utilizar el evento "AddFolder" del componente "ShellListView", o, cuando menos, algo más o menos como lo que sigue parece funcionar bien:

Código Delphi [-]
const
  // Se me ocurre algo así para permitir varios "tipos" de archivo
  filtroArchivos = '.txt .dat';
  // filtroArchivos = '.txt'; // Sólo archivos de texto

procedure TForm1.ShellListView1AddFolder(Sender: TObject;
  AFolder: TShellFolder; var CanAdd: Boolean);
begin
  if not AFolder.IsFolder then // Si no es un directorio...
    CanAdd := (Pos(ExtractFileExt(AFolder.PathName), filtroArchivos) <> 0);
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 14-08-2006
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por dec
Hola,

No estoy seguro, pero, creo que tienes que utilizar el evento "AddFolder" del componente "ShellListView", o, cuando menos, algo más o menos como lo que sigue parece funcionar bien:


Código Delphi [-]
const
// Se me ocurre algo así para permitir varios "tipos" de archivo
filtroArchivos = '.txt .dat';
// filtroArchivos = '.txt'; // Sólo archivos de texto

procedure TForm1.ShellListView1AddFolder(Sender: TObject;
AFolder: TShellFolder; var CanAdd: Boolean);
begin
if not AFolder.IsFolder then // Si no es un directorio...
CanAdd := (Pos(ExtractFileExt(AFolder.PathName), filtroArchivos) <> 0);
end;


Gracias por tu respuesta, yo habia probado algo similar, agregando solo archivos y distinguiendo las carpetas, pero tanto en mi forma como la tuya se me cuelan los *.ZIP.

Saludos.
Responder Con Cita
  #4  
Antiguo 14-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues es verdad que se cuelan los archivos Zip y me temo que no serán los únicos... luego de varias pruebas parece ser que se toman los archivos ZIP (y acaso otro tipo de archivos comprimidos) como "directorios", y, puesto que, en cierto modo así son.

Lo cierto es que tanto "AFolder.IsFolder" retorna "true" con un archivo Zip y la función "FileGetAttribute" ídem de ídem. No sé me ocurre ahora mismo ninguna forma de conseguirlo, pero, tiene que haberla, apostaría algo.

En este artículo en Torry's se trata el tema, pero, no lo he probado y, me parece, que también de ese modo se colarían los archivos Zip...

Después de algunas vueltas... he probado a utilizar la función de Windows "GetFileAttributes", y, de esta forma parece que no se cuelan archivos Zip (ignoro si se colará algún otro tipo de archivo... no deseado...), esto es, dicha función no parece tomar los archivos Zip como directorios, como ocurría con la "FileGetAttribute" y "AFolder.IsFolder".

Código Delphi [-]
const
  // filtroArchivos = '.txt'; // Sólo archivos de texto
  // Se me ocurre algo así para permitir varios "tipos" de archivo
  filtroArchivos = '.txt .dat';

procedure TForm1.ShellListView1AddFolder(Sender: TObject;
  AFolder: TShellFolder; var CanAdd: Boolean);
begin
  // Así parece que no se cuelan los archivos Zip (no sé el resto de "comprimidos")
  CanAdd := ((GetFileAttributes(PChar(AFolder.PathName)) and FILE_ATTRIBUTE_DIRECTORY) <> 0)
    or (Pos(AnsiLowerCase(ExtractFileExt(AFolder.PathName)), AnsiLowerCase(filtroArchivos)) <> 0);
end;

PD. Los archivos en formato ".rar" tampoco se cuelan... ignoro si lo hacían "antes".
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 14-08-2006 a las 07:07:48.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ShellTreeview Anel Hernandez Varios 2 17-09-2007 14:39:51
Ayuda para crear ayuda... Gabriel2 Varios 2 10-06-2005 00:15:18
Problema con ShellTreeView Pepe API de Windows 4 11-01-2005 14:27:36
Problema con ShellTreeView Waldo API de Windows 1 21-07-2004 12:12:58
ayuda con strtofloat, ayuda punto flotante TURING Varios 5 30-04-2004 08:03:59


La franja horaria es GMT +2. Ahora son las 15:40:57.


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
Copyright 1996-2007 Club Delphi