Jak tworzyć i używać zasobów w Visual Basic 6

Biznesmen pracujący przy komputerze w biurze

Jetta Productions / Getty Images





Po tym, jak uczestnicy kursu Visual Basic dowiedzą się wszystkiego o pętlach, instrukcjach warunkowych, podprogramach itd., jedną z następnych rzeczy, o które często się pytają, jest: „Jak dodać bitmapę, plik wav, niestandardowy kursor lub inny efekt specjalny? ' Jedna odpowiedź to pliki zasobów . Gdy dodajesz plik przy użyciu plików zasobów programu Visual Studio, są one integrowane bezpośrednio z projektem Visual Basic, co zapewnia maksymalną szybkość wykonywania i minimalizację kłopotów pakowanie i wdrażanie twójaplikacja.

Pliki zasobów są dostępne zarówno w VB 6, jak i VB.NET , ale sposób ich użycia, podobnie jak wszystko inne, jest nieco inny w obu systemach. Należy pamiętać, że nie jest to jedyny sposób wykorzystania plików w projekcie VB, ale ma on realne zalety. Na przykład możesz dołączyć mapę bitową do Pudełko ze zdjęciami kontrolować lub używać mciSendString Win32 API. „MCI” to prefiks, który zwykle wskazuje ciąg poleceń multimedialnych.



Tworzenie pliku zasobów w VB 6

Możesz zobaczyć zasoby w projekcie zarówno w VB 6, jak i VB.NET w Eksplorator projektów okno (Solution Explorer w VB.NET — musieli to trochę zmienić). Nowy projekt nie będzie miał żadnych, ponieważ zasoby nie są domyślnym narzędziem w VB 6. Dodajmy więc prosty zasób do projektu i zobaczmy, jak to się robi.

Krok pierwszy to uruchomienie VB 6 poprzez wybranie a Standardowy plik EXE projekt na Nowy w oknie uruchamiania. Teraz wybierz Dodatki opcji na pasku menu, a następnie Menedżer dodatków... Spowoduje to otwarcie okna dialogowego Menedżera dodatków.



Przewiń listę i znajdź Edytor zasobów VB 6 . Możesz po prostu kliknąć go dwukrotnie lub umieścić znacznik wyboru w Załadowany/Rozładowany pole, aby dodać to narzędzie do środowiska VB 6. Jeśli uważasz, że będziesz często korzystać z Edytora zasobów, możesz również umieścić w polu znacznik wyboru Załaduj przy starcie i nie będziesz musiał powtarzać tego kroku w przyszłości. Kliknij „OK”, a otworzy się Edytor zasobów. Możesz zacząć dodawać zasoby do swojego projektu!

Przejdź do paska menu i wybierz Projekt następnie Dodaj nowy plik zasobów lub po prostu kliknij prawym przyciskiem myszy w Edytorze zasobów i wybierz „Otwórz” z menu kontekstowego, które się pojawi. Otworzy się okno z monitem o nazwę i lokalizację pliku zasobów. Domyślna lokalizacja prawdopodobnie nie będzie taka, jak chcesz, więc przejdź do folderu projektu i wprowadź nazwę nowego pliku zasobów w polu Nazwa pliku skrzynka. W tym artykule będę używał nazwy „AboutVB.RES” dla tego pliku. Będziesz musiał potwierdzić utworzenie pliku w oknie weryfikacji, a plik „AboutVB.RES” zostanie utworzony i wypełniony w Edytorze zasobów.

Obsługuje VB6

VB6 obsługuje:

  • Edytor tabeli ciągów
    ('Edytuj tabele ciągów...')
  • Kursory niestandardowe - pliki 'CUR'
    („Dodaj kursor...”)
  • Niestandardowe ikony - pliki 'ICO'
    („Dodaj ikonę...”)
  • Niestandardowe mapy bitowe — pliki „BMP”
    ('Dodaj bitmapę...')
  • Zasoby zdefiniowane przez programistę
    („Dodaj zasób niestandardowy...”)

VB 6 zapewnia prosty edytor ciągów, ale musisz mieć plik utworzony w innym narzędziu dla wszystkich innych opcji. Na przykład możesz utworzyć plik BMP za pomocą prostego programu Windows Paint.



Każdy zasób w pliku zasobów jest identyfikowany w VB 6 przez ID i nazwisko w Edytorze zasobów. Aby udostępnić zasób dla swojego programu, dodaj je w Edytorze zasobów, a następnie użyj identyfikatora i zasobu „Typ”, aby wskazać je w swoim programie. Dodajmy cztery ikony do pliku zasobów i użyjmy ich w programie.

Po dodaniu zasobu sam plik jest kopiowany do projektu. Visual Studio 6 udostępnia całą kolekcję ikon w folderze...



C:Program FilesMicrosoft Visual StudioCommonGraphicsIcons

Zgodnie z tradycją wybierzemy cztery „elementy” greckiego filozofa Arystotelesa — Ziemię, Wodę, Powietrze i Ogień — z podkatalogu Elements. Po ich dodaniu identyfikator jest automatycznie przypisywany przez program Visual Studio (101, 102, 103 i 104).



