2010-09-28 19 views

Odpowiedz

11

Nie mówisz, jaki jest tego cel i istnieje wiele sposobów na uzyskanie ikon, a jedna metoda może być lepsza od drugiej w zależności od celu.

Jednak wyodrębnić dowolną liczbę "Large" (32x32) i/lub "małe" (16x16) Ikony * z dowolnego pliku, użyj funkcji ExtractIconEx. To pozwala wyodrębnić jedną lub więcej ikon jednego z tych dwóch standardowych rozmiarów z pliku ikony (.ico), EXE lub DLL. Plik ikony może zawierać wiele obrazów, a ta funkcja pozwala uzyskać wszystkie z nich.

Funkcja zapisze do tablicy uchwytów, z których każdy może przypisać do właściwości Handle instancji TIcon. Wtedy możesz użyć standardu TIcon methods, jak zwykle, gdybyś załadował TIcon w inny sposób. Zauważ, że nowością w Delphi XE jest możliwość łatwego skopiowania go do bitmapy via the Assign method. That article pokazuje także, w jaki sposób uzyskać dostęp do wszystkich zasobów (wbudowanych/standardowych) ikon systemu Windows, jeśli tak właśnie jest.

(Uwaga boczna: Myślę, że klasa TIcon pozwala załadować z pliku za pomocą metody LoadFromFile - wydaje się, że brakuje jej w dokumentacji, ale jestem prawie pewien, że istnieje. Z pamięci, która ładuje tylko jedną ikona)

(*) w rzeczywistości, "duże" i "małe" może być inna niż 32x32 i 16x16. wykorzystać funkcję GetSystemMetrics z SM_CXICON, SM_CYICON, SM_CXSMICON i SM_CYSMICON flagi do f Wyróżnij wymiary każdego typu.

+0

@ David, dziękuję! Mam obiekt TIcon i muszę wyodrębnić z niego wszystkie obrazy. Czy jest jakiś sposób, aby to zrobić bez ikony zapisywania do pliku za pomocą metody SaveToFile? – Branko

+0

TIcon będzie obrazem jednej ikony. Używając 'ExtractIconEx' utworzysz jeden TIcon na obraz ikony, który wyodrębnia. Następnie można uzyskać dostęp do obrazu ikony poprzez "Przypisanie" do mapy bitowej. (Czy wypełniłeś tablicę uchwytów? Spróbuj dwukrotnie wywołać 'ExtractIconEx', po raz pierwszy z' nIconIndex' ustawionym na -1 i obydwoma parametrami tablicy 'nil', i zwróci to liczbę ikon. tablica o tym rozmiarze. Więcej szczegółów można znaleźć w artykule MSDN.) –

+0

@David, TIcon to jedna ikona obrazu, jeśli została uzyskana przez ExtractIconEx, ale co jeśli istniejący obiekt TIcon ma więcej niż jeden obraz. Jeśli zapiszę TIcon z 4 obrazami do pliku (oIcon.SaveToFile) i otworzę ten plik za pomocą IconEditor, widzę wszystkie 4 obrazy i mogę wyodrębnić wszystkie 4 obrazy za pomocą ExtractIconEx. Czy można wyodrębnić wszystkie obrazy z obiektu TIcon, a nie zapisać TIcon do pliku i użyć ExtractIconEx? – Branko

Powiązane problemy