Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2014, 22:35
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
Восклицание Ico в ListView

Помогите вывести иконки каждого файла.
Но дело в том что у меня надо в два ListView однавременна. И у меня получается что в первом, что во втором одинаковы иконки, хотя файлы по ассоциации разные.
Делаю так:

Код:
procedure GetIcon(FileName:string);
var
Info:TSHFileInfo;
AIcon:TIcon;
begin
AIcon:=TIcon.Create;
SHGetFileInfo(PChar(FileName),FILE_ATTRIBUTE_NORMAL,Info, SizeOf(TSHFileInfo),SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES);
AIcon.Handle:=Info.hIcon;
ImageList1.AddIcon(AIcon);
LV.Items[LV.Items.Count-1].ImageIndex := ImageList1.Count -1;
AIcon.Free;
end;

{Получение списка файлов и информации о них}
procedure TForm1.UpdateFile(LV:TListView;aPath:String);
var
Handle:THandle;
FindData:TWin32FindData;
Temp_ext,Temp_Cap,result:String;
Folders:TStringList;
i,Temp:Byte;
begin
ImageList1.Clear;
LV.SmallImages:=ImageList1;
LV.Items.BeginUpdate;//Начинаем прорисовку списка файлов
LV.Items.Clear; //Очищаем LV
Handle:=FindFirstFile(PChar(aPath+'*.*'),FindData);
if Handle<>INVALID_HANDLE_VALUE then
 try
  Folders:=TStringList.Create;
  while FindNextFile(Handle,FindData) do
  begin
    Temp_Cap:=ExtractFileName(FindData.cFileName); //Имя файлов
    Temp_ext:=ExtractFileExt(FindData.cFileName); //Формат(расширение)
    if (FindData.dwFileAttributes and faDirectory)=faDirectory then Folders.Append(Temp_Cap)
     else
   with LV.Items.Add do
   begin
    if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
    begin
      GetIcon(Temp_Cap); // Это вывод иконок
      Caption:=(ChangeFileExt(ExtractFileName(Temp_Cap),''));
      SubItems.Add((temp_ext));
      SubItems.Add(FloatToStrF(FindData.nFileSizeHigh+FindData.nFileSizeLow,ffNumber,18,0));
    end
      else
      SubItems.Add('');
      SubItems.Add(TimeToDateFile(FindData.ftLastWriteTime));
      Result:='';
      if (FILE_ATTRIBUTE_ARCHIVE and FindData.dwFileAttributes)>0 then Result:=Result+'a' else Result:=Result+'-';  //
      if (FILE_ATTRIBUTE_READONLY and FindData.dwFileAttributes)>0 then Result:=Result+'r' else Result:=Result+'-'; //Только чтение
      if (FILE_ATTRIBUTE_HIDDEN and FindData.dwFileAttributes)>0 then Result:=Result+'h' else Result:=Result+'-';   //Скрытые
      if (FILE_ATTRIBUTE_SYSTEM and FindData.dwFileAttributes)>0 then Result:=Result+'s' else Result:=Result+'-';   //Системные
      SubItems.Add(Result);
    end;
   end;
  for i:=0 to Folders.count-1 do with LV.Items.insert(i) do
  begin
   LV.Items[i].ImageIndex:=-1;
   SubItems.Add('');
   SubItems.Add('');
   SubItems.Add('');
   Caption:=Folders[i];
  end;
  Folders.Free;
  finally
  LV.Items.EndUpdate; //Закончить прорисовку файлов
  end;
end;

{Операции при запуске програмы}
procedure TForm1.FormActivate(Sender: TObject);
begin
UpdateFile(ListView1, 'С:\'); //Обновления листа Лево
UpdateFile(ListView2, 'С:\Windows'); //Обновления право Лево
end;
Ответить с цитированием
  #2  
Старый 16.04.2014, 23:47
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Пример из DRKB
Код:
uses
  ShellApi;

procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList);
var
  i: Integer;
  Icon: TIcon;
  SearchRec: TSearchRec;
  ListItem: TListItem;
  FileInfo: SHFILEINFO;
begin

  // Create a temporary TIcon 
Icon := TIcon.Create;

  ListView.Items.BeginUpdate;
  try

    // search for the first file 
   i := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
    while i = 0 do
    begin
      with ListView do
      begin

        // On directories and volumes 

       if ((SearchRec.Attr and FaDirectory <> FaDirectory) and
          (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
        begin
          ListItem := ListView.Items.Add;

          //Get The DisplayName 
         SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_DISPLAYNAME);

          Listitem.Caption := FileInfo.szDisplayName;

          // Get The TypeName 
         SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_TYPENAME);

          ListItem.SubItems.Add(FileInfo.szTypeName);

          //Get The Icon That Represents The File 
         SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);

          icon.Handle := FileInfo.hIcon;
          ListItem.ImageIndex := ImageList.AddIcon(Icon);

          // Destroy the Icon 
         DestroyIcon(FileInfo.hIcon);
        end;
      end;
      i := FindNext(SearchRec);
    end;

  finally
    Icon.Free;
    ListView.Items.EndUpdate;
  end;

end;
Использование
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin

  // Assign a Imagelist to the ListView 
ListView1.SmallImages := ImageList1;

  // Show Listview in Report Style and add 2 Columns 
//ListView1.ViewStyle := vsReport;

//  ListView1.Columns.Add;
//  ListView1.Columns.Add;

  LV_InsertFiles('C:\Windows\', ListView1, ImageList1);
end;
Ответить с цитированием
  #3  
Старый 17.04.2014, 00:54
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

Цитата:
Сообщение от Alegun
Использование
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin

  // Assign a Imagelist to the ListView 
ListView1.SmallImages := ImageList1;

  // Show Listview in Report Style and add 2 Columns 
//ListView1.ViewStyle := vsReport;

//  ListView1.Columns.Add;
//  ListView1.Columns.Add;

  LV_InsertFiles('C:\Windows\', ListView1, ImageList1);
end;

А если выводить однавременной в 2 listView, получается надо еще 1 ImageList и вызывать вот так

Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
ListView1.SmallImages := ImageList1;

  // Show Listview in Report Style and add 2 Columns
//ListView1.ViewStyle := vsReport;

//  ListView1.Columns.Add;
//  ListView1.Columns.Add;

  LV_InsertFiles('c:\windows\', ListView1, ImageList1);
  LV_InsertFiles('d:\файлы\', ListView2, ImageList2);

end;
Ответить с цитированием
  #4  
Старый 17.04.2014, 01:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от HTTqp
А если выводить однавременной в 2 listView, получается надо еще 1 ImageList и вызывать вот так...
Это вопрос или утверждение?

Цитата:
...И у меня получается что в первом, что во втором одинаковы иконки, хотя файлы по ассоциации разные...
Это значит что всем файлам подсовывается одна и таже иконка, не более
Ответить с цитированием
  #5  
Старый 17.04.2014, 13:45
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

Цитата:
Сообщение от Alegun
Это вопрос или утверждение?

Это вопрос просто я пробую у меня не выводится во 2 listview, как исправить?
Ответить с цитированием
  #6  
Старый 17.04.2014, 16:10
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот исходник по теме, посмотрите пжлст
Ответить с цитированием
  #7  
Старый 17.04.2014, 16:25
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

Все тему можно закрывать разобрался, спасибо за помощь

Последний раз редактировалось HTTqp, 17.04.2014 в 20:46.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter