Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Abrir archivos con OpenDialog

Hola amigos

Quisiera saber cómo se pueden seleccionar simultáneamente todos los archivos de un tipo específico (por ejemplo .jpg) contenidos en una carpeta determinada, al seleccionar dicha carpeta en un OpenDialog.
Por defecto el OpenDialog permite abrir uno o varios archivos al seleccionarlos individualmente, pero yo necesito que se abran todos los archivos con una extensión determinada, al hacer click en la carpeta contenedora.

Saludos y muchas gracias
Responder Con Cita
  #2  
Antiguo 20-11-2012
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,

El componente "TOpenDialog" sirve para escojer uno o más archivos, pero, si lo que quieres es trabajar con los archivos de un determinado directorio, tal vez puedas usar la función "SelectDirectory". De este modo el usuario podrá escojer un determinado directorio, y, sabiendo su ruta, tú podrás buscar los archivos que te interesen dentro del mismo y hacer lo que sea menester con ellos.

P.D. Acaso podrías usar el "TOpenDialog" si extraes la ruta del directorio del archivo o archivos elejidos, sin embargo, me parece más apropiado usar "SelectDirectory", puesto que, en definitiva, no se trata de elegir entre uno o más archivos, sino más bien todos los archivos de un determinado directorio.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias dec .
Voy a probar y te cuento.
Salu2
Responder Con Cita
  #4  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
No es exactamente lo que necesito.
Mi intención es simplificarle el trabajo al usuario del programa.
Yo utilizo el siguiente código para cargar una tabla que después leo con un componente específico (DicomMultiViewer1)

Código Delphi [-]
var i:Integer;
begin
CnsDMTable1.Clear;
DicomMultiViewer1.DicomDatasets.Clear;
if OpenDialog1.Execute then
begin
for i := 0 to OpenDialog1.Files.Count - 1 do
begin
CnsDMTable1.LoadFromFile(OpenDialog1.Files[i], true);
end;
end;
DicomMultiViewer1.Update;
end;

La idea es que al seleccionar ya sea el directorio que contiene los archivos o bien cualquiera de los archivos existentes en dicho directorio, se seleccionen todos automáticamente.
¿Existe algo que pueda agregar a mi código que me permita hacerlo?

Salu2 y gracias nuevamente
Responder Con Cita
  #5  
Antiguo 20-11-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Creo que lo que necesitas va por el camino que te ha mostrado dec.

Si seleccionas solo el directorio con SelectDirectory o si seleccionas un archivo y a este le extraes el path es totalmente válido.

El siguiente paso es buscar todos loas archivos de ese directorio que se ajusten a tu requerimiento.

En About.com encontré un articulo de como leer los archivos de un directorio. Podrías echarle un vistazo.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias [movorack] :
¿Cómo puedo extraer el path del directorio desde el OpenDialog y pasarselo a mi código?
Salu2
Responder Con Cita
  #7  
Antiguo 20-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola radenf.

De este modo carga todos los archivos de la carpeta cuya extensión sea la misma que el archivo abierto mediante TOpenDialog:
Código Delphi [-]
...
procedure GetFileNames(Path: string; TS: TStrings);
var
  sr: TSearchRec;
  toFind: string;
begin
  if FindFirst(ExtractFilePath(Path)+'*'+ExtractFileExt(Path),faArchive,sr) = 0 then
    repeat
      TS.Add(sr.Name);
    until FindNext(sr) <> 0;
end;

procedure TForm1.btnCargarToCnsClick(Sender: TObject);
var
  i: Integer;
begin
  with OpenDialog1 do
    if Execute then
    begin
      GetFileNames(FileName, Files);
      for i:= 0 to Files.Count-1 do
        CnsDMTable1.LoadFromFile(Files[i]);
    end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias ecfisa :

El código que me has propuesto me genera los siguientes errores:

Al compilar señala:

[DCC Warning] VisorDicom.pas(932): W1002 Symbol 'faArchive' is specific to a platform
[DCC Warning] VisorDicom.pas(930): H2164 Variable 'toFind' is declared but never used in 'GetFiles'

