W swoim programie ListView I ImageList tworzę dynamicznie czy to może być przyczyną problemu?
U mnie wywołuje to problemy tylko gdy właściwość
ColorDepth obiektu
ImageList ma wartość
cdDeviceDependent.
Ta czarna ramka to efekt półprzeźroczystości wymagający obsługi 32 bitowej głębi kolorów:
icon1.png
Jak widzisz krawędzie są półprzeźroczyste.
Problem można obejść dokonując konwersji ikony na bitmapę:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIcon *ikona = new TIcon;
ikona->LoadFromFile(ExtractFilePath(ParamStr(0)) + "icon1.ico");
Graphics::TBitmap *fBitmap = new Graphics::TBitmap;
fBitmap->Width = ikona->Width;
fBitmap->Height = ikona->Height;
fBitmap->Canvas->Brush->Color = ListView1->Color;
fBitmap->Canvas->FillRect(Rect(0, 0, ikona->Width, ikona->Height));
fBitmap->Canvas->Draw(0, 0, ikona);
ImageList1->Add(fBitmap, NULL);
delete ikona;
delete fBitmap;
}
imagelist.png
Ten sposób bynajmniej nie włącza obsługi 32 bitowej, lecz odrysowuje ikonę na tle bitmapy w kolorze tła ListView. Trochę to skomplikowane, ale analiza kodu powinna wszystko wyjaśnić.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.