Nadat Visual Basic-studenten alles leren over lussen en voorwaardelijke instructies en subroutines, enzovoort, is een van de volgende dingen waar ze vaak naar vragen: "Hoe voeg ik een bitmap, een wav-bestand, een aangepaste cursor of een ander speciaal effect toe?" " Eén antwoord is bronbestanden. Wanneer u een bestand toevoegt met behulp van Visual Studio-bronbestanden, worden deze rechtstreeks geïntegreerd in uw Visual Basic-project voor maximale uitvoeringssnelheid en minimale gedoe verpakking en inzet van uw applicatie.
Bronbestanden zijn beschikbaar in zowel VB 6 als VB.NET, maar de manier waarop ze worden gebruikt, zoals al het andere, is nogal verschillend tussen de twee systemen. Houd er rekening mee dat dit niet de enige manier is om bestanden in een VB-project te gebruiken, maar het heeft echte voordelen. U kunt bijvoorbeeld een bitmap opnemen in een Foto doos bedien of gebruik de mciSendString Win32 API. "MCI" is een voorvoegsel dat meestal een multimedia-opdrachtreeks aangeeft.
U kunt de bronnen in een project in zowel VB 6 als VB.NET bekijken in de Project Explorer venster (Solution Explorer in VB.NET - ze moesten het net een beetje anders maken). Een nieuw project heeft er geen omdat bronnen geen standaardtool zijn in VB 6. Laten we dus een eenvoudige bron aan een project toevoegen en kijken hoe dat wordt gedaan.
Stap één is om VB 6 te starten door a te selecteren Standaard EXE project op de Nieuw tabblad in het opstartvenster. Selecteer nu de Add-Ins optie op de menubalk en vervolgens op Add-in manager ... Hiermee wordt het dialoogvenster Add-in Manager geopend.
Blader door de lijst en zoek VB 6 Resource Editor. Je kunt er gewoon op dubbelklikken of je kunt een vinkje in de Be- / ontladen om deze tool aan uw VB 6-omgeving toe te voegen. Als u denkt dat u de Resource Editor veel gaat gebruiken, kunt u ook een vinkje in het vakje plaatsen Laden bij opstarten en u hoeft deze stap in de toekomst niet opnieuw te doorlopen. Klik op "OK" en de Bronneneditor verschijnt. U bent klaar om bronnen aan uw project toe te voegen!
Ga naar de menubalk en selecteer project vervolgens Nieuw bronbestand toevoegen of klik met de rechtermuisknop in de Resource Editor en selecteer "Openen" in het contextmenu dat verschijnt. Er wordt een venster geopend waarin u om de naam en locatie van een bronbestand wordt gevraagd. De standaardlocatie zal waarschijnlijk niet zijn wat u wilt, dus navigeer naar uw projectmap en voer de naam van uw nieuwe bronbestand in Bestandsnaam doos. In dit artikel gebruik ik de naam "AboutVB.RES" voor dit bestand. U moet het maken van het bestand bevestigen in een verificatievenster en het bestand "AboutVB.RES" wordt gemaakt en ingevuld in de Resource Editor.
VB6 ondersteunt het volgende:
VB 6 biedt een eenvoudige editor voor tekenreeksen, maar voor alle andere keuzes moet een bestand in een andere tool zijn gemaakt. U kunt bijvoorbeeld een BMP-bestand maken met het eenvoudige Windows Paint-programma.
Elke bron in het bronbestand wordt geïdentificeerd aan VB 6 door een ID kaart en een naam in de Resource Editor. Als u een bron beschikbaar wilt maken voor uw programma, voegt u deze toe in de Broneditor en gebruikt u vervolgens de ID en de bron 'Type' om ernaar te verwijzen in uw programma. Laten we vier pictogrammen aan het bronbestand toevoegen en deze in het programma gebruiken.
Wanneer u een bron toevoegt, wordt het eigenlijke bestand zelf naar uw project gekopieerd. Visual Studio 6 biedt een hele verzameling pictogrammen in de map ...
C: \ Program Files \ Microsoft Visual Studio \ Common \ Graphics \ Icons
Om de traditie te volgen, zullen we de vier "elementen" van de Griekse filosoof Aristoteles - Aarde, Water, Lucht en Vuur - selecteren uit de Elementen-submap. Wanneer u ze toevoegt, wordt de ID automatisch toegewezen door Visual Studio (101, 102, 103 en 104).
Om de pictogrammen in een programma te gebruiken, gebruiken we een VB 6 "Load Resource" -functie. Er zijn verschillende van deze functies om uit te kiezen:
Gebruik de vooraf gedefinieerde VB-constanten vbResBitmap voor bitmaps, vbResIcon voor pictogrammen, en vbResCursor voor cursors voor de parameter "format". Deze functie retourneert een afbeelding die u direct kunt gebruiken. LoadResData (hieronder uitgelegd) retourneert een tekenreeks die de feitelijke bits in het bestand bevat. We zullen zien hoe dat te gebruiken nadat we pictogrammen hebben gedemonstreerd.
Zoals eerder opgemerkt, retourneert deze functie een tekenreeks met de werkelijke bits in de bron. Dit zijn de waarden die hier voor de parameter format kunnen worden gebruikt:
1 Cursorhulpmiddel
2 Bitmap-bron
3 Pictogrambron
4 Menubron
5 Dialoogvenster
6 Stringbron
7 Bron van lettertypenmap
8 Lettertypebron
9 Acceleratortabel
10 Door de gebruiker gedefinieerde bron
12 Groepscursor
14 Groepspictogram
Omdat we vier pictogrammen in ons AboutVB.RES-bronbestand hebben, laten we gebruiken LoadResPicture (index, formaat) om deze toe te wijzen aan de eigenschap Picture van een CommandButton in VB 6.
Ik heb een applicatie gemaakt met vier OptionButton componenten met het label Earth, Water, Air and Fire en vier Click-events - één voor elke optie. Toen voegde ik een toe Command knop en veranderde de eigenschap Style in "1 - Graphical". Dit is nodig om een aangepast pictogram aan de CommandButton toe te kunnen voegen. De code voor elke OptionButton (en de gebeurtenis Form Load - om deze te initialiseren) ziet er als volgt uit (met de ID en het bijschrift dienovereenkomstig gewijzigd voor de andere OptionButton Click-gebeurtenissen):
Private Sub Option1_Click ()
Het "grote probleem" met aangepaste bronnen is dat u normaal gesproken een manier moet bieden om deze in uw programmacode te verwerken. Zoals Microsoft het zegt, "vereist dit meestal het gebruik van Windows API-aanroepen." Dat is wat we zullen doen.
Het voorbeeld dat we zullen gebruiken is een snelle manier om een array met een reeks constante waarden te laden. Vergeet niet dat het bronbestand in uw project is opgenomen, dus als de waarden die u moet laden veranderen, moet u een meer traditionele aanpak gebruiken, zoals een sequentieel bestand dat u opent en leest. De Windows API die we zullen gebruiken is de CopyMemory API. CopyMemory kopieert een geheugenblok naar een ander geheugenblok, ongeacht het gegevenstype dat daar is opgeslagen. Deze techniek is bij VB 6'ers bekend als een ultrasnelle manier om gegevens binnen een programma te kopiëren.
Dit programma is wat ingewikkelder omdat we eerst een bronbestand moeten maken dat een reeks lange waarden bevat. Ik heb eenvoudig waarden toegewezen aan een array:
Dim lang (10) Zo lang
longs (1) = 123456
longs (2) = 654321
… enzovoorts.
Vervolgens kunnen de waarden worden weggeschreven naar een bestand met de naam MyLongs.longs met behulp van de VB 6 "Put" -instructie.
Dim hBestand zo lang
Het is een goed idee om te onthouden dat het bronbestand niet verandert, tenzij u het oude verwijdert en een nieuw toevoegt. Met deze techniek zou u dus het programma moeten bijwerken om de waarden te wijzigen. Als u het bestand MyLongs.longs als een bron in uw programma wilt opnemen, voegt u het toe aan een bronbestand met dezelfde stappen die hierboven zijn beschreven, maar klikt u op de Aangepaste bron toevoegen ... in plaats van Pictogram toevoegen ... Selecteer vervolgens het bestand MyLongs.longs als het bestand dat u wilt toevoegen. U moet ook het "Type" van de resource wijzigen door met de rechtermuisknop op die resource te klikken, "Eigenschappen" te selecteren en het Type te wijzigen in "longs". Merk op dat dit het bestandstype is van uw MyLongs.longs-bestand.
Om het door u gemaakte bronbestand te gebruiken om een nieuwe array te maken, geeft u eerst de Win32 CopyMemory API-aanroep aan:
Private Declare Sub CopyMemory _
Lees dan het bronbestand:
Dim bytes () As Byte
Verplaats vervolgens de gegevens van de array bytes naar een reeks lange waarden. Wijs een array toe voor de longs-waarden met behulp van de integerwaarde van de lengte van de reeks bytes gedeeld door 4 (dat wil zeggen 4 bytes per long):
ReDim longs (1 tot (UBound (bytes)) \ 4) Zo lang
Nu lijkt dit misschien een hoop problemen wanneer u de array gewoon kunt initialiseren in de gebeurtenis Form Load, maar het laat wel zien hoe u een aangepaste resource kunt gebruiken. Als je een grote set constanten had waarmee je de array kon initialiseren, zou het sneller werken dan elke andere methode die ik kan bedenken en je zou geen apart bestand bij je applicatie moeten hebben om het te doen.