Ja już raczej nie będę przedstawiał Ci nowych rozwiązań, bo pomiędzy Delphi 7 a XE jak widać jest spora różnica w supporcie plików graficznych; Jednak dalej zastanawiam się nad tym co Ty w ogóle chcesz osiągnąć i jaki efekt by Cię zadowolił; Przedstawiłem Ci w pierwszym swoim poście kod, który rozciąga dowolny plik ikon na dowolnej kontrolce, a na dodatek wykorzystujący dowolny kolor tła, a nie standardowo w takim przypadku biały;
Zrzut z powyższego posta sugeruje, że nieźle namieszałeś z ustaleniem tła pod ikoną, skoro cały formularz został przemalowany na czarno (chyba, że takie jest założenie?); Jeżeli to nie miało tak wyglądać, to pomieszałeś z tym malowaniem; Także jeśli chodzi o samą ikonę - rozciągnięta przez metodę StretchDraw
będzie zawsze przejawiać "pikselozę" i nie unikniesz tego, jeśli nie wykorzystasz lepszych algorytmów niż te zaimplementowane w klasie TCanvas
; Nadmienić także należy, że ikona zostałą poprawnie rozciągnięta, bo przezroczystość nie została utracona; To co podałem w pierwszym poście także zostało poprawnie rozciągnięte, a na krawędziach ikony widać piksele "półprzezroczyste" elegancko łączące się z kolorem tła - dlatego ikona została namalowana na pomocniczej bitmapie, a dopiero potem na kanwie docelowej (w przykładzie w kontrolce klasy TImage
);
Kolor pod samą ikoną także możesz pobierać dynamicznie, tak by pod różnymi schematami kolorów aplikacji tło pod ikoną zawsze było takie same, jak kontrolki-rodzica;
Nic więcej nie mogę Ci doradzić, a z racji tej, że dalej nie znam powodu Twojego grymasu do posta dołączam przykłądową aplikację do "torturowania" ikon:
Program skanowany na VirusTotal - brak zagrożeń
W tym małym programiku możesz załadować ikonę z pliku *.ico
lub jeśli potrzebujesz - możesz wyciągnąć ikonę z (mam nadzieję) dowolnego pliku *.exe
, który posiada jakąkolwiek ikonę inną, niż standardowa przydzielana przez system; Możesz też zmienić kolor tła formularza, na którym są kontrolki z namalowanymi ikonami; Po zmianie koloru tła kontrolki są przemalowywane, więc przezroczystość pozostanie; Możesz także rozciągać ikonę aby zobaczyć efekty działania metody StretchDraw
; Na zrzucie widoczna jest ramka wokół obydwu ikon - to zwykły DrawFocusRect
i służy do tego, by widzieć dokładne rozmiary kontrolek; Ramki te można wyłączyć - opcja Widok - Pokaż ramki lub kombinacja Ctrl+R;
Aplikacja jest napisana pod Delphi 7, więc jeśli nic nie stanie na przeszkodzie to będziesz mógł otworzyć projekt w nowszej wersji środowiska; Niestety nie mam czasu bawić się dłużej tym programikiem, więc zaimplementowane jest wyciąganie ikony z aplikacji jedynie w rozmiarze 32x32
piksele - po więcej informacji na ten temat odsyłam do Google; Pobaw się tym programikiem i przeanalizuj kod by dowiedzieć się w jaki sposób odbywa się rysowanie ikony na tle takim samym, jak tło kontrolki-rodzica (tu: formularz).