Hvordan lage og bruke ressurser i Visual Basic 6

Forretningsmann som jobber ved datamaskinen på kontoret

Jetta Productions / Getty Images





Etter at Visual Basic-studenter har lært alt om looper og betingede utsagn og subrutiner og så videre, er en av de neste tingene de ofte spør om: 'Hvordan legger jeg til en punktgrafikk, en wav-fil, en tilpasset markør eller en annen spesialeffekt? ' Ett svar er ressursfiler . Når du legger til en fil ved hjelp av Visual Studio-ressursfiler, blir de integrert direkte i Visual Basic-prosjektet for maksimal utførelseshastighet og minimalt problem pakking og distribusjon dinapplikasjon.

Ressursfiler er tilgjengelige i både VB 6 og VB.NET , men måten de brukes på, som alt annet, er ganske forskjellig mellom de to systemene. Husk at dette ikke er den eneste måten å bruke filer i et VB-prosjekt, men det har virkelige fordeler. Du kan for eksempel inkludere en bitmap i en PictureBox kontrollere eller bruke mciSendString Win32 API. 'MCI' er et prefiks som vanligvis indikerer en multimediekommandostreng.



Opprette en ressursfil i VB 6

Du kan se ressursene i et prosjekt i både VB 6 og VB.NET i Prosjektutforsker vindu (Solution Explorer i VB.NET - de måtte gjøre det litt annerledes). Et nytt prosjekt vil ikke ha noen siden ressurser ikke er et standardverktøy i VB 6. Så la oss legge til en enkel ressurs til et prosjekt og se hvordan det gjøres.

Trinn én er å starte VB 6 ved å velge a Standard EXE prosjekt på Ny fanen i oppstartsdialogen. Velg nå Tillegg alternativet på menylinjen, og deretter Tilleggsbehandler... Dette åpner dialogvinduet Add-In Manager.



Rull nedover listen og finn VB 6 Resource Editor . Du kan bare dobbeltklikke på den, eller du kan sette en hake i Lastet/avlastet boksen for å legge til dette verktøyet til ditt VB 6-miljø. Hvis du tror du kommer til å bruke ressursredigereren mye, kan du også merke av i boksen Last ved oppstart og du trenger ikke gå gjennom dette trinnet igjen i fremtiden. Klikk 'OK' og Ressursredigering åpnes. Du er klar til å begynne å legge til ressurser til prosjektet ditt!

Gå til menylinjen og velg Prosjekt deretter Legg til ny ressursfil eller bare høyreklikk i ressursredigereren og velg 'Åpne' fra hurtigmenyen som dukker opp. Et vindu åpnes som ber deg om navn og plassering av en ressursfil. Standardplasseringen vil sannsynligvis ikke være det du ønsker, så naviger til prosjektmappen og skriv inn navnet på den nye ressursfilen din i Filnavn eske. I denne artikkelen vil jeg bruke navnet 'AboutVB.RES' for denne filen. Du må bekrefte opprettelsen av filen i et verifiseringsvindu, og en 'AboutVB.RES'-fil vil bli opprettet og fylt ut i ressursredigereren.

VB6 støtter

VB6 støtter følgende:

  • En strengtabellredigerer
    ('Rediger strengtabeller...')
  • Egendefinerte markører - 'CUR'-filer
    ('Legg til markør...')
  • Egendefinerte ikoner - 'ICO'-filer
    ('Legg til ikon...')
  • Egendefinerte punktgrafikk - 'BMP'-filer
    ('Legg til punktgrafikk...')
  • Programmerer definerte ressurser
    ('Legg til egendefinert ressurs ...')

VB 6 gir en enkel editor for strenger, men du må ha en fil opprettet i et annet verktøy for alle de andre valgene. Du kan for eksempel lage en BMP-fil ved å bruke det enkle Windows Paint-programmet.



Hver ressurs i ressursfilen er identifisert til VB 6 av en ID og et navn i ressursredigereren. For å gjøre en ressurs tilgjengelig for programmet ditt, legger du dem til i ressursredigereren og bruker deretter ID-en og ressursen 'Type' for å peke på dem i programmet. La oss legge til fire ikoner i ressursfilen og bruke dem i programmet.

Når du legger til en ressurs, kopieres selve filen inn i prosjektet ditt. Visual Studio 6 gir en hel samling av ikoner i mappen...



C:Program FilesMicrosoft Visual StudioCommonGraphicsIcons

For å følge tradisjonen velger vi den greske filosofen Aristoteles' fire 'elementer' - Jord, vann, luft og ild - fra underkatalogen Elementer. Når du legger dem til, tildeles ID-en automatisk av Visual Studio (101, 102, 103 og 104).