Aby użyć ikon w programie, używamy funkcji VB 6 „Załaduj zasób”. Do wyboru jest kilka z tych funkcji:

    LoadResPicture (indeks, format)dla bitmap, ikon i kursorów

Użyj predefiniowanych stałych VB vbResBitmap dla bitmap, vbResIcon dla ikon i vbResCursor dla kursorów dla parametru „format”. Ta funkcja zwraca obraz, którego możesz użyć bezpośrednio. LoadResData (wyjaśnione poniżej) zwraca ciąg znaków zawierający rzeczywiste bity w pliku. Zobaczymy, jak tego użyć, gdy zademonstrujemy ikony.



    LoadResString (indeks)na smyczkiLoadResData(indeks, format)na wszystko do 64K

Jak wspomniano wcześniej, ta funkcja zwraca ciąg z rzeczywistymi bitami w zasobie. Oto wartości, które mogą być tutaj użyte dla parametru formatu:

1 zasób kursora
2 Zasób mapy bitowej
3 Ikona zasobów
4 Zasoby menu
5 Okno dialogowe
6 Zasób ciągów
7 Zasób katalogu czcionek
8 Zasób czcionki
9 Stół akceleratora
10 Zasób zdefiniowany przez użytkownika
12 Kursor grupowy
14 Ikona grupy

Ponieważ mamy cztery ikony w naszym pliku zasobów AboutVB.RES, użyjmy LoadResPicture (indeks, format) aby przypisać je do właściwości Picture CommandButton w VB 6.

Stworzyłem aplikację z czterema Przycisk opcji komponenty oznaczone jako Ziemia, Woda, Powietrze i Ogień oraz cztery zdarzenia Click — po jednym dla każdej opcji. Następnie dodałem Przycisk polecenia i zmieniono właściwość Style na „1 — Graficzny”. Jest to konieczne, aby móc dodać niestandardową ikonę do CommandButton. Kod dla każdego OptionButton (i zdarzenia Form Load — aby go zainicjować) wygląda tak (ze zmienionymi odpowiednio Id i Caption dla innych zdarzeń OptionButton Click):

Zasoby niestandardowe

„Wielką sprawą” w przypadku zasobów niestandardowych jest to, że zwykle musisz zapewnić sposób ich przetwarzania w kodzie programu. Jak Microsoft stwierdza to, „zwykle wymaga to użycia wywołań Windows API”. To właśnie zrobimy.

Przykład, którego użyjemy, to szybki sposób na załadowanie tablicy z serią stałych wartości. Pamiętaj, że plik zasobów jest dołączony do projektu, więc jeśli wartości, które chcesz załadować, zmienią się, będziesz musiał użyć bardziej tradycyjnego podejścia, takiego jak sekwencyjny plik, który otwierasz i czytasz. Interfejs API systemu Windows, którego będziemy używać, to Kopiuj pamięć API. CopyMemory kopiuje blok pamięci do innego bloku pamięci bez względu na typ danych, które są tam przechowywane. Ta technika jest dobrze znana użytkownikom VB 6 jako ultraszybki sposób kopiowania danych wewnątrz programu.

Ten program jest nieco bardziej skomplikowany, ponieważ najpierw musimy utworzyć plik zasobów zawierający serię długich wartości. Po prostu przypisałem wartości do tablicy:

Dim longs(10) Tak długo
długie (1) = 123456
długie(2) = 654321

... i tak dalej.

Następnie wartości można zapisać do pliku o nazwie MyLongs.longs za pomocą instrukcji VB 6 'Put'.

Warto pamiętać, że plik zasobów nie zmienia się, dopóki nie usuniesz starego i nie dodasz nowego. Tak więc, używając tej techniki, musiałbyś zaktualizować program, aby zmienić wartości. Aby dołączyć plik MyLongs.longs do programu jako zasób, dodaj go do pliku zasobów, wykonując te same czynności opisane powyżej, ale kliknij Dodaj zasób niestandardowy... zamiast Dodaj ikonę... Następnie wybierz plik MyLongs.longs jako plik do dodania. Musisz również zmienić „Typ” zasobu, klikając go prawym przyciskiem myszy, wybierając „Właściwości” i zmieniając Typ na „Długie”. Zauważ, że jest to typ pliku MyLongs.longs.

Aby użyć utworzonego pliku zasobów do utworzenia nowej tablicy, najpierw zadeklaruj wywołanie Win32 CopyMemory API:

Następnie przeczytaj plik zasobów:

Następnie przenieś dane z tablicy bajtów do tablicy długich wartości. Przydziel tablicę wartościom długości, używając liczby całkowitej długości ciągu bajtów podzielonej przez 4 (czyli 4 bajty na długość):

Może się to wydawać dużym problemem, gdy można po prostu zainicjować tablicę w zdarzeniu Form Load, ale pokazuje, jak korzystać z zasobu niestandardowego. Gdybyś miał duży zestaw stałych, których potrzebowałbyś do zainicjowania tablicy, działałby szybciej niż jakakolwiek inna metoda, o której myślę, i nie musiałbyś mieć osobnego pliku dołączonego do aplikacji, aby to zrobić.