procedure TForm1.FormCreate(Sender: TObject);
var
SysIL : THandle;
SysSIL : THandle;
SFI : TSHFileInfo;
begin
SysImageList1 := TImageList.Create(self);
with SysImageList1 do begin
Width := 16;
Height := 16;
SysSIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysSIL <> 0 then begin
SysImageList1.Handle := SysSIL;
ShareImages := True;
end;
end;
SysImageList2 := TImageList.Create(self);
with SysImageList2 do begin
Width := 32;
Height := 32;
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
if SysIL <> 0 then begin
SysImageList2.Handle := SysIL;
ShareImages := True;
end;
end;
end;
function GetIconIndex(const AFile: string; Attrs: DWORD): integer;
var
SFI: TSHFileInfo;
begin
SHGetFileInfo(PChar(AFile), Attrs, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Result := SFI.iIcon;
end;
....
with ListView.Items.Add do begin
Caption := FName;
ImageIndex := GetIconIndex(Caption, FILE_ATTRIBUTE_NORMAL);
SubItems.Add(FSize);
SubItems.Add(FType);
SubItems.Add(FDateTime);
end;
Добавление цветных иконок в ListView можно выполнить с помощью компонента TImageList и присвоения его ListView' LargeImages или SmallImages свойству.
Сначала создайте новый компонент TImageList на вашем форме и установите свойство ImageCount в количество изображений, которое вы хотите отобразить. Затем загрузите свои иконки в список изображений с помощью метода Add.
Затем присвойте список изображений свойству LargeImages или SmallImages ListView.
ListView1.LargeImages:=imageList1;
Теперь вы можете установить свойство ImageIndex ListViewItem в индекс иконки в списке изображений. Например:
withListView1.Items.AdddobeginCaption:='FName';ImageIndex:=0;// Присвойте первую иконку из списка изображенийSubItems.Add(FSize);SubItems.Add(FType);SubItems.Add(FDateTime);end;
Контроль ListView не поддерживает отображение иконок с разными цветами. Однако, вы можете использовать комбинацию изображения и текста для отображения информационных данных.
Например, вы можете загрузить иконку в свойство LargeImages или SmallImages ListView, а затем установить свойство ImageIndex ListViewItem в индекс этой иконки. В этом случае каждое ListViewItem будет иметь свою уникальную иконку.
Вот пример, как это можно сделать:
imageList1:=TImageList.Create(self);fori:=0to15dobeginimageList1.Add(Bitmap.FromFile('path_to_icon_'+IntToStr(i)+'.bmp'));end;ListView1.LargeImages:=imageList1;withListView1.Items.AdddobeginCaption:='FName';ImageIndex:=i;// Присвойте иконку под индексом i из списка изображенийSubItems.Add(FSize);SubItems.Add(FType);SubItems.Add(FDateTime);end;
Не забудьте заменить 'path_to_icon_'+IntToStr(i)+'.bmp' на ваш реальный путь к файлу иконки.
Добавить в ListView полноцветные иконки можно с помощью вызова функции SHGetFileInfo, которая возвращает handle на системную иконку для файла, а затем использовать полученный handle как ImageIndex для элемента ListViewItem.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.