Od map bitowych po ikony, kursory i tabele ciągów - każdy program Windows używa zasobów. Zasoby to te elementy programu, które obsługują program, ale nie są kodem wykonywalnym. W tym artykule omówimy przykłady użycia map bitowych, ikon i kursorów z zasobów.
Lokalizacja zasobów
Umieszczanie zasobów w pliku .exe ma dwa główne elementy Zalety:
- Dostęp do zasobów można uzyskać szybciej, ponieważ zlokalizowanie zasobu w pliku wykonywalnym zajmuje mniej czasu niż załadowanie go z pliku dyskowego.
- Plik programu i zasoby mogą być zawarte w pojedynczej jednostce (plik .exe) bez potrzeby używania wielu plików pomocniczych.
Edytor obrazów
Przede wszystkim musimy utworzyć plik zasobów. Domyślne rozszerzenie plików zasobów to.RES. Pliki zasobów można tworzyć za pomocą edytora obrazów Delphi.
Możesz nazwać plik zasobów, jak chcesz, pod warunkiem, że ma rozszerzenie „.RES”, a nazwa pliku bez rozszerzenia nie jest taka sama jak nazwa pliku jednostki lub projektu. Jest to ważne, ponieważ domyślnie każdy Projekt Delphi
który kompiluje się w aplikację, ma plik zasobów o tej samej nazwie co plik projektu, ale z rozszerzeniem „.RES”. Najlepiej jest zapisać plik w tym samym katalogu, co plik projektu.Włączanie zasobów do aplikacji
Aby uzyskać dostęp do naszego własnego pliku zasobów, musimy powiedzieć Delphi, aby połączyć nasz plik zasobów z naszą aplikacją. Dokonuje się tego poprzez dodanie dyrektywy kompilatora do kodu źródłowego. Ta dyrektywa musi być natychmiast zgodna z dyrektywą w sprawie formularzy, jak poniżej:
{$ R * .DFM}
{$ R DPABOUT.RES}
Nie usuwaj przypadkowo części {$ R * .DFM}, ponieważ jest to linia kodu, która mówi Delphi, aby łączyła się w części wizualnej formularza. Kiedy wybierasz bitmapy dla przycisków szybkości, komponentów obrazu lub komponentów przycisku, Delphi dołącza plik bitmapy, który wybrałeś jako część zasobu formularza. Delphi izoluje elementy interfejsu użytkownika w pliku .DFM.
Aby faktycznie skorzystać z zasobu, musisz zrobić kilka Windows API połączenia. Mapy bitowe, kursory i ikony przechowywane w plikach RES można odzyskać za pomocą funkcji API LoadBitmap, LoadCursor, i LoadIcon odpowiednio.
Zdjęcia w zasobach
Pierwszy przykład pokazuje, jak załadować bitmapę przechowywaną jako zasób i wyświetlić w TIMage składnik.
procedura TfrMain.btnCanvasPic (Sender: TObject);
var bBitmap: TBitmap;
zaczynać
bBitmap: = TBitmap. Stwórz;
próbować
bBitmap. Uchwyt: = LoadBitmap (hInstance, 'ATHENA');
Image1.Width: = bBitmap. Szerokość;
Image1.Height: = bBitmap. Wysokość;
Image1.Canvas. Draw (0,0, bBitmap);
Wreszcie
bBitmap. Darmowy;
koniec;
koniec;
Uwaga: Jeśli mapa bitowa, która ma zostać załadowana, nie znajduje się w pliku zasobów, program nadal będzie działał, po prostu nie wyświetli mapy bitowej. Tej sytuacji można uniknąć, testując, czy bBitmap. Uchwyt wynosi zero po połączeniu z LoadBitmap () i podejmując odpowiednie kroki. The spróbuj / w końcu część z poprzedniego kodu nie rozwiązuje tego problemu, wystarczy upewnić się, że bBitmap jest zniszczony, a powiązana z nim pamięć jest zwolniona.
Inny sposób wyświetlania bitmapy z zasobu jest następujący:
procedura TfrMain.btnLoadPicClick (Sender: TObject);
zaczynać
Image1.Picture. Mapa bitowa
LoadFromResourceName (hInstance, „EARTH”);
koniec;
Kursory w zasobach
Ekran. Kursory [] jest szyk kursorów dostarczonych przez Delphi. Korzystając z plików zasobów, możemy dodawać niestandardowe kursory do właściwości Cursors. O ile nie chcemy zastąpić żadnego z ustawień domyślnych, najlepszą strategią jest używanie numerów kursorów od 1.
procedura TfrMain.btnUseCursorClick (Sender: TObject);
const NewCursor = 1;
zaczynać
Ekran. Kursory [NewCursor]: =
LoadCursor (hInstance, „CURHAND”);
Image1.Cursor: = NewCursor;
koniec;
Ikony w zasobach
Jeśli spojrzymy na Delphi Projekt-Opcje-Zastosowanie ustawienia, możemy stwierdzić, że Delphi dostarcza domyślną ikonę projektu. Ta ikona reprezentuje aplikację w Eksploratorze Windows i kiedy aplikacja jest zminimalizowana. Możemy to łatwo zmienić, klikając przycisk „Załaduj ikonę”.
Jeśli chcemy na przykład animować ikonę programu, gdy program jest zminimalizowany, to poniższy kod wykona zadanie.
Do animacji potrzebujemy TTimer komponent w formularzu. Kod ładuje dwie ikony z pliku zasobów do tablicy TIkon przedmioty; tablica ta musi być zadeklarowana w części publicznej głównej formy. Będziemy też potrzebować NrIco, to jest liczba całkowita zmienna, zadeklarowane w publiczny część. The NrIco służy do śledzenia następnej ikony do wyświetlenia.
publiczny
nrIco: Liczba całkowita;
MinIcon: tablica [0..1] TIcon;
...
procedura TfrMain. FormCreate (Sender: TObject);
zaczynać
MinIcon [0]: = TIcon. Stwórz;
MinIcon [1]: = TIcon. Stwórz;
MinIcon [0]. Uchwyt: = LoadIcon (hInstance, 'ICOOK');
MinIcon [1]. Uchwyt: = LoadIcon (hInstance, „ICOFOLD”);
NrIco: = 0;
Timer1.Interval: = 200;
koniec;
...
procedura TfrMain. Timer1Timer (Sender: TObject);
beginif IsIconic (Aplikacja. Uchwyt) następniezaczynać
NrIco: = (NrIco + 1) mod 2;
Podanie. Ikona: = MinIcon [NrIco];
koniec;
koniec;
...
procedura TfrMain. FormDestroy (Sender: TObject);
zaczynać
MinIcon [0] .Darmowy;
MinIcon [1]. Bezpłatnie;
koniec;
w Timer1.OnTimer obsługa zdarzeń, IsMinimized Funkcja służy do sprawdzenia, czy musimy animować naszą główną ikonę, czy nie. Lepszym sposobem na osiągnięcie tego byłoby uchwycenie przycisków maksymalizacji / minimalizacji i działanie.
Ostatnie słowa
Możemy umieścić wszystko (cóż, nie wszystko) w plikach zasobów. W tym artykule pokazano, jak używać zasobów do używania / wyświetlania bitmapy, kursora lub ikony w aplikacji Delphi.
Uwaga: Kiedy zapisujemy projekt Delphi na dysku, Delphi automatycznie tworzy jeden plik .RES, który ma taką samą nazwę jak projekt (jeśli nic więcej, główna ikona projektu jest w środku). Chociaż możemy zmienić ten plik zasobów, nie jest to zalecane.