Форум по 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 однавременна. И у меня получается что в первом, что во втором одинаковы иконки, хотя файлы по ассоциации разные.
Делаю так:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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;
Использование
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
Использование
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 и вызывать вот так

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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, время: 06:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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