Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-10-2014
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
Ordenar por fecha archivos de TFileListBox

Hola a tod@s


bien hoy me ocupa intentar entregar el contenido de un TFileListBox a un ListBox, estoy lo hago puesto que el TFileListBox es ReadOnly y no me permito organizar los archivos de forma diferente a la alfabética para el caso estoy utilizando código que encontré en la red de esta forma

primera función

Código Delphi [-]
function FileDateString( const filename: String ): String;
begin
  result :=
    FormatDateTime('yyyymmdd hhmmss|',
                   FileDateToDateTime( FileAge( filename )))
end;

en orden de ideas me va ayudar a obtener los datos de la fecha y hora del archivo

segunda función ahí esta mi gran problema

Código Delphi [-]

procedure getListadoArchivo (pListDirectory : TDirectoryListBox;  pListBox : TListBox);
var _listadoArchivos : TFileListBox;
    _listadoOrdenadoArchivos : TStringList;
    _i_local : Integer;
begin
  try
    _listadoOrdenadoArchivos:= nil;
    _listadoArchivos:= nil;
    _listadoArchivos:= TFileListBox.Create(TComponent(pListDirectory.Parent));
    _listadoArchivos.Visible:= False;
    _listadoArchivos.Directory:= pListDirectory.Directory;
    for _i_local:= 0 to _listadoArchivos.Count -1 do
      begin
        _listadoOrdenadoArchivos.add(
          FileDateString(pListDirectory.Directory + '\' + _listadoArchivos.items[_i_local]));
        _listadoOrdenadoArchivos.Sorted:= True;
      end;
    pListBox.Items.Assign(_listadoOrdenadoArchivos);
  finally
    _listadoOrdenadoArchivos.Free;
    _listadoArchivos.Free;
  end;
end;

bien en orden de ideas deseo recibir un TDirectoryListBox y devolver en forma ordenada por fecha los archivos contenidos en el directorio, pero cuando se ejecuta esta línea de código _listadoArchivos.Directory:= pListDirectory.Directory;, se caen las cosas y me envía el siguiente mensaje Control has no parent windows.

la verdad no tengo ni idea que puede ser el error pues en el creador se esta invocando la ventana donde ejecuto el procedimiento _listadoArchivos:= TFileListBox.Create(TComponent(pListDirectory.Parent)); y el evento donde lo estoy invocando es el change del TDirectoryListBox.

Agradezco de antemano la colaboración



gertorresm
colombia
Responder Con Cita
  #2  
Antiguo 11-10-2014
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 GerTorresM.
Cita:
Empezado por GerTorresM Ver Mensaje
...
estoy utilizando código que encontré en la red de esta forma...
Juro que pensé que se trataba de Malbolge

Cita:
Empezado por GerTorresM Ver Mensaje
...deseo recibir un TDirectoryListBox y devolver en forma ordenada por fecha los archivos contenidos en el directorio...
Según entiendo, queres realizar un procedimiento que recibe como parámetros un TDirectoryListBox A y un TListBox B y que devuelve como valor de respuesta una lista compuesta por fecha + '|' + ruta + nombre, ordenada de forma ascendente por fecha, en el TListBox B.

Entonces, y si no interpreté mal la consigna, creo que se puede hacer de forma mucho mas simple:
Código Delphi [-]
procedure SortFilesByAge(DLBox: TDirectoryListBox;  LBox: TListBox);
var
  sr: TSearchRec;
  dir: string;
  ageName: string;
begin
  LBox.Clear;
  dir:= IncludeTrailingPathDelimiter(DLBox.Directory);
  if FindFirst(dir+'*.*',faAnyFile, sr) = 0 then
  begin
    repeat
       if (sr.Attr and faArchive) = faArchive then
       begin
         ageName:= FormatDateTime('yyyymmdd hhmmss|',
           FileDateToDateTime(FileAge(dir + sr.Name))) + dir + sr.Name;
         LBox.Items.Add(ageName);
       end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  LBox.Sorted:= True;
end;

Ejemplo de llamada:
Código Delphi [-]
...
begin
  SortFilesByAge(DirectoryListBox1, ListBox1);
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-10-2014
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
Smile Funciona pero..

Ecfisa Muchas gracias de antemano


al correr me envia el siguiente error

Código Delphi [-]
    until FindNext(SR) <> 0;
    FindClose(SR);

en la segunda línea me envía el siguiente error


Incompatible types: 'Cardinal' and 'TSearchRec'

te agradezco tu tiempo y el interes sobre éste tema



gertorresm
Responder Con Cita
  #4  
Antiguo 14-10-2014
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 GerTorresM.

Necesistas usar el procedimiento FindClose de SysUtils. Revisa que en la cláusula uses de tu unidad esté declarado Windows antes de SysUtils, de otro modo tomará la declaración del procedimiento de la unidad Windows:
Código Delphi [-]
 
uses 
   Windows,..., SysUtils, ...

Otra solución es especificar que usarás el procedimiento declarado en SysUtils de este modo:
Código Delphi [-]
SysUtils.FindClose(SR);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 15-10-2014
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
Smile Esa fue la mejor respuesta

Ecfisa:

Te agradezco mucho tu tiempo y paciencia, la verdad es que era justo lo que necesitaba !!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ordenar archivo por fecha de modificacion Paulao Varios 0 07-11-2011 16:36:22
Como ordenar una fecha por el dia rufo Varios 4 09-02-2010 23:37:32
TFileListBox archivos *.txt con meses Patho Varios 3 29-10-2007 22:15:12
Ordenar Ttable por fecha Iskariote0087 Varios 3 17-01-2006 22:05:50
ordenar tabla por fecha davidgaldo Conexión con bases de datos 1 26-02-2004 10:36:27


La franja horaria es GMT +2. Ahora son las 02:23:48.


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