Ver Mensaje Individual
  #2  
Antiguo 01-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Bueno, si no se trata de copiar y pegar, entonces esto no te hace falta

Código Delphi [-]
procedure TFrmBuscador.busca(InitialPath, Search: String);
var
  t:       TsearchRec; // t= todos archivos d= dentro directorios
  rest   : Integer;
  icono:      Ticon;
  //    niconos:Word;
  lpicono:    Word;
  elemento:   TListItem;
  strSearch: string;
  Index,realPos:Integer;
begin

  if length(search) < 1 then
    exit;
  // primero busco toda clase de archivos, puede que el nombre
  // de la carpeta no sea igual que lo que se busca

  rest := findfirst(InitialPath + '\*.*', faAnyFile, t); //      +faarchive
  while rest = 0 do
    begin
    if (t.name <> '.') and (t.name <> '..') then
      if (t.Attr >= fadirectory) and (t.Attr < faarchive) then
        busca(InitialPath + '\' + t.name, Search)
      else // se ha encontrado un archivo con posibles atributos
        begin
          strSearch := lowercase(Search);
          if Search[1] = '*' then
          begin
            strSearch := Copy(Search,2,255);
          end;
          Index := Pos(strSearch,LowerCase(t.Name));
          if (t.Attr <> fadirectory) and (t.name <> '.') and (t.name <> '..') and
              (
               ((Index > 0) and (Search[1]='*')) or
               ((Index = 1) and (Search[1]<>'*'))
               )then
            begin
            try
              encontrados.Add(t.name);
              icono := Ticon.create;
              try
                //              niconos := 1;
                lpicono      := 1;
                icono.Handle := ExtractAssociatedIcon(
                  handle, pchar(initialpath + '\' + t.name), lpicono);
                elemento := list.Items.Add;
                elemento.ImageIndex := Images.AddIcon(icono);
                Largeimages.AddIcon(icono);
                elemento.Caption := t.Name;
              finally
                icono.ReleaseHandle;
                FreeAndNil(icono);
                end;
            except // ya existe el archivo
                  //no lo incluimos en los resultados.
              end;
            label1.caption := inttostr(list.items.count) + ' elementos encontrados';
            label1.Refresh;
            end;
        end; // no es '.' o '..'
    rest := sysutils.FindNext(t);
    end; //while
  sysutils.FindClose(t);

end;

procedure TFrmBuscador.BorrarClick(Sender: TObject);
begin
  images.clear;
  largeimages.Clear;
  list.Items.Clear;
  label1.caption := '';
  Encontrados.Clear;
end;
List es un TlistView
Encontrados es un TStringList donde se guardan los archivos coincidentes con la búsqueda. tiene dupError en los duplicados.
Images es un Timagelist con tamaño de 16x16
largeImages es un Timagelist con tamaño de 32x32

Hay más cosas, pero son constantes y labels que puedes quitar.

Una posible llamada es:
Código Delphi [-]
  busca('c:\Documents and Settings\All Users\Menú Inicio\Programas\',
            '*expl');
con lo que aparecerá en el ListView:
- internet explorer
- explorador de archivos
- msn explorer
etc... con sus iconos asociados de windows.

No está optimizado y tiene algún error de concepto, pero soy muy vago y no me he puesto a arreglarlos.

Como estas viendo esto es el núcleo de un programa Buscador que uso desde hace 4 años, básicamente, pulsas la tecla F10 (hook de teclado para todo windows) y buscas el programa que quieras ejecutar; los resultados (5 o 6) aparecen en el ListView, en caso de que haya solo un resultado, hace un ShellExecute.

Como el programa guarda las búsquedas, con solo pulsar la tecla F10 y despues escribir en un combo "del" ya tengo el delphi abierto. Si escribo "Ner" ya tengo el nero abierto.
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita