![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток!
Использую ImageList, который пополняется так: Код:
procedure ProcName(FName: String);
var
Icon: TIcon;
Icon32,Icon16: HICON;
begin
if Integer(ExtractIconEx(PWideChar(FName), i, Icon16, Icon32, 1) >0 then
begin
Icon := TIcon.Create;
Icon.Handle := Icon16;
ImageList.AddIcon(Icon);
Icon.Free;
end;
end;Кинул на форму TImage, выгрузил иконку в него - все ОК, красиво и без контуров. Поискав в Гугле узнал, что ImageList у многих портит иконки, как-то криво меняя глубину цвета поциентов. Увы, Гугл не дал ответа как с этим бороться... Собственно, в этом и вопрос. Последний раз редактировалось Agat330, 20.04.2014 в 17:04. |
|
#2
|
||||
|
||||
|
А если так попробовать
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
SysIL, 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; |
|
#3
|
||||
|
||||
|
добавь на создание формы:
Код:
ImageList.Handle:=ImageList_Create(ImageList.Width, ImageList.Height, ILC_COLOR32 or ILC_MASK, ImageList.AllocBy, ImageList.AllocBy); |
|
#4
|
|||
|
|||
|
NumLock, пробую твой вариант. Ругается на ILC_COLOR32 or ILC_MASK - Undeclarated identifier. Чую, нужно что-то в Uses добавить.
Alegun, можно по-подробнее, что делает твой код? Забыл сказать - мой бук пока в ремонте, выдали другой. На нем RAD Studio XE3, пишу в нем. Может, беда в том, что другая версия и некоторые компоненты могут работать иначе? Последний раз редактировалось Agat330, 20.04.2014 в 17:50. |
|
#5
|
||||
|
||||
|
>> CommCtrl
|
|
#6
|
|||
|
|||
|
NumLock, спасибо, работает!
![]() |