For å bruke ikonene i et program bruker vi en VB 6 'Load Resource'-funksjon. Det er flere av disse funksjonene å velge mellom:

    LoadResPicture(indeks, format)for punktgrafikk, ikoner og markører

Bruk de forhåndsdefinerte VB-konstantene vbResBitmap for punktgrafikk, vbResIcon for ikoner, og vbResCursor for markører for 'format'-parameteren. Denne funksjonen returnerer et bilde som du kan bruke direkte. LoadResData (forklart nedenfor) returnerer en streng som inneholder de faktiske bitene i filen. Vi vil se hvordan du bruker det etter at vi har demonstrert ikoner.



    LoadResString(indeks)for strengerLoadResData(indeks, format)for alt opp til 64K

Som nevnt tidligere, returnerer denne funksjonen en streng med de faktiske bitene i ressursen. Dette er verdiene som kan brukes for formatparameter her:

1 Markørressurs
2 Bitmap-ressurs
3 Ikon ressurs
4 Meny ressurs
5 Dialogboks
6 Stringsressurs
7 Fontkatalogressurs
8 Fontressurs
9 Akseleratorbord
10 Brukerdefinert ressurs
12 Gruppemarkør
14 Gruppeikon

Siden vi har fire ikoner i vår AboutVB.RES ressursfil, la oss bruke LoadResPicture(indeks, format) for å tilordne disse til Picture-egenskapen til en CommandButton i VB 6.

Jeg opprettet en applikasjon med fire Alternativknapp komponenter merket Earth, Water, Air and Fire og fire klikk-hendelser – én for hvert alternativ. Så la jeg til en Kommandoknapp og endret stilegenskapen til '1 – grafisk.' Dette er nødvendig for å kunne legge til et tilpasset ikon til kommandoknappen. Koden for hver OptionButton (og Form Load-hendelsen - for å initialisere den) ser slik ut (med ID og Caption endret tilsvarende for de andre OptionButton Click-hendelsene):

Egendefinerte ressurser

'Big deal' med tilpassede ressurser er at du vanligvis må gi en måte å behandle dem i programkoden din. Som Microsoft sier det, 'dette krever vanligvis bruk av Windows API-kall.' Det er det vi skal gjøre.

Eksemplet vi skal bruke er en rask måte å laste en matrise med en serie konstante verdier. Husk at ressursfilen er inkludert i prosjektet ditt, så hvis verdiene du trenger å laste endres, må du bruke en mer tradisjonell tilnærming, for eksempel en sekvensiell fil som du åpner og leser. Windows API vi skal bruke er CopyMemory API. CopyMemory kopierer minneblokken til en annen minneblokk uten hensyn til datatypen som er lagret der. Denne teknikken er velkjent for VB 6'ere som en ultrarask måte å kopiere data inne i et program.

Dette programmet er litt mer involvert fordi først må vi lage en ressursfil som inneholder en rekke lange verdier. Jeg tildelte bare verdier til en matrise:

Dim longs(10) As Long
longs(1) = 123456
longs(2) = 654321

... og så videre.

Deretter kan verdiene skrives til en fil som heter MyLongs.longs ved å bruke VB 6 'Put'-setningen.

Det er en god idé å huske at ressursfilen ikke endres med mindre du sletter den gamle og legger til en ny. Så ved å bruke denne teknikken må du oppdatere programmet for å endre verdiene. For å inkludere filen MyLongs.longs i programmet som en ressurs, legg den til i en ressursfil ved å bruke de samme trinnene som beskrevet ovenfor, men klikk på Legg til egendefinert ressurs... i stedet for Add Icon... Velg deretter MyLongs.longs-filen som filen du vil legge til. Du må også endre 'Type' til ressursen ved å høyreklikke på den ressursen, velge 'Egenskaper' og endre Type til 'longs'. Merk at dette er filtypen til MyLongs.longs-filen.

For å bruke ressursfilen du har opprettet til å opprette en ny matrise, erklærer du først Win32 CopyMemory API-kallet:

Les deretter ressursfilen:

Deretter flytter du dataene fra byte-matrisen til en matrise med lange verdier. Tildel en matrise for longs-verdiene ved å bruke heltallsverdien til lengden på strengen med byte delt på 4 (det vil si 4 byte per lang):

Nå kan dette virke som en hel masse problemer når du bare kunne initialisere matrisen i Form Load-hendelsen, men det viser hvordan du bruker en tilpasset ressurs. Hvis du hadde et stort sett med konstanter som du trengte å initialisere arrayet med, ville det løpe raskere enn noen annen metode jeg kan tenke meg, og du trenger ikke å ha en egen fil inkludert i applikasjonen for å gjøre det.