Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 23-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Iván.

No creo factible predeterminar el evento para que se dispare sólo ante determinada condición ajena a la pulsación del ratón. Sin embargo, sí es posible evaluar dentro del evento OnClick del TShellTreeView la condición que se te ocurra.

Dado que el componente TShellTreeView reconoce los archivos .ZIP y .CAB como carpetas no podemos usar las propiedades Folder y SubFolders de la carpeta seleccionada para hacer lo que buscas ya que al evaluar no mostraría como última a aquellas carpetas que contuvieran esos tipos de archivos.
Esto implica crear algo de código adicional, una pequeña función que nos diga si al menos existe una carpeta hija de la actual.

El código:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ShellTreeView1 do
    ObjectTypes := ObjectTypes + [otNonFolders];
end;

(* Devuelve True si la carpeta actual posee una subcarpeta *)
function HaveFolder(const Path: string): boolean;
var
  sr: TSearchRec;
begin
  Result:= False;
  if FindFirst(Path+'\*.*', faDirectory, sr) = 0 then
  begin
    repeat
      if (sr.Attr and faDirectory = faDirectory)and
         (sr.Name<>'.')and(sr.Name<>'..') then
        Result:= True;
    until (FindNext(sr) <> 0) or Result;
    FindClose(sr);
  end;
end;

(* Verifica si el click se hizo sobre la última carpeta *)
procedure TForm1.ShellTreeView1Click(Sender: TObject);
var
  pt: TPoint;
  ht: THitTests;
  pth: string;
  IsFolder: Boolean;
begin
  with TShellTreeView(Sender) do
  begin
    pt := ScreenToClient(Mouse.CursorPos); // coordenadas X~Y del click
    ht := GetHitTestInfoAt(pt.X, pt.Y);    // ¿ Donde fué ?
    if (htOnItem in ht) then               // ¿ Sobre un ítem ?
    begin
      pth:= SelectedFolder.PathName;       // Obtener ruta del ítem
      IsFolder:= FileGetAttr(pth) and faDirectory = faDirectory; //¿ Es carpeta ?
      if IsFolder and not HaveFolder(pth) then // ¿ Fué carpeta y no tiene subcarpetas ?
        ShowMessage('Última carpeta');  //Acciones a ejecutar cuando es última carpeta
    end;
  end;
end;

Saludos
__________________
Daniel Didriksen

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


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
Problema copiando de un TShellTreeView a un Treeview harpo Varios 3 20-09-2008 20:42:24
Como instalar tshellTreeView k_rito API de Windows 8 01-02-2007 22:40:51
acerca del componente TShellTreeView fer21unmsm Varios 6 28-01-2006 18:30:34
Seleccion en tTreeView Investment OOP 2 02-07-2004 09:36:32
una seleccion YolandaM Impresión 2 04-10-2003 20:11:59


La franja horaria es GMT +2. Ahora son las 09:22:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi