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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2012, 11:42   #1
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию

Значит такое дело... При сканировании директории выводится список файлов в ListView, все ок отображает только 1, если файл назван русскими буквами то выдает к примеру "??????.doc" в чем проблема???
вот код:

Код:
//ПРОЦЕДУРА ПОИСКА ФАЙЛОВ
procedure GetFiles( APath: string );
var
  sr: TSearchRec;
  isFound: boolean;
  ListItem: TListItem;
  temp: string;
begin
  isFound := FindFirst( APath + '\*.*', faAnyFile, sr ) = 0;
while isFound do
begin
if ( sr.Name <> '.' ) and ( sr.Name <> '..' ) and
  ( ( sr.Attr and faDirectory ) <> faDirectory ) then
begin
  ListItem := Form1.ListView1.Items.Add;
  temp := ExtractFileName( sr.Name );
if LastDelimiter( '.', temp ) <> 0 then
  ListItem.Caption := Copy( temp, 0, LastDelimiter( '.', temp )-1 )
else
  ListItem.Caption := temp;
  temp := ExtractFileExt( sr.Name );
  ListItem.SubItems.Add( Copy( temp, Pos( '.', temp )+1, Length( temp ) ) );
  ListItem.SubItems.Add( IntToStr( sr.Size ) );
  ListItem.SubItems.Add( DateToStr( FileDateToDateTime(FileAge( APath + '\' + sr.Name ) ) ) );
  ListItem.SubItems.Add( TimeToStr( FileDateToDateTime(FileAge( APath + '\' + sr.Name ) ) ) );
end;
  isFound := FindNext( sr ) = 0;
end;
  FindClose( sr );
end;
Код:
 TForm1.ComboBox1Select(Sender: TObject);
var
  Dir1, Dir2: string;
  Ini:TiniFile;
begin
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Config.ini');
case combobox1.ItemIndex of
0: begin
  ListView1.Clear;
with ListView1.Items.Add do begin
  GetFiles(UnCryptString(Ini.ReadString('Path', '1', '')));
end;
end;
и еще вопрос почему-то при сканировании 1 строчка пустая, а 2- все как положено отображается

Последний раз редактировалось Stilet; 06.08.2012 в 14:01.
sli-pro вне форума Ответить с цитированием
Старый 06.08.2012, 14:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
почему-то при сканировании 1 строчка пустая
Не удивительно:
Код:
with ListView1.Items.Add do begin
  GetFiles(UnCryptString(Ini.ReadString('Path', '1', '')));
end
Зачем ты создаешь до вызова функции строку не понятно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2012, 09:13   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Да уж, декомпозиция просто феерична, отсюда и проблемы.
Зачем во внешней по отношению к форме процедуре вызывается добавление строки в листвью ? процедура должна быть самодостаточна, а для выполнения её работы ЛистАйтем надо туда передать - и код упростится и процедура будет обособлена, раз уж она не принадлежит форме.

Код:
procedure GetFiles( APath: string ; ListItem: TListItem);
var
  sr: TSearchRec;
  isFound: boolean;
  //листайтем стал параметром
  temp: string;
...
  // ListItem := Form1.ListView1.Items.Add; // выкинуть в тар-тарары
...
// вызов без with, а просто 
GetFiles(UnCryptString(Ini.ReadString('Path', '1', '')), ListView1.Items.Add);
За идентацию кода тоже не похвалю, выглядит кашей, ибо много вложенных блоков, а уровень их всех - один. Если есть возможность - пользуйте автоформаттер кода (из CnPack или отдельной утилиткой)
phomm вне форума Ответить с цитированием
Старый 07.08.2012, 12:13   #4
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию

спс за подсказки... переделаемс
sli-pro вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
Поиск в ListView / Delphi unreal2x Помощь студентам 1 16.06.2012 12:57
Поиск текста в Listview bulldog5293 Общие вопросы Delphi 1 12.02.2011 16:58
listview Djeka(c) Помощь студентам 6 27.09.2010 23:06
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04