Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
ShellListView consultas varias

Tengo un ShellListView apuntado directamente a un directorio, (lo uso para visualizar los directorios que existen y se vayan creando dentro del directorio apuntado. Tambien lo tengo configurado en su propiedad AutoRefresh como True, asi puedo visualizar en tiempo real cuando se crea o se elimina un directorio. Mis dudas son las siguientes:

1) Como puedo saber el nombre de la ultima carpeta creada (Path)?
2) Como puedo hacer para obtener lo de mi pregunta 1) despues de haber sido creada, cuando se autorefresca el ShellListView?

Es que necesito, agregar el nombre de la carpeta cuando se crea, a una base de datos con un cambo Path y un campo Estado, a True cuando se crea, a False cuando se Elimina.

Si alguien me puede dar una mano, se lo agradecere.

Saludos y Gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 30-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Solucion


Acá tengo tu solucion, funciona para todos los casos:

Código Delphi [-]
var List: TStrings;
 
procedure BuildList(Path: string; Refresh: Boolean = True);
var Handle: Cardinal; Index: Integer; FindData: TWin32FindData;
begin
 if Refresh then List.Clear;
 Handle := FindFirstFile(PChar(Path + '\*.*'), FindData);
 if Handle <> INVALID_HANDLE_VALUE then
  begin
   repeat
    with FindData do
     if ((dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and
        (string(cFileName) <> '.') and (cFileName <> '..') then
      if Refresh then
       List.Add(cFileName)
      else
       begin
        Index := List.IndexOf(cFileName);
        if Index <> -1 then
         List.Delete(Index)
        else
         List.Add(cFileName);
       end;
   until not FindNextFile(Handle, FindData);
   Windows.FindClose(Handle);
  end;
end;
 
function Thread(Handle: Cardinal): Cardinal; stdcall;
label Next; var Path: string;
begin
 List := TStringList.Create;
 Path := Form1.ShellListView.Root;
 if Path[Length(Path)] = '\' then
  SetLength(Path, Length(Path) - 1);
 BuildList(Path);
 Handle := FindFirstChangeNotification(PChar(Path), False, FILE_NOTIFY_CHANGE_DIR_NAME);
 Next: WaitForSingleObject(Handle, INFINITE);
 BuildList(Path, False);
 Form1.ListBox.Items := List; // Acá lo usas como evento
 FindNextChangeNotification(Handle);
 BuildList(Path);
 goto Next;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var Dummy: Cardinal;
begin
 CreateThread(nil, 0, @Thread, nil, 0, Dummy);
 Caption := 'Change to see: ' + ShellListView.Root;
end;

Te explico (porsiaca), el proc. BuildList reacciona de dos maneras, por defecto llena en "Buffer doble" una lista de los directorios (solo los nombres), y del otro "modo" te hace una segregación de los directorios (carpetas o como le llames), modificados.

El hilo Thread es el disparador que con la API FindFirstChangeNotification y WaitForSingleObject llama a BuildList al producirce un cambio en el nombre de las carpetas.

En donde está el comentario el ListBox muestra los cambios, pero puedes usarlo a tu gusto pues te retorna hasta el antigüo nombre y el nuevo en caso de ser renombrado. Si quieres usalo como su fuese un "OnChange"

Te la adjunto para que lo entiendas mejor...

PD: Disculpa el retraso pero andaba "programando"

Suerte!
Archivos Adjuntos
Tipo de Archivo: zip OnChangePath.zip (1,7 KB, 45 visitas)
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
JPG/BMP varias consultas MaMu Gráficos 2 18-05-2007 13:16:18
Quickreport, varias consultas Alexis7788 Impresión 8 15-11-2006 00:24:32
Varias consultas a una misma BD con PHP papulo PHP 2 14-12-2005 10:27:03
DbExpress:Varias consultas,una sola transaccion josemmerida Conexión con bases de datos 0 13-05-2005 18:11:56
consultas entre varias tablas Irina SQL 3 27-05-2003 19:58:32


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