Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2010, 18:43   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Сканирование директории. ShellListView

Пишу программу, которая должна сканировать указанную ей директорию на наличие новых файлов в конкретной папке и сравнивал с датой, указанной в DateTimePicker1. Почти закончил, нашел нужный код, но он почему-то не работает. Вот:
Код:
procedure TForm1.BtnClick(Sender: TObject);
var
 SR: TSearchRec;
 FindRes: integer;
begin
 ShellListView1.Clear;
 FindRes:=FindFirst('E:\Documents and Settings\Artem Glavackij\Рабочий стол\Cheking',faAnyFile,SR);
 while FindRes = 0 do
 begin
  if ((SR.Attr and faDirectory) = faDirectory) and ((Sr.Name = '.') or (SR.Name = '..')) then
  begin
   FindRes:=FindNext(SR);
   Continue;
  end;
  if FileDateToDateTime(SR.Time) < DateTimePicker1.Date then
  begin
   FindRes:=FindNext(SR);
   Continue;
  end;
  ShellListView1.Items.Add;
  FindRes:=FindNext(SR);
 end;
 FindClose(SR);
 Form1.Timer1.Enabled:=True;
end;
Но не работае. Когда я указываю ему папку и нажимаю на кнопку, то показывается только первый файл, который я сегодня создал днем, а остальные нет.
Полагаю, что косяк в этой строчке:
Код:
ShellListView1.Items.Add;
Или я ошибаюсь?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 07:12   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Если работаешь с TListView, то добавлять в него элементы нужно так
Код:
var
    Item: TListItem
begin
    ...    
    ShellListView1.Items.BeginUpdate;
    ...
    Item := ShellListView1.Items.Add;
    Item.Caption := 'Заголовок';
    ...
    ShellListView1.Items.EndUpdate;
    ...
end;
igh0st вне форума Ответить с цитированием
Старый 06.07.2010, 07:19   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ээээмм..у меня ShellListView
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 07:29   #4
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

А... извиняюсь. Но по-моему ShellListView отображает файлы заданой папки, туда руками ничего не добавляется. Ошибаюсь?
igh0st вне форума Ответить с цитированием
Старый 06.07.2010, 07:32   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да я не хотел добавлять туда ничего. Мне всего лишь нужно было проводжить сканирование директории на наличие новых файлов в ней
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 07:43   #6
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Алгоритмически вроде все ок, попробуй в обычное ListView выводить результаты.

Вот это вот не совсем понятно что делает:
Код:
ShellListView1.Items.Add;
ShellListView1 - это TcxShellListView класс?
igh0st вне форума Ответить с цитированием
Старый 06.07.2010, 08:27   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

artemavd, видишь ли в чем дело.
Компонент, который ты выбрал, не пригоден для ручного заполнения. Это проводник чистой воды, Он не любит когда в него что-то добавляют без его ведома. Если тебе нужно написать свой проводник забудь о Shell-компонентах. Они автоматизированы, и лучше в них не лезть. Лучше возьми простой ListView, и на его основе напиши свой компонент

Цитата:
на наличие новых файлов в конкретной папке
Кстати у этого компонента за такое отвечает метод Refresh.

Например обрати внимание на такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 SR: TSearchRec;
 FindRes: integer; i:TListItem;
begin


  with ShellListView1.Items.Add do begin
   Caption:='q';
  end;

end;


procedure TForm1.FormCreate(Sender: TObject);
begin
ShellListView1.Clear;
end;
Кликай по кнопке - вроде кажется что ты добавляешь что-то с именем q, ан нет. Он просто будет добавлять файл который следующий в списке папки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сканирование формы us5mch Общие вопросы Delphi 3 07.05.2010 21:52
Сканирование директории D!zel Общие вопросы Delphi 8 22.12.2009 21:11
сканирование сети Sasuke-cun Работа с сетью в Delphi 2 06.12.2009 16:58
сканирование папки andrey poki Общие вопросы Delphi 2 26.03.2009 08:20
Сканирование экрана pecson Общие вопросы Delphi 5 13.12.2008 07:25