Ostatnio zmagam się z tym, aby mieć 32 bitowe ikony w menu - niestety TImageList nie obsługuje takich ikon... umie je załadować, ale kanał alpha zanika, przez co ikony w menu mają brzydką poszarpaną białą obwódkę.
Co za tym idzie, trzeba kompletnie przepisać rysowanie elementów menu, ale to nie problem - tą część już mam zrobioną, zostało mi tylko dorobić rysowanie check/radio oraz to co najważniejsze - rysowanie ikon w nieaktywnym menu. O ile tekst szybko i fajnie rysuje się za pomocą DrawState to z ikonami już jest inaczej - ikony nieaktywne w ogóle się nie rysują, a aktywne zamiast 16x16 mają 32x32 px. Ikony ładuję z zasobów do tablicy TIcon, wszystkie ikony mają tylko 1 format 16x16px.
DrawIcon(ACanvas.Handle, ARect.Left + 2, ARect.Top + 2,Icons[Sender.ImageIndex].Handle );
DrawIconEx(ACanvas.Handle, ARect.Left + 2, ARect.Top + 2, Icons[Sender.ImageIndex].Handle, 16, 16, 0, 0, DI_NORMAL);
DrawState(ACanvas.Handle, 0, nil, Icons[Sender.ImageIndex].Handle, 0, ARect.Left + 2, ARect.Top + 2, 16, 16, Flags or DST_ICON);
DrawIcon maluje ikonę, ale 32x32px :/ Nie wiem czemu skoro ona jest 16x16px.
DrawIconEx maluje ikonę tak jak trzeba (w końcu ma na chama podane 16x16px), ale nie ma możliwości narysowania nieaktywnej ikony.
DrawState kompletnie ignoruje parametry rozmiaru i maluje ikonę tylko jeżeli w Flags nie ma DSS_DISABLED. Czyżby ta funkcja nie obsługiwała operacji graficznych na 32 bitowych ikonach?
Jedyne rozwiązanie jakie mi się nasuwa to utworzyć oddzielne ikony dla aktywnych i nieaktywnych, ale to trochę mozolne będzie :/ Może jednak ktoś ma jakiś pomysł na tego DrawState?