Problem z ikoną - 256 kolorów

0

Cześć. Mam problem, i to domyć dla mnie denerwujący, ponieważ chcę wstawić do ListView'a ikone 32 bitową, ale najpierw ją wyciągnąć z pliku exe:

var
   item: tlistitem;
   icon: ticon;
   FileInfo: SHFILEINFO;
begin
     item := listview1.items.add;
     item.caption := 'test';
     item.subitems.text := 'bla bla';
     SHGetFileInfo(PChar('C:\Program Files\Mozilla Firefox\firefox.exe'), 0, FileInfo,
     SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
     icon := ticon.Create;
     icon.Handle := FileInfo.hIcon;
     item.ImageIndex := ImageList3.AddIcon(icon);
     DestroyIcon(FileInfo.hIcon);
     Icon.Free;
end;

Tylko, że ten kod tworzy mi ikonę 256 klorową i wygląda to jak... Czy da się coś z tym zrobić ?

Znalazłem szybsze rozwiązanie, może teraz będzie łatwiej, ale i tak przyniosi taki sam efekt, ikone 256 kolorową :/

var
   item: tlistitem;
   i: hicon;
begin
     item := listview1.items.add;
     item.caption := 'test';
     item.subitems.text := 'C:\test.exe';
     i := ExtractIcon(HInstance, PChar('C:\Program Files\Mozilla Firefox\firefox.exe'), 0);
     icon := ticon.Create;
     icon.Handle := i;
     item.ImageIndex := ImageList3.AddIcon(icon);
0

Zauważyłem, że jak dam jeszcze var P: TPicture; W Picture.handle dam tą ikonę, to na Picture mam ładną, 32 bitową ikonkę, czyli widać to wina ImageList, który zapisuje sobie itemy jako Bitmapy i tracą Alphe :/ Czy da się coś z tym zrobić, proszę pomożcie, wiem, że się pewnie da, bo w niejednym programie już to widziałem :) Może, dało by się jakoś narysować tą ikonę w Itemie, albo coś...

0

Może zrób sobie TList ze wskaźnikami do TIcon a potem zastosuj ownerdraw?

0

Hmm a może łatwiej by było tak zmodyfikować ImageList, aby zapisywało sobie dane nie jako Picture, tylko jako Icon. Tylko skąd ort! żródło ImageList :/

0

Z Delphi/Source/Vcl, jeśli masz wersję enterprise... Nie wiem, co z pro, ale w personalu nie ma.

1 użytkowników online, w tym zalogowanych: 0, gości: 1