perceptrona
Зарегистрирован: 22.07.2003 Сообщения: 13 Откуда: Минск
|
Добавлено: Вт Июл 29 2003 15:16 Заголовок сообщения: помогите с System ImageList разобраться !!! |
|
|
Есть компонента MiteC ExtListView - которая является более расширенной реализацией стандартного ListView. И в этой компоненте ExtListView есть свойство такие же как и у ListView - SmallImages и LargeImages типа TcustomImageList. Если значение одного из этих свойств равно ImageList1 (типа TImageList) в котором находятся иконки, то компонент ExtListView может выводить эти иконки в строки ExtListView. Так вот задача у меня стоит в том - чтобы написать файловый manager, который бы находил файл из заданного каталога, запихивал бы его имя в ExtListView и слева от имени файла помещал бы его иконку, установленную в системе для этого файла (как в проводнике). Я делал это так: Помещал на форму 2 ImageList-a, DriveComboBox, DirectoryListBox, ExtListView procedure TfrmMain.FormCreate(Sender: TObject); var i, j: integer; x, y: integer; SysImageList: uint; SFI : TSHFileInfo;
begin
// ExtListView.Smallimages:=TImageList.Create(self); // ExtListView.Largeimages:=TImageList.Create(self);
// запрашиваю у системы маленькие иконки SysImageList := SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON //); or SHGFI_TYPENAME); if SysImageList then begin ImageList1.Handle := SysImageList; ImageList1.ShareImages := true; end;
// запрашиваю у системы большие иконки SysImageList := SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
if SysImageList then begin ImageList2.Handle := SysImageList; ImageList2.ShareImages := true; end;
FileListBox.Visible := false;
DirectoryListBoxChange(Sender); end;
procedure TfrmMain.DirectoryListBoxChange(Sender: TObject); var i, j : integer; StrTemp : String; ShInfo : TSHFileInfo; begin FileListBox.Directory := DirectoryListBox.Directory;
with ExtListView do begin for i := Items.Count-1 downto do // очищаем Item-ы в ExtListView begin for j := ExtListView.Items.Item[i].SubItems.Count-1 downto do //очищаем SubItem-ы в ExtListView ExtListView.Items.Item[i].SubItems.Delete(j);
ExtListView.Items.Item[i].Delete; end;
for i := ImageList1.Count-1 downto do ImageList1.Delete(i); // очищаем ImageList
for i:=0 to (FileListBox.Items.Count - 1) do begin with Items.Add do Caption := FileListBox.Items.Strings[i]; SHGetFileInfo( PChar(FileListBox.Items.Strings[i]), 0, ShInfo, SizeOf(ShInfo), SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME); end; end; end;
Почему-то выводится только одна иконка (16x16) для всех файлов каталога. Как исправить эту ошибку? и чего не хватает в коде? |
|