Показать сообщение отдельно
  #9  
Старый 21.01.2010, 13:03
mishqa35 mishqa35 вне форума
Прохожий
 
Регистрация: 20.01.2010
Сообщения: 16
Репутация: 10
По умолчанию

Появилось еще пара вопросов по теме..
1. У меня форма на ней ShellTreeView и ShellListView.
В ShellTreeView выводятся тока папки и под-папки, из директории D:\ - как сделать чтобы выводились те папки от куда запущена программа...?
В ShellListView выводятся тока файлы из отмеченной папки ShellTreeView.
У ShellListView стоит ViewStyle > vsReport и в окне ShellListView сверху пишется Имя, Размер, Тип, Изменен - Не знаю как оставить тока Имя и Размер

2.На форме установлены компоненты Edit1, Edit2, Button1, Button2, Memo1, Label1

Edit1 - то что ищем
Edit2 - где ищем
Button1 - Кнопка Найти
Button2 - кнопка Обзор
Memo1 - выводит найденые обекты
Label1 - выводит число найденых обьектов

Вот код:
Код:
var
   FileName: string;  // имя или маска искомого файла
   cDir: string;
   n: integer;       // кол-во файлов, удовлетворяющих запросу

// поиск файла в текущем каталоге
procedure Find;
var
   SearchRec: TSearchRec; // информация о файле или каталоге
begin
   GetDir(0,cDir); // получить имя текущего каталога
   if cDir[length(cDir)] <> '\' then cDir := cDir+'\';

   if FindFirst(FileName, faAnyFile,SearchRec) = 0 then
       repeat
          if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
             begin
               Form1.Memo1.Lines.Add(cDir +  SearchRec.Name);
               n := n + 1;
             end;
        until FindNext(SearchRec) <> 0;

       // обработка подкаталогов текущего каталога

       { Если не обрабатывать системные каталоги, то
         вместо faAnyFile можно задать faDidertory.
         Это объясняется тем, что значение SearchRec.Attr
         для обычного каталога равно faDirectory (16),
         для Program Files - faDirectory+faReadOnly (17),
         а для каталога Windows - faDirectory+faSysFile (20).
        }

       if FindFirst('*', faAnyFile, SearchRec) = 0 then
          repeat
              if (SearchRec.Attr and faDirectory) = faDirectory then
                    // каталоги .. и . тоже каталоги,
                    // но в них входить не надо !!!
                    if SearchRec.Name[1] <> '.' then
                       begin
                         // Form1.Memo1.Lines.Add('>>>>'+SearchRec.Name);
                         ChDir(SearchRec.Name);// войти в каталог
                         Find; // выполнить поиск в подкаталоге
                         ChDir('..');// выйти из каталога
                         //Form1.Memo1.Lines.Add('<<<<'+SearchRec.Name);
                       end;
          until FindNext(SearchRec) <> 0;
end;

// щелчок на кнопке Поиск
procedure TForm1.Button1Click(Sender: TObject);
begin
        if not DirectoryExists(Edit2.Text) then
        begin
            ShowMessage('Каталог указан неверно.');
            Edit2.SetFocus;
            exit;
        end;

        Button1.Enabled := False;
        Label1.Caption := '';
        Label1.Repaint;
        Memo1.Clear;             // очистить поле Memo1
        Label1.Caption := '';
        FileName := Edit1.Text;  // что искать
        cDir := Edit2.Text;      // где искать
        n:=0;                    // кол-во найденных файлов
        ChDir(cDir);             // войти в каталог начала поиска
        Find;                    // начать поиск
        if n = 0 then
           ShowMessage('Файлов, удовлетворяющих критерию поиска нет.')
        else Label1.Caption := 'Найдено файлов:' + IntToStr(n);
        Button1.Enabled := True;
end;

// возвращает каталог, выбранный пользователем
function GetPath(mes: string):string;
var
  Root: string;      // корневой каталог
  pwRoot : PWideChar;
  Dir: string;
begin
  Root := ''; // корневой каталог - папка Рабочий стол
  GetMem(pwRoot, (Length(Root)+1) * 2);
  pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);
  if SelectDirectory(mes, pwRoot, Dir)
     then
          if length(Dir) = 2  // пользователь выбрал корневой каталог
              then GetPath := Dir+'\'
              else GetPath := Dir
     else
          GetPath := '';
end;

// щелчок на кнопке Папка
procedure TForm1.Button2Click(Sender: TObject);
var
  Path: string;
begin
  Path := GetPath('Выберите папку');
  if Path <> ''
     then Edit2.Text := Path;
end;
Ни как не могу сделать чтобы то что найдено выводилось не в Memo1 а в ListView1
И немагу сделать чтобы вместо Edit2 и Button2 был выпадающий список тех файлов от куда запущем exe'шник