Al ejecutarse envía el siguiente mensaje de error:

Cannot open file "C:\Users\IV\Documents\Proyectos Delphi 2007\Proyecto Dicom Viewer\1.2.840.157.dcm". El sistema no puede encontrar el archivo especificado.

Sin embargo el archivo al que se refiere si lo carga, pero no el resto de los archivos que poseen la misma extensión (.dcm) que se encuentran en el directorio seleccionado.
La variable 'toFind' la eliminé y el resultado fue el mismo.


Saludos
Responder Con Cita
  #9  
Antiguo 20-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola radenf.

En realidad no son errores, son advertencias.
  • La primera indica que ese símbolo está atado a funcionar bajo W32, si queremos hacer como el avestruz y que no muestre la advertencia, basta con reemplazar faArchive por el número 32.
  • La segunda es un residuo de cuando evaluaba si quedaba más legible asignar la larga línea de composición del nombre a una cadena... podes borrar la variable sin problema.

En cuanto al mensaje de error es extraño... No se produjo en ninguna de las pruebas que hice, lógicamente como no poseo el componente CnsDMTable1, probé con otros tipos de archivos.

Hace la siguiente prueba para ver si los nombres de archivos de la carpeta "C:\Users\IV\Documents\Proyectos Delphi 2007\Proyecto Dicom Viewer" son cargados correctamente:

Código Delphi [-]
procedure GetFileNames(Path: string; TS: TStrings);
var
  sr: TSearchRec;
begin
  if FindFirst(ExtractFilePath(Path)+'*'+ExtractFileExt(Path),32,sr) = 0 then
    repeat
      TS.Add(sr.Name);
    until FindNext(sr) <> 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  with OpenDialog1 do
    if Execute then
    begin
      GetFileNames(FileName, Files);
      for i:= 0 to Files.Count-1 do
        ListBox1.Items.Add(Files[i]);  // agrega un ListBox y cambia por esta línea
    end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-11-2012 a las 19:25:23. Razón: corrección ortográfica
Responder Con Cita
  #10  
Antiguo 20-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola radenf.

Hoy no estoy con el mejor de los días... Claro que no iba a encontrar los archivos, no agregué la ruta al nombre !

Código Delphi [-]
procedure GetFileNames(Path: string; TS: TStrings);
var
  sr: TSearchRec;
begin
  if FindFirst(ExtractFilePath(Path)+'*'+ExtractFileExt(Path),32,sr) = 0 then
    repeat
      TS.Add(ExtractFilePath(Path) + sr.Name);
    until FindNext(sr) <> 0;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias ecfisa .

Funciona a la perfección. Era justo lo que necesitaba.
¿Es posible lograr lo mismo seleccionando la carpeta que contiene los archivos?

Salu2

Última edición por radenf fecha: 20-11-2012 a las 20:26:16.
Responder Con Cita
  #12  
Antiguo 20-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por radenf Ver Mensaje
Muchas gracias ecfisa .

Funciona a la perfección. Era justo lo que necesitaba.
¿Es posible lograr lo mismo seleccionando la carpeta que contiene los archivos?

Salu2
Me temo que con el componente TOpenDialog no lo es, ya que sólo permite aceptar algún archivo o cancelar la operación.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 20-11-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias de nuevo ecfisa.
Salu2
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
¿Opendialog como Procesar archivos por lote? JXJ Varios 2 02-02-2011 15:23:12
Abrir archivos con nombres de archivos de otra codificación. matabyte Windows 2 01-05-2008 01:40:13
Darle Abrir a OpenDialog desde codigo. JuanErasmo C++ Builder 4 16-01-2008 18:16:34
abrir archivos con OpenDialog y ShellExecute thelibmx Varios 5 06-09-2007 21:19:44
Opendialog abrir aplicacion!!! liz_hilton OOP 2 10-05-2005 17:41:32


La franja horaria es GMT +2. Ahora son las 03:37:34.


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