Visual Basic door ir. C.Daniels 1
|
|
|
- Andrea Peters
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Visual Basic door ir. C.Daniels 1
2 I. Lab 1 - Inleiding en kennismaking met VB A. Waarom Visual Basic? Visual Basic is een grafische programmeeromgeving, waarmee u makkelijk windowsprogramma s kunt schrijven. Dit is niet vanzelfsprekend. Programmeren in windows is zelfs voor gehaaide programmeurs een hele klus, en zeer ingewikkeld. Visual Basic verlicht deze taak, door de specifieke windows-programmering op zich te nemen, en de gebruiker alleen maar de voor hem interessante programmaonderdelen te laten schrijven. Het ontwerpen (programmeren) en openen van een venster vergt heel wat kennis van de programmeur over windows. Ook het onderscheppen en behandelen van de windowsberichten is een hele klus. Temeer omdat windows een multitasking omgeving omvat, dwz dat windows meerdere programma s tegelijkertijd kan laten draaien. De programmeur dient zich dan ook te houden aan de vooropgestelde spelregels. Maar zoals gezegd, visual basic ontlast de programmeur, en heel de nodige programmeerbackground wordt voor de gebruiker geregeld, als het ware achter de schermen, ze is er wel, maar u ziet ze niet, en hoeft u er ook niet om te bekommeren. Dat is een van de grote voordelen om eenvoudige windows-programma s te schrijven in Visual Basic. Daarnaast kan deze taal ook gebruikt worden in programma s zoals Word en Excel om de kracht van deze programma s te vergroten door het schrijven van u eigen macroprogramma s. Dit wordt dan Visual Basic for Applications genoemd, dikwijls afgekort tot VBA. B. Hoe werkt windows? De windows-omgeving is event driven, zoals dit in vaktaal wordt genoemd. Vrij vertaald: gestuurd door gebeurtenissen. Wat betekent dit? Dit betekent dat windows reageert op elke actie van een gebruiker. Acties kunnen zijn het klikken op een venster, op een knop, het invullen van tekst in een invoervak, het aanslaan van een toets, het vergroten of verkleinen van een venster, enz. Voor elke actie is er een geschikt programma-onderdeel nodig, dan de goede acties uitvoert. Het is windows zelf die deze events of berichten detecteert en verder stuurt aan de draaiende programma s. In Visual Basic moet de gebruiker alleen programmatuur schrijven voor de gebeurtenissen (events) die hem aanbelangen. Ander gebeurtenissen zoals het klikken op het kruisje rechts boven in een venster, zijn al automatisch voorgeprogrammeerd. Daar hoeft de gebruiker zich niet om te bekommeren. Visual Basic door ir. C.Daniels 2
3 Programma x Knop 1 Knop2 X Private Sub Knop1_Click. end Private Sub Knop2_Click. end In bovenstaand voorbeeld ziet u een eenvoudig programma met twee drukknoppen. Als de gebruiker op Knop1 klikt wordt door windows het bijbehorende programma-onderdeel private sub Knop1_Click aangeroepen. Voor het klikken op Knop2 geldt hetzelfde maar nu wordt het programma-onderdeel private Sub Knop2_Click aangeroepen. Windows is: - Multitasking - Event driven Onthou! C. De programmeeromgeving van Visual Basic: ons eerste programma. Maak eerst een nieuwe map aan op de harde schijf of op uw diskette met de naam Mijnprogrammas bv. of kies zelf een toepasselijke naam. Als uw programma Visual Basic opstart krijgt u ongeveer het volgende te zien: Visual Basic door ir. C.Daniels 3
4 De opdrachten door u uit te voeren, worden in cursieve tekst aangeduid zoals hieronder: Opdracht: doe nu.. Bij het openen van VB krijgt u het dialoogscherm New project. U heeft verschillende mogelijkheden. In het opstartscherm vraagt VB of u een nieuw of een bestaand programma wil openen. Kies voor het tabblad New, want we gaan een nieuw programma ontwerpen. Laat de optie Standard.exe geselecteerd. Dit is namelijk een gewoon VB-programma. Andere opties komen later ter sprake. Klik op Openen Daarna krijgt u ongeveer het volgende te zien: 2.Project Explorer venster 3.Properties dialoog 1.Form window: het venster met het programma dat je gaat ontwerpen 4.Form layout Als u niet alle vensters ziet zoals hierboven, kunt u dit aanpassen door in het menu -> View het juiste venster aan te klikken. U kunt de vensters ook apart vergroten, verkleinen of verslepen met de muis. Probeer dit uit totdat u ongeveer de layout bekomt zoals hierboven. Visual Basic door ir. C.Daniels 4
5 Hier wat uitleg bij de verschillende vensters. Later zullen we leren ze te gebruiken. 1. Form window: in dit venster gaat u de layout van uw programma bepalen. U kunt er knopjes plaatsen, invulvelden en allerlei andere objecten nodig voor uw programma. Een groter programma kan meerdere formulieren (vensters) bevatten. 2. Het venster van de Project Explorer. Deze geeft de documenten aan die bij ons project behoren. Nu zijn dit voorlopig: - Het project zelf: dit heet voorlopig Project1 - Een formulier met naam Form1. 3. Het properties venster. Hier vindt u de eigenschappen van het aangeklikte object. Wij hebben er slechts één: het formulier Form1. Een object is aangeklikt of geselecteerd als u er omheen de zwarte blokjes ziet. 4. Form layout. Hiermee kunt u de plaats op uw scherm bepalen, waar uw programma opstart. U kunt uw programma verschuiven op uw monitor door er met de muis op te klikken en te verschuiven. U gelooft het of niet, maar we hebben al een werkend programma gemaakt! Om dit programma te laten draaien klikt u op o Menu->Run -> Start o of gebruik F5 o of klik op: Als u dit doet zult u het programma opstarten. Het is slechts een leeg venster zoals je hierboven ziet, maar je kan het venster vergroten, verkleinen, minimaliseren, en zelfs afsluiten door op het kruisje rechts boven te klikken. Dus het heeft alle eigenschappen van een windows-programma! Sluit uw eerste programma af door op het kruisje rechts boven van uw programma te klikken of gebruik de knopjes uit de toolbar: Afbreken Ctrl-Break Sluiten Visual Basic door ir. C.Daniels 5
6 D. De eigenschappen van een object veranderen We hebben nog maar één object: ons formulier. Laten we proberen enkele eigenschappen hiervan aan te passen. Zorg dat dit formulier aangeklikt is. En concentreer u op het venster Properties. Pas de volgende eigenschappen aan: Name: Verander dit in Formulier1 (geen spaties!). De naam hebben we nodig in het programma dat we gaan schrijven. Onthou! Belangrijk: in een naam van een object mag je geen spaties zetten! Dit zal later ook gelden voor namen van variabelen als we gaan programmeren! BackColor: klik op deze eigenschap en daarna op het pijltje rechts. Kies palette en selecteer een mooie achtergrondkleur voor uw programmavenster. Borderstyle: fixed. We kunnen het venster nu niet meer groter of kleiner maken. Caption: verander dit in Eerste Programma. De caption is de titel van uw venster en wordt getoond in de blauwe balk van uw formulier. Moveable: verander dit in False. U kunt het venster nu niet meer verplaatsen over uw monitor. Start het programma op, en bekijk het resultaat. Merk op dat u onderaan in het Properties-venster wat uitleg krijgt over de aangeklikte eigenschap! Visual Basic door ir. C.Daniels 6
7 E. Reageren op een event Laten we een drukknop plaatsen in ons ontwerp. Als we op de drukknop klikken moet ons programma afsluiten. Om de knop op ons formulier te plaatsen, hebben we het Toolbox venster nodig. Tekstveld (label) Invulveld (text) Drukknop (command) Als dit venster niet zichtbaar is, kunt u dit nog doen door in het menu te kiezen View --> Toolbox. Klik de drukknop naar uw formulier, en sleep op uw formulier een drukknop. Zorg ervoor dat u de grootte aanpast aan uw behoefte. Zorg dat de knop aangeklikt is en verander enkele eigenschappen als volgt, in het properties venster: Name: cmdsluiten, de naam die we voor de knop gebruiken in het programma. Deze laten we beginnen met de letters cmd zodat we weten dat deze variabele een knop aanduidt. Caption: verander dit in Sluiten. Dit is het opschrift wat u op de knop kunt lezen. Visual Basic door ir. C.Daniels 7
8 Uw ontwerp moet er nu ongeveer als volgt uitzien: Als we nu ons programma zouden laten draaien, kunnen we wel klikken op de knop (proberen!), maar er zal niets gebeuren. We moeten een klein stukje programma schrijven dat reageert op het klikken. We doen dit als volgt: Ofwel: Dubbelklik op de knop in de ontwerpfase. Of selecteer het programmeervenster door in het Project-venster formulier1 aan te klikken, en op het icoon View code te klikken. Selecteer linksboven de knop cmdsluiten, kies rechtsboven het event Click. Dit is wat ingewikkelder maar geeft meer mogelijkheden. Verander het subprogramma als volgt: Private Sub cmdsluiten_click() End End Het commando End zorgt ervoor dat uw programma sluit als u op de knop klikt. Dit programmavenster moet er nu als volgt uitzien: Visual Basic door ir. C.Daniels 8
9 Nu moet de drukknop werken! Laat het programma runnen, en kijk of het programma sluit als we op de knop klikken. F. Een popup-scherm Een popup-scherm is een venster dat opengaat om een mededeling, waarschuwing aan de gebruiker te melden. Plaats een nieuwe knop op uw formulier, en verander de eigenschappen als volgt: Name: cmdklik Caption: Klik hier! Dubbelklik op de knop om het programma aan te vullen als volgt (alleen het vetgedrukte moet u zelf aanvullen: Option Explicit Private Sub cmdklik_click() Dim intantwoord As Integer intantwoord = MsgBox("Hier komt je mededeling!", 0, "Hi!") Private Sub cmdsluiten_click() End Als u het programma laat runnen, krijgt u volgend resultaat als u de knop Klik hier aanklikt: Zo n scherm is zeer nuttig, als u een mededeling wilt geven aan de gebruiker van het programma, als deze bijvoorbeeld een foutieve ingave doet. Visual Basic door ir. C.Daniels 9
10 Het commando Msgbox ziet er als volgt uit: Onthou! Variabele = MsgBox( De tekst die je wil tonen, getal, De paginatitel ) Variabele: hierin wordt een geheel getal geplaatst naargelang je reactie op het popupscherm. Zie verder voor uitleg over variabele. Getal: met dit getal kun je extra knoppen of symbolen bijvoegen in je popupscherm. Naargelang de reactie op dit popupscherm, verandert de waarde van de variabele. U kan de waarde van de variabele intantwoord zichtbaar maken door de volgende lijn in uw programma bij te voegen: Private Sub cmdklik_click() Dim intantwoord As Integer intantwoord = MsgBox("Hier komt je mededeling!", 0, "Hi!") Debug.Print intantwoord De waarde van intantwoord worden dan zichtbaar in het Immediate Window. Als dit niet zichtbaar is, kies dan in het menu View->Imediate window. In plaats van een getal kunt u ook een zogenaamde constante gebruiken. Dit is een naam die hetzelfde effect heeft, en makkelijker te onthouden is. Probeer eens de volgende waarden van getal uit, en noteer het resultaat van intantwoord als u op een knop klikt: (eerste lijn is reeds ingevuld) Getal Constante Resultaat (nieuwe knoppen, speciale tekens) 1 vbokcancel Knoppen Ok Annuleren 2 Waarde van de variabele Visual Basic door ir. C.Daniels 10
11 U kunt deze opties ook combineren. Als u optie 1 en 64 samen wil vult u 65 (= ) in! Probeer uit! G. Wat is een variabele? In elk programma heeft u wel behoefte om enkele gegevens (getallen, tekst,..) te bewaren. Hiervoor moet u geheugenruimte reserveren in het RAM-geheugen van uw pc. Dit geheugen is vluchtig: als u de pc afzet zijn alle gegevens uit dit geheugen verdwenen. Vandaar dat elke pc ook een harde schijf heeft, waar u op magnetische weg, langdurig, gegevens kunt opslaan. Het RAM-geheugen kunt u beschouwen als een enorme kast met schuifjes. Alle schuifjes worden genummerd van 0 tot Zo heeft een geheugen van 16Mb (megabyte) ongeveer (juister: 2 24 ) vakjes. In elk vakje past één byte, ofwel 8 bitjes. In één geheugenvakje kunt u dus één byte bewaren. Als u deze byte terug wilt zoeken, heeft u natuurlijk de nummer van het juiste vakje nodig. Dit zou erg omslachtig zijn. In de begintijd van de computers gebeurde dit wél op deze manier! Maar nu wordt aan een geheugenvakje een naam gegeven. Dit is makkelijker te programmeren. En de computer kan nu dat vakje in zijn geheugen zetten, waar hij wil. Het juiste nummer van de plaats hoeft u niet te weten, alleen de computer weet dit. Zo n geheugenplaatsje is een variabele. Eigenlijk duidt deze naam dus aan over welk vakje u wilt beschikken in uw programma. Zo is intantwoord een plaatsje waar uw een geheel getal (integer) kan instoppen. Om zo n vakje te reserveren in uw programma heeft uw dan de volgende instructie nodig: Men noemt dit een variabele declareren. Dim intantwoord As Integer Dim As Integer staat voor dimension, engels voor dimensioneren. wil zeggen dat we een vakje willen waar een geheel getal in kan. In dit geval heeft u twee bytes (twee vakjes) nodig om dat geheel getal op te slaan. We zullen later kennismaken met andere types van variabelen. U mag ook meerdere vakjes in éénmaal declareren zoals hieronder Dim i,j,k as Integer Visual Basic door ir. C.Daniels 11
12 Hier declareert men 3 vakjes om een geheel getal te bewaren met de namen i, j en k. Het is een goede gewoonte (maar niet verplicht) om in de naam van de variabele aan te geven over welk type van variabele het gaat. Vandaar dat we de variabele in ons programma de naam intantwoord hebben gegeven. We weten onmiddellijk dat het hier over een geheel getal gaat. Variabelnamen zoals a,b,c, gebruikt u beter niet. Het is niet duidelijk wat ze betekenen. Soms worden toch de variabelnamen i, j, k gebruikt om tellers aan te duiden die we maar even nodig hebben. Onthou! Variabele: - Een variabele is geheugenvakje om gegevens op te slaan in het RAM-geheugen van de computer. We geven zo n vakje een naam, om het te kunnen gebruiken in een programma. - Een geheugenvakje om gehele getallen op te slaan wordt een integer genoemd, en hiervoor zijn 2 bytes nodig in het RAM-geheugen. - Het is een goede gewoonte om in de naam van de variabele aan te geven over welk type het gaat. Zo gebruikt men int als voorvoegsel om een variabele voor een geheel getal aan te geven, bv. intantwoord - Geef altijd een naam die een betekenis heeft, dus niet a, b en c. Maar een naam zoals intantwoord. Alleen voor tellertjes die maar even nodig zijn, worden nogal eens de waarden i, j, k gebruikt. 1. Option Explicit Bovenaan uw programma ziet u de woorden Option Explicit staan. Deze instructie zorgt ervoor dat u verplicht zijt al de gebruikte variabelen te declareren. Het gebruik van deze optie is niet verplicht. Toch raden we ten zeerste aan deze optie te gebruiken. Het vermijdt dat uw fouten maakt in de naam van uw variabele. Een typefout in een naam van een variabele wordt door de compiler onmiddellijk ontdekt, en vermeld dat hij een onbekende variabele gevonden heeft. Bij uitvoering geeft de compiler deze foutmelding hiernaast.in uw programma wordt tegelijkertijd de regel aangeduid waarin zich de fout bevindt! De Option Explicit komt automatisch in uw programma te staan. Als dit niet gebeurt, kunt u dit aanpassen door in het menu Tools -> Options -> Editor de optie Require variable declaration aan te klikken. Visual Basic door ir. C.Daniels 12
13 Zoek deze instelling op in het programma, en verander indien nodig! Sla uw oefening op! Menu->file->save Kies echter andere, meer betekenisvolle namen voor het project en het formulier, bv Oef1(de extensie vbp, of frm niet invullen!) 2. Datatypes VB kent verschillende soorten datatypes. Hieronder staat een lijst met de verschillende mogelijkheden. Datatype Uitleg Bereik Nodige geheugen ruimte in bytes Integer Bevat gehele getallen. Een declaratie met percent teken (%) achteraan stelt een Integer datatype voor. -32,768 tot 32, Long String Boolean Bevat gehele getallen. Een declaratie met ampersand teken (&) achteraan stelt een Long datatype voor. Kan een reeks karakters bevatten. Dat kunnen letters, cijfers, spaties of leestekens zijn. Een declaratie met Dollar-teken ($) achteraan stelt een String datatype voor. Kan slechts 2 waarden bevatten: True (-1) of False (0) -2,147,483,648 tot 2,147,483,647 Vaste lengte: 0 tot 63K karakters Variabele lengte: 0 tot ong. 2 miljard karakters Byte Voor kleine gehele getallen Single Bevat decimale getallen in enkele precisie. Een declaratie met uitroepteken (!) achteraan stelt een Single datatype voor. Positieve getallen: E-45 to E38 Negatieve getallen: E38 tot E-45 4 Double Date Bevat decimale getallen in dubbele precisie. Een declaratie met spoorwegteken (#) achteraan stelt een Double datatype voor. Voor datum- en tijdwaarden. Worden opgeslagen als decimale getallen. Het gedeelte voor de komma stelt de datum voor, het gedeelte achter Positieve getallen: E-324 tot E308 Negatieve getallen: E308 to E Visual Basic door ir. C.Daniels 13
14 de komma de tijd. Currency Bevat getallen, speciaal voor berekeningen met munteenheden. Een declaratie met het teken achteraan stelt een Currency datatype voor. Variant Kan alle soorten data bevatten. Ook speciale warden zoals Empty (leeg) en Null. Als variabelen niet expliciet gedeclareerd worden zijn het automatisch variabelen van het varianttype. -922,337,203,685, tot 922,337,203,685, Declareren van variabelen Variabelen declareren betekent eigenlijk geheugenruimte reserveren voor die variabele. Variabelen kunt u declareren op twee manieren: - Door het aangeven van het type: Dim B as Integer - Of door het achtervoegen van een speciaal teken (verouderd) Dim B% Beide declaraties stellen een integer-variabele voor. Wij zullen in de cursus altijd de eerste methode aanhouden. U kiest beter voor duidelijke variabelnamen, die aangeven welk gegeven u erin gaat opslaan. Dus niet A,B of c1, maar wel bijvoorbeeld stringegeventekst. Dit geeft iets meer typewerk bij het ontwerpen, maar vergemakkelijkt in hoge mate de leesbaarheid en duidelijkheid van het programma. Alleen voor tellertjes in lusinstructies, worden nogal eens de variabelen i,j,k gebruikt. In de oefeningen zullen we deze verschillende datatypes leren gebruiken. H. Oefeningen 1) 2) Oefening 1 Schrijf een nieuw programma. Pas de grootte en de kleuren van het formulier aan. Plaats er drie drukknoppen op, met de opschriften: Klik hier! Hier afblijven! Sluiten. Als u op de eerste knop klikt, moet er en popup-scherm verschijnen met de tekst Goed zo!, een Uitroepteken en een OK-knop. Als u op de tweede knop drukt moet er een popup verschijnen met de tekst: Dat is niet toegelaten! en een rode cirkel met een wit kruis, en de knoppen Nogmaals en Annuleren. Als u op de derde knop klikt moet het programma afsluiten. Visual Basic door ir. C.Daniels 14
15 Visual Basic door ir. C.Daniels 15
16 II. Lab 2 - Voorwaardelijke programma-uitvoering A. If then else instructie Soms is het nodig dat u in een programma een beslissing neemt. Als een bepaalde voorwaarde waar is, doet u iets, is die voorwaarde niet waar, moet u wat anders doen. In basic ziet dit er als volgt uit: If voorwaarde then Doe iets als de voorwaarde waar is Else Doe iets anders als ze niet waar is End If Voorwaarde: dit moet een test zijn, die als uitkomst waar of niet waar is, bv. - intantwoord > 100 : test of intantwoord groter is dan intantwoord <= 7 : test of intantwoord kleiner of gelijk is aan 7 - IntAntwoord =55 : test of intantwoord gelijk is aan 55 U kunt die instructies in elkaar nesten zoals dat heet. Stel dat we willen testen of een getal in de variabele intgetal groter is, gelijk is aan of kleiner is dan 100, dan zou dat als volgt kunnen: If intgetal > 100 then Druk af dat het groter is dan 100 Else If intgetal = 100 then Druk af dat het getal gelijk is aan 100 Else Druk af dat het getal kleiner is dan 100 End If End If Merk op dat er voor elke If ook een End if staat! Er zijn ook andere mogelijkheden die exact hetzelfde doen, bv. If intgetal = 100 then Druk af dat het getal gelijk is aan 100 Else If intgetal < 100 then Druk af dat het getal kleiner is dan 100 Else Druk af dat het getal groter is dan 100 End If End If Visual Basic door ir. C.Daniels 16
17 Het Else-statement moogt u weglaten, als u het niet nodig heeft. Veronderstel dat u een waarschuwing wilt geven als een getal groter is dan 10000, en niets zeggen als het kleiner is, dan kan dit als volgt: If (intgetal > 10000) then geef waarschuwing dat het getal te groot is End If Laten we dit even gebruiken in een eenvoudig programma. We zullen hierin een tekstveld gebruiken. Hierin kan de gebruiker zelf tekst of getallen typen, die we in het programma kunnen gebruiken. We zullen ons programma laten testen of een getal groter, kleiner of gelijk is aan 100. Maak een nieuw project aan, zoals in de eerste oefening. Plaats hierin een label met de tekst Geef een getal in:, een tekstveld, en twee knoppen, een om te de waarde van het getal te testen, en één om het programma af te sluiten. Pas de eigenschappen van de verschillende objecten als volgt aan: Formulier: - Caption: Test 100 Label: Knop1: Knop2: Tekstveld: - Caption: Geef een getal in: - Name: cmdtesten - Caption: Testen - Default: true. Hierdoor wordt deze knop automatisch geselecteerd als u het programma start. - Name: cmdsluiten - Caption:Sluiten Name: txtgetal Alignment: Right Justify (rechts oplijnen voor een getal) Text: 0 In het venster Form Layout zorgen we ervoor dat het programma ongeveer in het midden van het scherm opstart. Visual Basic door ir. C.Daniels 17
18 Een en ander moet er nu ongeveer als volgt uitzien: De layout van het programma is klaar. Nu moet nog de nodige programmatuur worden bijgevoegd, zodat ons programma gaat functioneren zoals we willen! Dubbelklik op de knop cmdsluiten, en voeg de code toe om het programma te laten afsluiten. Zie het voorgaande voorbeeld. Dubbelklik op de knop testen. Hier hoort het stukje programma bij, om het ingegeven getal te testen. We gebruiken hier de If-instructie: Rem test de waarde van het getal! Private Sub cmdtest_click() Dim i As Integer ' hulpvariabele voor MsgBox Dim intgetal As Integer 'de waarde in het tekstveld intgetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld If intgetal > 100 Then i = MsgBox("Het getal is groter dan 100", vbinformation,"test") Else If intgetal = 100 Then i = MsgBox("Het getal is gelijk aan 100", vbinformation,"test") Else i = MsgBox("Het getal is kleiner dan 100", vbinformation,"test") End If End If Als u de lijnen ivm de MsgBox intypt zult u zien dat de editor aanwijzingen geeft over hetgeen u moet ingeven. Bij het getal kunt u ook kiezen uit standaardwaarden zoals hier vbinformation, dit is een andere aanduiding voor de waarde 32. Maar deze is duidelijker, u weet onmiddellijk dat er een I van information wordt getoond. We kunnen het programma van commentaar voorzien: - Ofwel gebruik u een volledige regel als commentaarlijn. Plaats vooraan de instructie Rem van het engels:remark (opmerking) - Ofwel achteraan een programmaregel door een aanhalingsteken te plaatsen. Visual Basic door ir. C.Daniels 18
19 Tip: Merk ook op dat we de lijnen mooi laten inspringen (tab-toets!), dit verhoogt in aanzienlijke mate de leesbaarheid van het programma! Als we het allemaal achter elkaar zouden typen, werkt het programma even goed, maar als u moet uitzoeken hoe het in elkaar zit. En dit is maar een eenvoudig programma onderstaande layout van de programma is dus beslist af te raden! Private Sub cmdtest_click() Dim i As Integer Dim intgetal As Integer intgetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld If intgetal > 100 Then i = MsgBox("Het getal is groter dan 100", vbinformation,"test") Else If intgetal = 100 Then i = MsgBox("Het getal is gelijk aan 100", vbinformation,"test") Else i = MsgBox("Het getal is kleiner dan 100", vbinformation,"test") End If End If Tip: Voeg ook veel commentaar bij in uw programma! Beter wat teveel uitleg, als te weinig! Als u dit programma binnen een jaar moet gaan wijzigen, zult u blij zijn met de uitleg! Of misschien moet u zelfs het programma van een andere programmeur aanpassen, en als die vergat er wat uitleg bij te schrijven kunt u aardig wat tijd verliezen om uit te zoeken, wat hij nu juist bedoelde Stel dat deze programmeur dan nog variabelen gebruikte zoals a,b,c,ak, zl,. Dan wordt het een nachtmerrie Als het programma klaar is ziet het eruit zoals hiernaast. Sla het project op als Oef2_1.vbp en het formulier als Form2_1.frm. Test eens uit wat de reactie is van het programma als u 100,5 intypt? Kunt u dat verklaren? Of als u een tekst intypt.? Visual Basic door ir. C.Daniels 19
20 Oefening: Programmeer nu zelf eens de volgende oefening. U moet twee gehele getallen kunnen ingeven Getal1 en Getal2. Als u op de knop Testen klikt, moet het programma vertellen in een popup welk van de twee het grootste is, of dat ze gelijk zijn. Sla het op als Oef2_2.vbp en FormOef2_2.frm. Als het programma werkt zou het er zo ongeveer moeten uitzien: A. Een eenvoudig spelletje: Raadspelletje 3) De opdracht We laten de computer een willekeurig getal genereren tussen 0 en 100. Wij moeten raden. De computer zegt alleen of het te hoog of te laag was. Het spelletje start als volgt op: (de namen van de objecten zijn aangegeven) lblhoofding cmdraden txtgetal cmdsluiten Visual Basic door ir. C.Daniels 20
21 Als u een foutieve ingave geeft krijgt u een foutmelding Anders geeft het programma een suggestie om hoger of lager te raden. Als u het gevonden heeft wordt u gefeliciteerd! 4) Een random getal genereren Als we ons spelletje spannend willen houden moeten de computer telkens een ander getal uitzoeken om te raden. We zullen dit getal in ons programma in een variabel zetten met naam intteradengetal. Voeg daarvoor de volgende code in vlak onder Option Explicit: Option Explicit Dim IntTeRadenGetal as Integer Hoe maken we nu een willekeurig getal tussen 1 en 100? VB kent de functie rnd. Deze functie genereert een willekeurig getal tussen 0 en 0, Test dit even uit! Maak het Immediate window zichtbaar als dat er niet is door in het menu op View->Immediate window te klikken. Visual Basic door ir. C.Daniels 21
22 In het Immediate window typt u enkele malen?rnd [enter-toets] Het vraagteken is een verkorte vorm in basic voor de instructie print. U zal zien dat u telkens een ander getal krijgt tussen 0 en 0,999. Hoe maken we daaruit een geheel getal tussen 1 en 100? Dit doen we als volgt: Rnd = een getal tussen 0 en 0, *Rnd =een getal tussen 1 en 99,999 Fix(100*Rnd) =neemt alleen het gedeelte voor de komma, is dus van 0 tot 99 Fix(100*Rnd)+1 =een geheel getal van 1 tot 100 Deze uitdrukking Fix(100*Rnd)+1 kunnen we dus gebruiken om een geheel getal tussen 1 en 100 te maken. Ontwerp zelf eens een formule om een willekeurig getal tussen 100 en 999 te genereren! Test dit uit in het Immediate Window! 5) Randomize Er is nog een probleempje. Als we Rnd gebruiken, wordt telkens hetzelfde getal gegenereert als we het programma opstarten. Om dit te verhinderen moeten we zorgen dat de random-getallen volledig willekeurig worden. Dit kan door de klok van de pc te gebruiken als startwaarde voor de willekeurige getallen. De instructie randomize doet dit. Deze moeten we slechts éénmaal toepassen bij de start van het programma. Hoe kunnen we dit laten uitvoeren bij het openen van het venster? 6) Het event Load van een formulier Bij de start van het programma wordt het event Load van het formulier uitgevoerd. Hierin kunnen we dingen programmeren die we bij de openen van het formulier (venster) willen uitvoeren. Zorg dat de programmacode zichtbaar is. Als dit niet zo is, klikt u in het venster Project Explorer op de knop View code. View code View object Klik het gewenste formulier aan Visual Basic door ir. C.Daniels 22
23 Het programmagedeelte dat hoort bij het event Load vindt u als volgt. Klik in het venster met de programma code bovenaan op Form in de linkerdialoog, en op Load in de rechterdialoog Voeg de volgende toe aan het subprogramma Randomize intteradengetal = Fix(Rnd * 100) + 1 Debug.Print intteradengetal De eerste twee lijnen kennen we al. De derde lijn toont het willekeurig getal in het Immediate venster. Dit kan u helpen uw programma te debuggen. Als u deze optie niet meer nodig hebt, veegt u deze lijn weg of u zet er een Rem voor: Rem Debug.Print intteradengetal We moeten natuurlijk ook nog de code invullen om het geraden getal te testen. Deze code zit in het event Click van de knop cmdraden. Het vetgedrukte gedeelte moet u zelf intypen. Daar zitten geen nieuwe dingen in behalve de Or-operator. Private Sub cmdraden_click() Dim i As Integer ' voor MsgBox Dim intgetal het ingegeven getal om te raden intgetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld ' Test of het getal tussen 1 en 100 ligt If (intgetal < 1) Or (intgetal > 100) Then i = MsgBox("Het getal moet tussen 1 en 100 liggen!", vbinformation + vbokonly, "Foutieve ingave") ' Anders testen we of het goed is, te hoog of te laag ' en we geven een reactie in het bovenste label Else If intgetal = intteradengetal Then lblhoofding.caption = "Gefeliciteerd! Gevonden!!!" Else If intgetal < intteradengetal Then lblhoofding.caption = "Raad hoger!" Else lblhoofding.caption = "Raad lager!" End If End If End If Wel alles op één regel zetten! Visual Basic door ir. C.Daniels 23
24 7) De Or-operator Vergelijk dit met de Or-poort uit de digitale techniek! Slechts één van beide voorwaarden (intgetal < 1) (intgetal > 100) moet waar zijn opdat de volledige instructie waar zou zijn. Sla het project en het formulier op met een betekenisvolle naam, zoals Raadspel.vbp voor het project en Raadspel.frm voor het formulier. Controleer nu of het programma werkt naar behoren. Zorg in het begin dat u het Immediate venster ziet, zodat u kan controleren welk getal de computer gegenereerd heeft! Tip: Vóór u een programma uittest kunt u het beter opslaan op schijf. De uitvoering kan mislopen, het programma kan hangen, en dan is al uw werk voor niets geweest B. Het programma Raadspelletje afwerken Zoals het nu is kunnen we maar één spelletje spelen. Als het getal geraden is zouden we de computer moeten laten vragen of u nog een spelletje wilt spelen. Indien ja, genereert hij weer een ander willekeurig getal, indien neen, stopt het programma. Probeer zelf eens of u weet waar u de code moet veranderen! Indien u nog niet bedreven genoeg bent staat hieronder de volledige code van het aangepaste subprogramma. Alleen de vetgedrukte delen zijn bijgevoegd. Probeer vooral het programma te begrijpen, en niet gewoon over te typen! Visual Basic door ir. C.Daniels 24
25 Private Sub cmdraden_click() Dim i As Integer ' voor MsgBox Dim intgetal intgetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld ' Test of het getal tussen 1 en 100 ligt If (intgetal < 1) Or (intgetal > 100) Then i = MsgBox("Het getal moet tussen 1 en 100 liggen!", vbinformation + vbokonly, "Foutieve ingave") ' Anders testen we of het goed is, te hoog of te laag ' en we geven een reactie in het bovenste label Else If intgetal = intteradengetal Then lblhoofding.caption = "Proficiat! Gevonden!!!" Alles op één lijn zetten Vraag of de speler nog een spelletje wil i = MsgBox("Nog een Spelletje?", vbquestion + vbyesno, "Einde spel") If i = vbyes Then nieuw getal genereren intteradengetal = Fix(Rnd * 100) + 1 Debug.Print intteradengetal lblhoofding.caption = "Geef een getal tussen 1 en 100" Else End nee, dus stoppen End If Else If intgetal < intteradengetal Then lblhoofding.caption = "Raad hoger!" Else lblhoofding.caption = "Raad lager!" End If End If End If Sla het programma op, en test het uit! Uitleg bij If i = vbyes Then Als u antwoordt met ja, of nee, wordt er een bepaalde waarde gestopt in de variabele i. Als u de waarde kent, kunt u daarop testen. Maar u kunt ook vaste uitdrukkingen zoals vbyes, gebruiken. Zoek in de help eens naar andere mogelijkheden voor het antwoord als u op OK klikt, of Cancel, Ja, Nee. Of probeer het uit denk aan de mogelijkheid van debug.print in het Immediate venster. Visual Basic door ir. C.Daniels 25
26 8) Elseif Er bestaat ook nog een andere vorm van de If-instructie: If (voorwaarde 1) then Programmacode 1 Elseif (voorwaarde 2) then Programmacode 2 Elseif (voorwaarde 3) then Elseif Endif Programmacode 3 Opgave: Herwerk het voorgaande spelletje en maak gebruik van deze alternatieve vorm van de If-instructie. Sla het desnoods op onder een andere naam, als u het voorgaande niet wil veranderen. Opgave: Voeg een teller toe aan het voorgaande programma, zodat u kunt aangeven in hoeveel maal u het getal geraden hebt. U kunt eventueel uw felicitatie laten afhangen van de snelheid waarmee men het getal vindt. Als men het extra snel vindt, zou u kunnen aangeven Fantastisch! In slechts.. keer gevonden!, of als het extra lang duurde: Proficiat! Maar kon toch wat sneller? of zo. Noem die teller bv. intaantalkeer en declareer deze in het declaratie-gedeelte onder Option Explicit. Kies (general) (Declaration) in het programmavenster. Tip: U kunt ervoor kiezen slechts één subprogramma te bekijken ofwel de gehele programmacode. De eerste optie is vooral interessant als uw programma wat langer wordt. Eén subprogramma De hele programmacode Visual Basic door ir. C.Daniels 26
27 III. Lab 3 containers select - menu A. Containers Containers zijn objecten die andere objecten kunnen bevatten. Een windows-venster is natuurlijk zo een een container. We zullen in het volgende voorbeeld een andere container leren kennen: een frame. 9) Frame en Option Button Maak een nieuw project aan met de naam BtwProg. De bedoeling is om de BTW te berekenen op een bepaald geldbedrag. Geef de form de naam:btwform, en als caption: BTW berekenen. Sleep op dit formulier de volgende objecten Object Frame Option Button Option Button Option Button Label Label Label Text Text Text Button Button Eigenschappen Name: frabtw Caption: BTW% Name: optknop1 Caption: 6 % Value: false Name: optknop2 Caption: 12 % Value: false Name: optknop3 Caption: 21 % Value: true Name:lblBedrag Caption: Bedrag : Name:lblBTW Caption: BTW : Name:lblTotaal Caption: Totaal : Name: txtbedrag Alignment:right jusitify Text: (niets) Name: txtbtw Alignment:right jusitify Text: (niets) Name: txttotaal Alignment:right jusitify Text: (niets) Name: cmdberekenen Caption: &Berekenen Default: true Name: cmdsluiten Caption: &Sluiten Default: false Visual Basic door ir. C.Daniels 27
28 De eigenschap value van een selectieknop (Option Button) geeft aan of de knop aangeklikt is (true) of niet (false). De optie default van een knop geeft aan of de knop geselecteerd is, hij heeft dan een dikkere rand, en wordt ingedrukt als je op de Enter-toets duwt. Waarom worden de selectieknoppen gegroepeerd in een frame? Van elk van deze knoppen mag er slechts één enkele aangeklikt worden. Vandaar dat we ze groeperen in een frame, zodat het programma weet welke selectieknoppen één geheel vormen. Waarvoor dient het teken & bij de caption van de knoppen Berekenen en Sluiten? Tip: Als je de selectieknoppen mooi wil oplijnen, ga je als volgt te werk: - Klik de selectieknoppen alle drie samen aan. Om dat te bereiken moet je de shift-toets ingedrukt houden bij het aanklikken van de tweede en de derde knop. - Kies in het menu Format -> Align en/of Format -> Make same size. Als het formulier klaar is ziet het er als volgt uit: Kies het gedeelte (general) (Declarations) om je variabelen te declareren Dim intbtwperc As Integer Dim intbedrag As Integer Dim intbtwbedrag As Integer Dim inttotaal As Integer Visual Basic door ir. C.Daniels 28
29 De programmacode om de BTW te berekenen hoort natuurlijk bij het event Clck van de knop Berekenen. Kies in het programmavenster bovenaan cmdberekenen en Click, of dubbelklik op de knop cmdberekenen. De programmacode voor dit event ziet er als volgt uit: Private Sub cmdberekenen_click() intbedrag = Val(txtBedrag.Text) ' bedrag ophalen ' Kijk welk BTW-percentage van toepassing is If OptKnop1.Value Then intbtwperc = 6 ElseIf OptKnop2.Value Then intbtwperc = 12 ElseIf optknop3.value Then intbtwperc = 21 End If ' Nu kunnen we berekenen: intbtwbedrag = intbedrag * intbtwperc / 100 inttotaal = intbedrag + intbtwbedrag 'toon deze bedragen in het juiste tekstvenster txtbtw = Str(intBTWbedrag) txttotaal = Str(intTotaal) 10) Str-functie De Str-functie is de omgekeerde functie van Val. Ze zet een getal om in een tekst. In een tekstvenster kan in principe alleen tekst getoond worden( 1 ). De code voor de knop Sluiten is bekend. Sla het programma op, en test het uit. Het programma werkt als je alles goed hebt gedaan. Maar er is nog een schoonheidsfoutje. Als je iets berekend hebt, en je verandert daarna van BTW-percentage, worden het BTWbedrag en het totaal niet opnieuw berekend. En dus zien we een foutief resultaat. Om dit te verhelpen moeten we reageren op het event Click van de drie knoppen. Selecteer dit event voor elke selectieknop en vul de code als volgt aan Private Sub OptKnop1_Click() intbtwperc = 6 ' Nu kunnen we berekenen: intbtwbedrag = intbedrag * intbtwperc / (VB zorgt toch dat één en ander goed verloopt, ook als je Str weglaat. Maar dit is een slechte gewoonte. Andere talen staan dit niet toe, of geven foutieve resultaten. Visual Basic door ir. C.Daniels 29
30 inttotaal = intbedrag + intbtwbedrag 'toon het in het juiste tekstvenster txtbtw = Str(intBTWbedrag) txttotaal = Str(intTotaal) Private Sub OptKnop2_Click() intbtwperc = 12 ' Nu kunnen we berekenen: intbtwbedrag = intbedrag * intbtwperc / 100 inttotaal = intbedrag + intbtwbedrag 'toon het in het juiste tekstvenster txtbtw = Str(intBTWbedrag) txttotaal = Str(intTotaal) Private Sub optknop3_click() intbtwperc = 21 ' Nu kunnen we berekenen: intbtwbedrag = intbedrag * intbtwperc / 100 inttotaal = intbedrag + intbtwbedrag 'toon het in het juiste tekstvenster txtbtw = Str(intBTWbedrag) txttotaal = Str(intTotaal) Tip: Moet je niet allemaal typen, met knippen en plakken kun je veel bereiken! Het programma reageert nu zoals we graag willen. Test uit!! Wat doet het programma als je als bedrag ingeeft? Om dit probleem op te lossen moet je variabeltype veranderen van Integer naar Long. Dit type kan veel grotere gehele getallen aan. Pas het programma aan en zoek eens uit hoe groot het bedrag nu mag zijn voor het programma crasht Visual Basic door ir. C.Daniels 30
31 B. De Select Case intructie Als je verschillende keuzes moet maken, naargelang de waarde kun je best met de Select Case instructie. Select Case testwaarde Case waarde Programmacode als testwaardegelijk is aan waarde Case waarde1 to waarde2 Programmacode als testwaarde ligt tussen waarde1 en waarde2 Case waarde3,waarde4, Programmacode als testwaarde gelijk is aan waarde3 of waarde 4 Case Else Programmacode als geen van voorgaande waar is End Case Een voorbeeldje maakt dit wat duidelijker: Dim Nummer Nummer = 8 ' Initialiseer de variabele Nummer. Select Case Nummer 'Evalueren Case 1 To 5 ' Ligt het nummer tussen 1 en 5? Debug.Print "Tussen 1 en 5" ' De volgende lijn is de enige die waar is Case 6, 7, 8 ' Ligt tussen 6 en 8 Debug.Print "Tussen 6 en 8" Case 9 To 10 ' Nummer is 9 of 10. Debug.Print "Groter dan 8" Case Else ' Ander waarden Debug.Print "Niet tussen 1 en 10" End Select Dit programmastukje zal dus de tekst Tussen 6 en 8 afdrukken in het Immediate venster. Maak een nieuw project aan met de naam Dobbelspel. U krijgt 100F om in te zetten bij een dobbelspel. We gaan een teerling gooien, en naargelang de waarde van de worp wordt onze score verhoogd en verlaagd als volgt: - Bij een 1 wint u 20F - Gooit u een 6 wint u 15F - Bij al de rest verliest u 10F. Als uw geld op is is het spelletje gedaan. De layout van ons spelletje bij het opstarten is als volgt : Visual Basic door ir. C.Daniels 31
32 Label lblgegooid Knop cmdgooien Label lblscore Tekst txtscore Object Form Label Knop Label Tekst Eigenschappen Name: Form1 Borderstyle: Fixed Single Caption: Dobbelspel BackColor: (naar keuze) Name: lblgegooid Caption: Klik op Gooien BackColor: (naar keuze) Font: Ms Sans Serif 14p Name : cmdgooien Caption : Gooien Name: lblscore Font:Ms Sans Serif 14p BackColor : (naar keuze) Name :txtscore Font :Ms Sans Serif 14p BackColor : (naar keuze) In het gedeelte (General) (Declarations) plaatsen we de nodige variabelen: Option Explicit Dim intgegooid As Integer ' getal gegooid door de dobbelsteen Dim intscore As Integer ' geldbedrag in kassa We initialiseren het beginbedrag in het vent Load van het formulier: Private Sub Form_Load() Randomize ' initialiseer de random generator intscore = 50' Beginbedrag op 100 F zetten Visual Basic door ir. C.Daniels 32
33 txtscore.text = Str(intScore) In de code achter het event Click van de knop cmdgooien, gebruiken we de Select Case instructie: Private Sub cmdgooien_click() ' gooien: een random getal van 1 tot 6 intgegooid = Fix(6 * Rnd) + 1 lblgegooid.caption = "Je hebt een " + Str(intGegooid) + " gegooid!" 'Pas de score aan Select Case intgegooid Case 1 intscore = intscore + 20 'Je wint 20 F lblgegooid.backcolor = &HFF00& 'Pas achtergrondkleur aan Case 2 To 5 intscore = intscore 10 'Je verliest hier 10 F lblgegooid.backcolor = &HFF& Case 6 intscore = intscore + 15 'Je wint 15 F lblgegooid.backcolor = &HFF00& End Select 'Pas het tekstveld score aan txtscore.text = Str(intScore) Oefening: Zorg ervoor dat het programma eindigt als u geen geld meer heeft. Toon nog een popup met de mededeling dat uw geld op is, en laat het programma eindigen! Visual Basic door ir. C.Daniels 33
34 C. Een menu Stel dat we een menu willen maken in ons dobbelspelprogramma als volgt: In het eerste menu-item kunnen we kiezen uit verschillende beginbedragen: 50F, 100F, en 250F. De gemaakte keuze is gemerkt met een vinkje. Het programma moet opstarten met de keuze 50F aangekruist. Met de menukeuze Optie kunt u gegevens opvragen over de auteur. Merk de onderlijnde letters op. Daardoor kunt u de bijvoorbeeld de optie Beginbedrag oproepen met de muis, maar ook met de toetsencombinatie Alt-B. Om het menu aan te maken gaat u als volgt te werk: Selecteer het formulier waarin u een menu wilt maken Klik in het menu op Tools Menu Editor Vul de gegevens voor Caption, Name als volgt in: Caption Name Inspringen &BeginBedrag mnubeginbedrag 0 & 50 mnu50 1 &100 mnu100 1 &250 mnu mnulijn 1 &Sluiten mnusluiten 1 &Info mnuinfo 0 &Auteur mnuauteur 1 Het inspringen doet u met de pijltjes naar links en rechts. Het inspringen bepaalt de structuur van het menu. Door nog verder in te springen kunt u submenu s van dit menu aanmaken. Met Next springt u naar het volgende menu-item. Met Insert en Delete kunt u een menu-item tussenvoegen of verwijderen Visual Basic door ir. C.Daniels 34
35 Als alles goed is ziet u menu-editor eruit zoals hieronder: Klik op OK Tip: Zorg dat u onderaan geen lege lijn heeft, anders wordt het menu niet aanvaard! Verwijder ze eventueel met Delete. Bij het opstarten zorgen we ervoor dat het beginbedrag op 50F wordt gezet, en dat ook alleen de optie 50F in het menu is aangekruist. Het aankruisen van een menu-item gebeurt door de eigenschap Checked op true of false te zetten Plaats de volgende code bij in de events mnu50 Click, mnu100 Click en mnu250 Click: Private Sub mnu50_click() mnu50.checked = True mnu100.checked = False mnu250.checked = False intscore = 50 txtscore.text = Str(intScore) Private Sub mnu100_click() mnu50.checked = False mnu100.checked = True mnu250.checked = False intscore = 100 txtscore.text = Str(intScore) Visual Basic door ir. C.Daniels 35
36 Private Sub mnu250_click() mnu50.checked = False mnu100.checked = False mnu250.checked = True intscore = 250 txtscore.text = Str(intScore) Als we beginnen te spelen mogen we ons bedrag niet meer kunnen aanpassen! Daarom moeten we deze opties uitschakelen. Dit kan door de optie enabled van deze menuitems op false te plaatsen. Tevens laten we spelletje eindigen als ons geld op is, en vragen we of we nog een spelletje willen spelen. Doe dit als volgt door het event cmdgooien Click te wijzjgen als hieronder: Private Sub cmdgooien_click() Dim i As Integer ' voor msgbox mnu50.enabled = False mnu100.enabled = False mnu250.enabled = False ' gooien: een random getal van 1 tot 6 intgegooid = Fix(6 * Rnd) + 1 lblgegooid.caption = "Je hebt een " + Str(intGegooid) + " gegooid!" 'Pas de score aan Select Case intgegooid Case 1 intscore = intscore + 20 lblgegooid.backcolor = &HFF00& Case 2 To 5 intscore = intscore - 10 lblgegooid.backcolor = &HFF& Case 6 intscore = intscore + 15 lblgegooid.backcolor = &HFF00& End Select 'Pas het tekstveld score aan txtscore.text = Str(intScore) ' Stoppen als het geld op is If intscore <= 0 Then i = MsgBox("Je geld is op!" + strcrlf + "Einde spel!"+ _ strcrlf + "Nog een spelletje? ", vbyesno, "Sorry...") 'Nog een spelletje? If i = vbyes Then mnu50.enabled = True ' menu-items toegankelijk maken mnu100.enabled = True Visual Basic door ir. C.Daniels 36
37 mnu250.enabled = True intscore = 50 ' Kies 50F om te starten mnu50.checked = True mnu100.checked = False mnu250.checked = False txtscore.text = Strl(intScore) lblgegooid.caption = "Klik op gooien!" Else End End If End If Test het spelletje uit en zorg dat alles werkt naar behoren! Zorg dat de optie Sluiten uit het menu het programma stopt. (Plaats in het event mnusluiten Click de code End) Als we op Info Auteur klikken moet de naam van de maker in een apart venster verschijnen: D. Een nieuw formulier toevoegen Voor de optie Auteur uit ons menu voegen we een nieuw zelfontworpen formulier toe aan ons project: Kies in het menu Project Add Form. Uit de dialoog die dan verschijnt kiest u de optie Form. Deze nieuwe form krijgt ook automatisch een eigen module. Plaats er labels op met de nodige tekst en een knop met naam cmdok en Caption OK zoals hierboven getoond. Pas de eigenschappen van het formulier als volgt aan: Name Caption Appearance Moveable StartUpPosition formauteur Auteur 1-3D False 2 - CenterScreen Voeg in de module van Form1 de volgende code toe in het event mnuauteur Click : Visual Basic door ir. C.Daniels 37
38 Private Sub mnuauteur_click() Form2.Show vbmodal In de module van Form2 vult u het event cmdok Click als volgt aan: Daardoor sluit het venster Auteur als u op de knop Ok klikt De optie vbmodal betekent dat het een modaal venster betreft. Dit is een venster dat u eerst moet sluiten voor u verder kunt. Als u deze optie weglaat wordt het een modeless venster. De applicatie kan verder functioneren zonder dat dit venster moet gelsoten worden. Laat de optie vbmodal weg, en kijk wat het verschil is. Tip: Ons project heeft nu twee formulieren. Geef deze beide een andere meer zinvolle naam als form1 en form2. Anders worden deze ook opgeslagen als Fom1.frm en Form2.frm. Bij een volgend project worden weer formulieren Form1, Form2, aangemaakt. Als u deze zonder naamswijziging opslaat overschrijft u uw oude formulieren en bent u dus alles kwijt! Nog beter is het voor elk project een aparte map aan te maken! Maak een nieuw map Dobbelspel aan, en sla het project en de twee formulieren op in deze nieuwe map. Visual Basic door ir. C.Daniels 38
39 IV. Lab 4 lusintsructies foutafhandeling - combobox A. Lusinstructies Soms moet u een bepaalde handeling of berekening meerdere malen herhalen. Hiervoor heeft VB speciale lusinstructies (engels: loop). 11) For Next De for-next-instructie ziet er als volgt uit: For teller = beginwaarde to eindwaarde step interval Doe wat Next De teller is een numerieke variabele. Deze wordt initieel gelijk gezet aan de beginwaarde en in stapjes verhoogd tot hij groter is dan de eindwaarde. Dan stopt de lus. Het gedeelte step moogt u eventueel weglaten. Dan wordt de stap automatisch gelijk aan 1 gezet. Voorbeeld 1: De volgende code: For i = 1 to 5 Print i; Next i Geeft de volgende output: (de ; zorgt ervoor dat alles op één enkele lijn wordt afgedrukt) Voorbeeld 2: De volgende code: For i = 2 to 4 step 0.5 Print i; Next i Geeft de volgende output: Voorbeeld 3: de stap mag ook negatief zijn De volgende code: For i = 3 to 2 step Print i; Next i Visual Basic door ir. C.Daniels 39
40 Geeft de volgende output: Voorbeeld 3: u mag ook variabelen gebruiken voor de beginwaarde, eindwaarde en de stap: De volgende code: intbegin = 2 inteinde = 7 intstap = 0.7 For i = intbegin to inteinde step intstap Print i; Next i Geeft de volgende output: Oefening: we gaan dit uittesten. Hiervoor zorg u dat het Immediate venster open is. Indien dit niet zo is kan dat door in het menu te klikken op View Immediate Window. De for-next-instructie bestaat uit verschillende lijnen. In het Immediate venster kunt u slechts één enkele lijn typen. Maar dit kan door tussen de verschillende instructie een dubbelpunt te plaatsen. Duw op Enter om de instructie uit te voeren. Probeer de voorgaande voorbeelden uit in het Immediate venster Maak een lus die de getallen 5 tot 10 genereert in stapjes van 0.5 Maak een lus die de getallen 20 tot -10 genereert in stapjes van -5 Maak een lus die de getallen 1 tot 11 genereert in stapjes van 4 Project Faculteit Maak een nieuw project aan met de naam Faculteit zoals hieronder getoond in de ontwerpfase: txtgetal cmdberekenen Visual Basic door ir. C.Daniels 40
41 Geef de objecten de volgende eigenschappen: Formulier Text Button Name: Form1 Appearance: 0 - Flat AutoRedraw: true Font: Arial, vet, 12p Name : txtgetal Text: (leeg) Allignment: 1 Right justify Name: cmdberekenen Caption: Berekenen Declareer de volgende variabelen in het gedeelte (General) (Declarations) Option Explicit Dim i, intgetal As Integer Dim Fac As Currency Plaats de volgende code in het event cmdberekenen Click Private Sub cmdberekenen_click() Dim s As String 'definieer een variabele om tekst te bevatten intgetal = Val(txtGetal.Text) ' haal de waarde uit het tekstvak ' start de berekening Fac = 1 For i = 2 To intgetal Fac = Fac * i Next ' ok, nu resultaat op het scherm afdrukken ' plaats eerst spaties tussen elke drie cijfers voor de duidelijkheid s = Format(Fac, "### ### ### ### ###") Cls ' Maak het formulier schoon Print Str(intGetal) + "! = " + s 'druk de tekst af in het formulier Uitleg: - Het resultaat plaatsen we in een variabele van het type Currency. Dit kan zeer grote gehele getallen bevatten. Zoek op in het Addendum. - We gebruiken een nieuw type variabele: String. Dit is een geheugenplaats waarin u tekst kunt plaatsen. Elke letter neemt één byte in beslag in het geheugen. - De functie Format gebruiken we om het getal af te drukken met spaties tussen elke groep van drie cijfers. Als we dat niet doen, worden alle cijfers tegen elkaar gedrukt, wat het geheel erg onleesbaar maakt. - De functie Cls maakt het formulier schoon (afkorting van Clear Screen) Visual Basic door ir. C.Daniels 41
42 - Met Print wordt de tekst op het formulier afgedrukt. Hieronder ziet u het programma in werking. Vul een getal in in de tekstbox, en klik op berekenen. Het resultaat verschijnt bovenin het formulier. Als we een nieuwe berekening willen maken, klikken we in het tekstvak. Het is best dat dan het formulier terug wordt gewist. Plaats daarom de volgende code in het event txtgetal Click Private Sub txtgetal_click() Cls Probeer eens of u 25! Kunt berekenen. Wat stelt u vast? 12) While Wend Deze lusinstructie ziet er als volgt uit While voorwaarde Wend Doe iets Een voorbeeldje kan dit duidelijker maken: Dim Counter Counter = 0 Initialiseer de variabele. While Counter < 20 Test de waarde van de teller. Counter = Counter + 1 Verhoog de teller. Wend Stop de While lus als de teller > 19. Debug.Print Counter drukt de waarde van de variabele Counter af in het Immediate window na het uitvoeren van de lus, hier dus 20. Tip: Visual Basic door ir. C.Daniels 42
43 in de For-lus hoeft u zich niets aan te trekken van de teller. Die wordt automatisch verhoogd. Bij de While-lus moet u daar zelf voor zorgen! Anders stopt uw lus niet, en uw programma hangt! Probeer dit eens uit in het Immediate venster, bv. als volgt: c=1: while c<20:print c;:c=c+1:wend 13) Do Loop Deze lusinstructie heeft de volgende vorm Do While Until voorwaarde Doe iets Loop Of: Do Doe iets Loop While Until voorwaarde U kunt zowel While als Until gebruiken, maar niet beiden gelijk. While: de voorwaarde waaronder de lus blijft werken Until: de voorwaarde waarbij de lus stopt Enkele voorbeelden maken dit duidelijker. Voorbeeld 1: drukt de getallen van 1 tot 9 af i=1 Do While i<10 Print i; i = i + 1 Loop Visual Basic door ir. C.Daniels 43
44 Voorbeeld 2: drukt de getallen van 10 tot 14 af i=10 Do Until i>=15 Print i; i = i + 1 Loop Voorbeeld 3: drukt de getallen van 5 tot 9 af i=5 Do Print i; i = i + 1 Loop While i<10 Voorbeeld 4: drukt de getallen van 1 tot 15 af i=1 Do Print i; i = i + 1 Loop Until i>15 Opgave: Probeer deze voorbeeldjes uit in het Immediate window! Opgave: Gebruik For Next, While Wend, Do..Loop om de getallen 11 tot 20 op het scherm te brengen. Bedenk alle mogelijkheden en dat zijn er vele Tip: Welke lusinstructie gebruiken? Er zijn vele mogelijkheden om hetzelfde resultaat te bereiken: - Als u weet (of kunt berekenen) bij welke waarden uw lus begint en stopt, gebruikt u liefst een For Next. Maar een While Wend of Do Loop gaat ook, maar is dan omslachtiger. - Als u code in de lus altijd minstens éénmaal wordt uitgevoerd gebruikt u best een Do Loop Wile Until. Vermits de voorwaarde pas na het uitvoeren van de code wordt getest, wordt deze code minstens éénmaal uitgevoerd Visual Basic door ir. C.Daniels 44
45 - Als de code soms niet mag worden uitgevoerd, kiest u voor de Do While Until Loop. Als de voorwaarde niet waar is, wordt er geen code uitgevoerd. We zullen deze lusinstructies nog veel nodig hebben in de volgende oefeningen. B. Foutafhandeling: On Error Zoals u heeft vastgesteld, geeft het programma een foutmelding als het te berekenen getal te groot wordt. Het programma crasht, en stopt. Dit is niet wenselijk. Mogelijkheden om dit op te lossen zijn: - Belet de klant een te groot getal in te geven. (Vanaf welk getal crasht ons programma?) Of: - Vang de fout in het programma op Oefening: Pas het programma aan, zodat bij het ingeven van een te groot getal de gebruiker een foutmelding krijgt, en gevraagd wordt een nieuw getal in te geven. Gebruik een MsgBox. De fout opvangen kan ook. Er bestaat een speciale instructie On Error goto die dit realiseert: Verander de code van het event CmdBerekenen_Click als volgt: Private Sub cmdberekenen_click() Dim s As String 'definieer een variabele om tekst te bevatten intgetal = Val(txtGetal.Text) ' haal de waarde uit het tekstvak 'Vang eventuele fout op On Error GoTo Fout ' start de berekening Fac = 1 For i = 2 To intgetal Fac = Fac * i Next ' ok, nu resultaat op het scherm afdrukken ' plaats eerst spaties tussen elke drie cijfers voor de duidelijkheid s = Format(Fac, "### ### ### ### ###") Cls ' Maak het formulier schoon Print Str(intGetal) + "! = " + s 'druk de tekst af in het formulier Exit Sub ' in geval er een fout optreedt Fout: Print "Getal te groot!" Visual Basic door ir. C.Daniels 45
46 Uitleg: De instructie On error goto Fout zorgt ervoor dat het programma bij een fout verder gaat vanaf het label Fout:. We moeten ook de regel Exit Sub bijvoegen om te zorgen dat het programma daar stopt, als er geen fout optreedt. (Laat deze lijn eens weg, en kijk wat er gebeurt ) Probeer het programma nu uit, voor kleine en grotere getallen. Ons programma zal nu niet meer crashen. Als u een Do- lus voortijdig wil verlaten kunt u de code Exit Do in uw lus plaatsen. Oefening: Fonts - lettertypes Dit is wel een zeer eenvoudige toepassing van de For- Next-lus. Het toont de letterfonts (lettertypes) die op uw pc aanwezig zijn. Maak een nieuw project aan met de naam Fonts1. Voeg de volgende code toe aan het event Form_Load: Option Explicit Dim i As Integer Private Sub Form_Load() AutoRedraw = True ' activeer Autoredraw Print "Er zijn " + Str(Screen.FontCount) + " lettertypes aanwezig." For i = 0 To Screen.FontCount - 1 FontName = Screen.Fonts(i) ' verander van lettertype Print Screen.Fonts(i) Next Uitleg: Visual Basic door ir. C.Daniels 46
47 - De functie Autoredraw wordt geactiveerd, het formulier wordt dan automatisch opnieuw opgevuld met tekst en tekeningen als het geopend, verplaats of van grootte wordt veranderd. - FontName: een eigenschap van het formulier die de naam van het gebruikte lettertype weergeeft of verandert - FontCount: een eigenschap van het scherm-object (Screen) die het aantal fonts telt die voor het scherm beschikbaar zijn. De telling begint bij 0. Oefening: Fonts lettergrootte Deze oefening is vergelijkbaar met de vorige maar nu worden de grootte en stijl van het lettertype gewijzigd. Maak een nieuw project aan met de naam Fonts2. Voeg de volgende code toe aan het event Form_Load: Option Explicit Dim i As Integer Private Sub Form_Load() AutoRedraw = True ' activeer Autoredraw FontName = "Arial" FontSize = 8 For i = 1 To 6 FontBold = False FontItalic = False Print "Dit is " + FontName + Str(FontSize) + " Normaal" FontBold = True FontItalic = False Print "Dit is " + FontName + Str(FontSize) + " Vetjes" FontBold = False FontItalic = True Print "Dit is " + FontName + Str(FontSize) + " Cursief" Visual Basic door ir. C.Daniels 47
48 FontBold = True FontItalic = True Print "Dit is " + FontName + _ Str(FontSize) + " Vetjes en cursief" Print ' lege lijn FontSize = FontSize + 2 Next Uitleg: - We gaan nu de eigenschappen FontBold en FontItalic wijzigen. Deze kunnen de waarden True (- 1) of False (0) hebben. We doen dit in een lus waarbij telkens de fontgrootte met 2 punten wordt verhoogd. Niet alle lettergroottes zijn beschikbaar. Windows neemt de grootte die het dichtst de gevraagde grootte benadert. - Probeer ook eens met een ander lettertype! C. De ComboBox Oefening: een ingewikkelder project ontwerpen. Laten we ons eens een ingewikkelder opgave stellen. De kunst om dit te ontwerpen is stapje voor stapje vooruitgaan. Tip: Probeer nooit alles ineens te programmeren, u loopt gegarandeerd de mist in! De opgave: We willen de waarde berekenen van e x met behulp van de reeksontwikkeling: e x = 1 + x 1 + x 2 2! We willen die waarde berekenen tot op een bepaalde nauwkeurigheid, tot op 1/1000, 1/ en 1/ De klant moet een van deze drie kiezen, voor hij begint. Tevens willen we tellen hoeveel termen we nodig hadden om deze nauwkeurigheid te berekenen. + Hoe te werk gaan? Er zijn vele wegen die naar Rome leiden, maar begin met één klein elementje! Ik heb gekozen om de gebruiker de nauwkeurigheid te laten kiezen. Dit is logisch want anders kunnen we niks berekenen we beginnen met het eerste stapje Stap 1: de ComboBox Om de gebruiker te laten kiezen uit enkele opties is een ComboBox het ideale object. x 3 3! + x 4 4! x n n! Visual Basic door ir. C.Daniels 48
49 Comboboxes kun je op drie manieren gebruiken. Men noemt deze eigenschap de style van de ComboBox. Wij gebruiken style = 2. Dit geeft de gebruiker enkele keuzemogelijkheden, door ons opgelegd. Zoek op in de help wat de kenmerken zijn van Style 0, 1 en 2. Een ComboBox ziet er zo uit (style =2): En als u op de pijl klikt (als het programma runt!) moet er dit komen: Maak een nieuw project aan, met de naam Serie. Plaats een combobox op het formulier en enkele labels, zodat het voorlopig ontwerp er als hiernaast uitziet: (Om alles beter te kunnen oplijnen heb ik het raster op 40 twips gezet in Tools Option General) Zet de eigenschappen van de ComboBox als volgt: Name: comnauwkeurigheid Style: 2- Dropdown List Nu moeten we de items aan de Combobox toevoegen.vermits we die onmiddellijk nodig hebben, zetten we deze code in het event Form_Load, dat bij de start van het programma wordt uitgevoerd. Hiervoor hebben we onderstaande eigenschappen van de ComboBox nodig: AddItem: Deze eigenschap laat toen een keuze in de ComboBox bij te voegen. Text: de tekst van het gekozen item. ListIndex: het volgnummer van het gekozen item. Het eerste item krijgt het nummer 0, het tweede 1, enz. Plaats de onderstaan de code in uw programma: Option Explicit Private Sub comnauwkeurigheid_click() ' voor testdoeleinden Visual Basic door ir. C.Daniels 49
50 Debug.Print comnauwkeurigheid.text, comnauwkeurigheid.listindex Private Sub Form_Load() ' voeg items toe aan de ComboBox comnauwkeurigheid.additem ("0.001") comnauwkeurigheid.additem (" ") comnauwkeurigheid.additem (" ") Laat het programma runnen. Als u selecties maakt moeten deze verschijnen in het Immediate window: Ok, dit gedeelte van het programma werkt al (hopelijk!). Indien het niet lukt, moet u de fout gaan opzoeken. Doe door tot het werkt! Vermits we met die nauwkeurigheid moeten gaan rekenen, declareren we een variabele van het type Double, die de numerieke waarde zal bevatten. Pas de programmacode als volgt aan: Option Explicit Private dblnauwkeurigheid As Double Private Sub comnauwkeurigheid_click() ' voor testdoeleinden 'Debug.Print comnauwkeurigheid.text, comnauwkeurigheid.listindex 'zet de waarde in de variabele dblnauwkeurigheid = Val(comNauwkeurigheid.Text) Debug.Print dblnauwkeurigheid 'test uit of het goed is!! Private Sub Form_Load() comnauwkeurigheid.additem ("0.001") comnauwkeurigheid.additem (" ") comnauwkeurigheid.additem (" ") Visual Basic door ir. C.Daniels 50
51 Nu moet u de waarden van dblnauwkeurigheid in het Immediate window zien verschijnen als u het programma runt. We zijn nu klaar voor de volgende stap. Stap 2: de x-waarde ingeven We hebben een veldje nodig om de x-waarde in te tikken, een knop om de berekening te starten, en een label om het resultaat te tonen. Vul daarom het project aan met de volgende objecten, zoals hieronder te zien in de ontwerpfase: label txtxwaarde cmdberekenen lblresultaat Vul de code aan als volgt: Option Explicit Private dblnauwkeurigheid As Double Private dblxwaarde,dblresultaat As Double Private Sub cmdberekenen_click() ' Geef een waarschuwing als de nauwkeurigheid niet ingesteld is If (dblnauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If ' Wel goed, dus gaan we verder lblresultaat.visible = True 'Maak dit terug zichtbaar dblxwaarde = Val(txtXwaarde.Text) ' Hier moeten we later de berekening maken ' zet voorlopig het resultaat = x-waarde dblresultaat = dblxwaarde Visual Basic door ir. C.Daniels 51
52 ' En toon het in het label lblresultaat.caption = Str(dblResultaat) Private Sub comnauwkeurigheid_click() 'zet de waarde uit de ComboBox in de variabele dblnauwkeurigheid = Val(comNauwkeurigheid.Text) lblresultaat.visible = False Private Sub Form_Load() comnauwkeurigheid.additem ("0.001") comnauwkeurigheid.additem (" ") comnauwkeurigheid.additem (" ") lblresultaat.visible = False Private Sub txtxwaarde_change() lblresultaat.visible = False Uitleg: - Het resultaat maken we onzichtbaar tot we de berekening maken met de code: lblresultaat.visible = False - We geven een foutmeldng als we willen berekenen en nog geen nauwkeurigheid gekozen hebben. We gebruiken een vereenvoudigde methode van de MsgBox: If (dblnauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If Test het programma weer uit. Kijk of het resultaat onzichtbaar wordt als u iets verandert aan de nauwkeurigheid of de x-waarde. We zijn nu klaar voor de laatste stap: de eigenlijke berekening. Dit is de moeilijkste en de voornaamste. Stap 3: berekenen De meesten vinden dit het moeilijkste. Hoe weten we bijvoorbeeld of we de gewenste nauwkeurigheid bereikt hebben? Oefening doet hier wonderen! In het begin vraagt u uzelf af hoe u eraan moet beginnen. Maar na wat oefening leert u vele technieken, die u helpen tot een oplossing te komen. De som moeten we berekenen door een aantal termen samen te tellen. Deze termen worden steeds kleiner en daardoor benaderen we steeds beter de gewenste waarde. Hoeveel termen moeten we samentellen? Dit beslissen we als volgt: we houden steeds de voorgaande waarde bij, en vergelijken deze met de nieuwe waarde als we een volgende term erbij tellen. Is dit verschil kleiner dan de gevraagde nauwkeurigheid dan stoppen we. Visual Basic door ir. C.Daniels 52
53 Vermits we niet weten hoeveel termen we moeten berekenen (en dus hoeveel maal we de lus moeten doorlopen) gebruiken we een While-lus. De termen berekenen gaat gemakkelijk als volgt: de n-de term is gelijk aan de voorgaande term*x/n. Zo kunnen we dus steeds de volgende waarde berekenen zonder dat we faculteiten moeten uitrekenen! De code ziet er dan als volgt uit: Private Sub cmdberekenen_click() Dim dblterm, dblvorigresultaat, n As Double ' Geef een waarschuwing als de nauwkeurigheid niet ingesteld is If (dblnauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If ' Wel goed, dus gaan we verder lblresultaat.visible = True 'Maak dit terug zichtbaar dblxwaarde = Val(txtXwaarde.Text) dblterm = 1 ' de eerste term = 1 dblresultaat = 1 ' het resultaat voorlopig ook n = 1 Do ' hier begint de lus dblvorigresultaat = dblresultaat ' bewaar het vorige resultaat dblterm = dblterm * dblxwaarde / n ' bereken de volgende term dblresultaat = dblresultaat + dblterm 'tel op n = n + 1 ' verhoog n Debug.Print dblresultaat ' alles controleren!!! Loop While Abs(dblVorigResultaat - dblresultaat) > dblnauwkeurigheid ' En toon het in het label lblresultaat.caption = Str(dblResultaat) Debug.Print Exp(dblXwaarde) ' ter controle! Bestudeer de code goed tot u precies weet hoe ze werkt! Alleen zo leert u bruikbare programma s schrijven!!! Test het programma uit. Ter controle laten we ook de juiste waarde in het Immediate window afdrukken met Debug.Print Exp(dblXwaarde) ' ter controle! Dus hadden we die berekening niet nodig? Immers de functie Exp() berekent juist wat we zochten. Alles energie voor niets? NEE! We leren programmeren, niet rekenen. We hebben weer een beter inzicht gekregen in hoe u de dingen moet aanpakken om een ingewikkelder project te realiseren! Visual Basic door ir. C.Daniels 53
54 Test alles grondig uit! Oefening: Vul zelf het programma aan, zodat het aantal termen (aantal iteraties in geleerde taal) dat we nodig hadden voor de berekening in het venster wordt getoond. Als alles goed is ziet het resultaat er als volgt uit: Uitleg: Als u het nog moeilijk hebt om te volgen wat er in de programmacode gebeurt, probeer eens te denken zoals de computer doet! Dat gaat ongeveer als volgt: dblxwaarde = Val(txtXwaarde.Text) eerst halen we de waarde van x uit de tekstbox op, en stoppen die in een variabele in het ram-geheugen. Stel dat we x = 2 hebben ingegeven. dblterm = 1 ' de eerste term = 1 zet de variabele dblterm gelijk aan 1. De eerste term van de reeks is immers 1. dblresultaat = 1 ' het resultaat voorlopig ook zet de variabele dblresultaat ook gelijk aan 1. n = 1 n is de macht van x Do ' hier begint de lus Visual Basic door ir. C.Daniels 54
55 We beginnen nu een lus. We berekenen elke keer dat we de lus doorlopen de volgende term in de berekening en tellen die op bij het resultaat. dblvorigresultaat = dblresultaat ' bewaar het vorige resultaat Eerst slaan we natuurlijk de reeds bekomen waarde op in de variabele dblvorigresultaat, zodat we straks de oude en nieuwe waarde kunnen vergelijken. DblResultaat is dus nu ook 1 dblterm = dblterm * dblxwaarde / n ' bereken de volgende term Bereken de waarde van de volgende term 1 x. Deze is nu 1*2/1 = 2 dblresultaat = dblresultaat + dblterm 'tel op Tel deze op bij het resultaat: dblresultaat = =3 n = n + 1 ' verhoog n n wordt dus nu 2. Debug.Print dblresultaat ' alles controleren!!! Toont dit tussenresultaat in het Immediate venster ter controle Loop While Abs(dblVorigResultaat - dblresultaat) > dblnauwkeurigheid We vergelijken nu de nieuwe waarde met de oude. Als het verschil kleiner is dan de gewenste nauwkeurigheid (stel dat we deze als 0,001 hebben ingegeven), stoppen we: Abs(2 1) =1 is dus groter dan 0,001 en dus beginnen we de lus opnieuw: Do We beginnen de lus opnieuw dblvorigresultaat = dblresultaat ' bewaar het vorige resultaat DblResultaat is dus nu ook 2 dblterm = dblterm * dblxwaarde / n ' bereken de volgende term 2 x Bereken de waarde van de volgende term =vorige*x/n=2*2/2 = 2! 2 dblresultaat = dblresultaat + dblterm 'tel op Tel deze op bij het resultaat: dblresultaat = =5 n = n + 1 ' verhoog n n wordt dus nu 3. Debug.Print dblresultaat ' alles controleren!!! Visual Basic door ir. C.Daniels 55
56 Toont dit tussenresultaat in het Immediate venster ter controle Loop While Abs(dblVorigResultaat - dblresultaat) > dblnauwkeurigheid We vergelijken nu opnieuw de nieuwe waarde met de oude. Als het verschil kleiner is dan de gewenste nauwkeurigheid (stel dat we deze als 0,001 hebben ingegeven), stoppen we: Abs(5 2) =3 is dus groter dan 0,001 en dus beginnen we de lus opnieuw enz totdat we de gewenste nauwkeurigheid bereikt hebben. (Vraag: waarvoor is die Abs nodig na de While?) De opeenvolgende waarden van de term zijn (voor x=2) : , , , , , , , , ,13E-05 8,55E-06 1,32E-06 en worden dus zeer snel heel klein. Waarschijnlijk zullen we dus na een tiental berekeningen de gewenste nauwkeurigheid bereiken. Het Immediate venster geeft de volgende waarden van het berekend resultaat: 3 5 6, , , , , , , juiste waarde: 7, de fout is dus kleiner dan 0,001 ' En toon het in het label lblresultaat.caption = Str(dblResultaat) We tonen nu het resultaat in ons programmavenster Tip: Deze methode u in de plaats van de computer zetten is dikwijls een goede methode om uit te vissen wat er misloopt, als een programma niet werkt zoals u wil. Deze denkfouten zijn dikwijls moeilijker te vinden als syntax-fouten. Opgave:Pas het programma aan zodat alleen de cijfers van het resultaat waarvan u zeker bent, worden weergegeven.gebruik de instructie Format. Opgave: Test eens uit welke de grootste waarde van x is, voor het programma een runtime fout geeft. Het programma loopt vast vanaf x= Opgave: Probeer deze fout op te vangen in het programma zodat er een MsgBox komt met de volgende foutmelding De ingegeven x- waarde is te groot. Visual Basic door ir. C.Daniels 56
57 Gebruik een On Error goto instructie. Test uit of het werkt! Opgave: Pas het aantal keuzeopties uit met een vierde mogelijkheid Zo nauwkeurig mogelijk. Twee opeenvolgende benaderingen moeten dan volledig gelijk zijn. Maak gebruik van de eigenschap ListIndex van de Combobox om de keuze van de gebruiker te detecteren. Opgave: Maak een programma waarmee u de sinus kunt berekenen, met behulp van de reeksontwikkeling sin( x ) = x Controleer of de berekende waarde correct is met behulp van de functie Sin() x 3 3! + Tip: U hoeft niet alles opnieuw te typen! Vertrek van het voorbeeld Serie. Maak een nieuwe map aan. Bewaar het project als Sinus.vbp in de nieuwe map met File Save as en sla het formulier op als Sinus.frm. U moet dan alleen de berekening veranderen! x 5 5!... Breid het programma uit met een ComboBox met de keuzemogelijkheden - E tot de macht x - Sin(x) - Cos(x) Zodat de gebruiker kan kiezen welke waarde hij wil berekenen. De reeks voor cos(x) is: cos( x ) = 1 2 x 2! + 4 x 4!... Probeer het getal pi = zo nauwkeurig mogelijk te berekenen met de volgende reeksontwikkeling Visual Basic door ir. C.Daniels 57
58 π 2 = (methode van Euler) (uit de website: Euler ( ) Probeer zelf de juiste code te vinden! Als u er echt niet uitgeraakt vind u hieronder de juiste code: Private Sub cmdberekenen_click() Dim dblterm, dblvorigresultaat, m, n As Double Dim lngiteraties As Long Dim i As Integer lblresultaat.visible = True 'Maak dit terug zichtbaar 'initialisatie dblterm = 1 dblresultaat = 1 n = 1 ' in de teller m = 3 ' in de noemer lngiteraties = 0 'Bereken nu pi/2 Do dblvorigresultaat = dblresultaat dblterm = dblterm * n / m dblresultaat = dblresultaat + dblterm n = n + 1 'verhoogt met 1 m = m + 2 'verhoogt telkens met 2 lngiteraties = lngiteraties + 1 ' Debug.Print dblterm, dblresultaat Loop While Abs(dblVorigResultaat - dblresultaat) > 0 ' En toon het in het label lblresultaat.caption = Str(2 * dblresultaat) lbliteraties.caption = Str(lngIteraties) Een nauwkeuriger waarde van pi vindt u op Visual Basic door ir. C.Daniels 58
59 V. Lab 5 Arrays line A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele voorbeeldjes maken dit duidelijk. 14) Een array declareren Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren: Dim Tellers(14) As Integer 15 elementen. Tussen haakjes vermeldt u de grootte van het array. Maar vermits de laagste waarde steeds 0 is, heeft u dus één element meer.( 2 ) Als u zoals hier 14 opgeeft voor de grootte, heb de beschikking over de variabelen Tellers(0), Teller(1),Tellers(2),. Tot tellers(14). Dat zijn er dus 15! Elk van deze kunt u gebruiken als een integer getal. Andere voorbeelden: Dim Teksten(4) as String Dim Getallen(7) as Double ' 5 elementen van het type string. ' 8 elementen van het type double. 15) Arrays gebruiken in het programma In het programma kunt u deze tellers gebruiken door de index aan te geven. De index mag ook een variabele zijn van het type Integer of Long. Voorbeelden: Tellers(2) = 17 Teksten(3) = "En dit is het vierde!" Print Getallen(5) Of met een Integer variabele als index i = 3 Tellers(i)= 45 'Zet Tellers(3) = 45 Oefening: Maak een nieuw project aan met als naam bijvoorbeeld OefArr1. Zet het weer in een aparte map. Declareer de volgende arrays in het gedeelte (General) (Declarations) Option Explicit 'Declaraties van de arrays Dim tellers(9) As Integer Dim getallen(6) As Double '10 gehele getallen ' 7 double getallen 2 Met de instructie Option Base kun je de laagste waarde ook op één zetten, i.p.v. nul. Visual Basic door ir. C.Daniels 59
60 Dim teksten(3) As String Dim bool(4) As Boolean ' 4 strings ' 5 boolean Plaats de onderstaande code in de events Form_Click en Form_Load: Private Sub Form_Click() Dim i As Integer ' teller voor de For-next 'integer array For i = 0 To 9 tellers(i) = 10 * i Print tellers(i); Next Print 'double array For i = 0 To 6 getallen(i) = * i Print getallen(i); Next Print 'string array teksten(0) = "Eerste" teksten(1) = "Tweede" teksten(2) = "Derde" teksten(3) = "En dit is het vierde!" Print teksten(0), teksten(1), teksten(2), teksten(3) 'boolean array For i = 0 To 4 bool(i) = i Print bool(i), Next Private Sub Form_Load() Form1.Caption = "Arrays" AutoRedraw = True Laat het programma runnen, klik op het formulier en bekijk het resultaat. Visual Basic door ir. C.Daniels 60
61 Uit dit voorbeeld ziet u ook dat het type Boolean eigenlijk hetzelfde als een Integer is. Alleen de waarde 0 is False, alle andere waarden worden beschouwd als True. Tip: Experimenteer zoveel mogelijk! Kent u bijvoorbeeld niet de betekenis van de losse Print-instructie in bovenstaand voorbeeld, of van de komma achteraan in de Print-instructie, laat die dan weg, en bekijk het resultaat! Of zoek het op in de Help van VB. Oefening: sorteren met bubblesort Getallen sorteren is en blijft een moeilijke klus voor computers. Er zijn talloze methoden uitgewerkt, en dikke boeken over geschreven. Een van de snelste methodes is de quicksort, maar is vrij ingewikkeld om te programmeren. De bubblesort is veel trager, maar wel vrij makkelijk te programmeren. We zullen eerst deze methode even uitleggen. 16) Sorteren met bubblesort Hoe werkt bubblesort? Om dit te illustreren het volgende voorbeeld. Stel dat we getallen in gesorteerde volgorde van laag naar hoog willen verkrijgen. Daarom gaan we vooraan beginnen met telkens twee opeenvolgende getallen te vergelijken, staan ze verkeerd worden ze omgewisseld: Vergelijk 7 en 2, staan verkeerd dus omwisselen Vergelijk 7 en 8, staan goed, dus niets doen Vergelijk 8 en 1,staan verkeerd dus omwisselen Vergelijk 8 en 3, staan verkeerd dus omwisselen Na één cyclus staat het grootste getal nu achteraan We herhalen deze cyclus nog eens, het laatste getal moeten we niet meer beschouwen, dat staat al juist Vergelijk 2 en 7, staan goed Vergelijk 7 en 1, staan verkeerd dus omwisselen Vergelijk 7 en 3, staan verkeerd dus omwisselen Het laatste getal stond reeds juist Visual Basic door ir. C.Daniels 61
62 Ook het voorlaatste getal, de zeven, staat nu juist. We vervolgen deze werkwijze tot alle getallen juist staan. Als alle getallen juist staan, moeten we tijdens een ganse cyclus geen omwisselingen meer uitvoeren. Hieronder staat de volgende cyclus Alleen de 2 en de 1 worden nog omgewisseld. Met de andere cijfers moet niets meer gebeuren. Als we nu nog een cyclus zouden uitvoeren, wordt er niets meer omgewisseld, dus is de sortering voltooit. Het aantal omwisselingen dat we nodig hebben, hangt af van de originele getallen. De reeks staat reeds juist, dus geen omwisselingen nodig, maar om de reeks juist te krijgen zijn er heel wat nodig! Laten we nu een programma schrijven, dat een eenvoudige sortering zoals hierboven uitvoert. Maak een nieuw project aan met de naam Sorteren1. Geef het een weer eigen map met dezelfde naam. Plaats op het formulier twee knoppen, en geef deze objecten de volgende eigenschappen Visual Basic door ir. C.Daniels 62
63 Object Formulier Button Button Eigenschappen Name: Form1 Caption: Sorteren Font: Ms Sans Serif 10p Vet Heigth:6800 twips StartUpPosition:1-CenterOwner Width: 3000 twips Name:cmdNieuw Caption:Nieuw Name:cmdSorteren Caption:Sorteren Het formulier Sorteren in de ontwerpfase Plaats in de declaratie-sectie de volgende code: Option Explicit Const Aantal = 7 'Aantal te sorteren getallen Dim getallen(aantal) As Integer 'Array met getallen Plaats in het event Form_Load de volgende code: Private Sub Form_Load() AutoRedraw = True cmdsorteren.enabled = False 'Knop sorteren uitzetten Randomize Plaats in het event cmdnieuw_click de volgende code: Private Sub cmdnieuw_click() Dim i As Integer ' hulpvariabele Cls ' Maak dit formulier schoon 'genereer de random getallen For i = 0 To Aantal - 1 Visual Basic door ir. C.Daniels 63
64 10 Next Getallen(i) = Int(100 * Rnd) + 1 'random getal 1 tot Print getallen(i); ' en druk ze af ' en druk ze af in het formulier Print: Print 'lege lijn cmdsorteren.enabled = True ' zet de knop sorteren aan Plaats in het event cmdsorteren_click de volgende code: Private Sub cmdsorteren_click() Dim i, j As Integer ' hulpvariabelen Dim Gesorteerd As Boolean ' gesorteerd? ja of nee Dim dummy As Integer 'hulpvariabele Gesorteerd = False 'Begin met gesorteerd onwaar te zetten 'Hier begint de cyclus tot als Gesorteerd waar is Do While Not (Gesorteerd) Gesorteerd = True ' Eerst aan zetten For i = 0 To Aantal - 2' Het voorlaatste heeft als index Aantal-2 If getallen(i) > getallen(i + 1) Then 'Vergelijk dummy = getallen(i) ' Omwisselen getallen(i) = getallen(i + 1) getallen(i + 1) = dummy For j = 0 To Aantal - 1 'en afdrukken Print getallen(j); Next Print Gesorteerd = False 'nog niet goed End If Next i ' streepje na één cyclus Print " " Loop 'herbegin de cyclus cmdsorteren.enabled = False 'Zet de knop Sorteren uit Ons programma is af! Test het uit met verschillende reeksen. Hoeveel maal moet u gemiddeld wisselen bij 10 testrondes? Visual Basic door ir. C.Daniels 64
65 orteren1 bij Het programma Sorteren1 nadat op de knop Nieuw werd geklikt. En na het klikken op de knop Sorteren. Tussen elke cyclus hebben we een lijntje getrokken. De laatste cyclus is leeg. Opgave: Verander de code in het programma zodat er van hoog naar laag wordt gesorteerd. Pas het programma aan in de For-lus zodat het element achteraan, wat reeds gesorteerd is, niet meer in de lus wordt opgenomen. Kies een veranderlijke Laatste. Zet die eerst gelijk aan Aantal-2, en bij elke lus maakt u die één kleiner Wat gebeurt er als u in de For-lus Aantal-2 vervangt door Aantal 1? Leg uit Als we grotere hoeveelheden gegevens gaan sorteren, is dat nog moeilijk te volgen. Grafisch kunnen we wat meer doen. Daarom hebben we de Line-instructie nodig. Hiermee kunt u lijnen, open rechthoeken, en opgevulde rechthoeken tekenen. B. De Line-instructie Tekent een lijn, rechtboek, of opgevulde rechthoek (blok) in een formulier of PictureBox. Deze ziet er als volgt uit Line (x1,y1)-(x2,y2), kleur, optie Visual Basic door ir. C.Daniels 65
66 Uitleg over de parameters: - x1,y1 : x en y-coordinaat van het startpunt van de lijn of de linkerbovenhoek van de rechthoek - x2,y2 : x en y-coordinaat van het eindpunt van de lijn of de rechterbenedenhoek van de rechthoek - kleur: de kleur van de rand of van de opvulling (optioneel) - optie: B open rechthoek (van het engels: block) of BF opgevulde rechthoek (van het engels: block filled) (optioneel) Laten we dit even toepassen in een eenvoudig voorbeeld Lijnen1. We kunnen hiermee willekeurige lijnen en rechthoeken laten tekenen. Het project Lijnen1 in actie. Oefening: Lijnen1 Maak een nieuw project aan met als naam Lijnen1. Plaats het in een aparte map Lijnen1. Noem het project Lijnen1.vbp, en het formulier Lijnen1.frm. Plaats de volgende objecten op het formulier: cmdlijnen cmdrechthoeken cmdblokken Visual Basic door ir. C.Daniels 66 PictureBox
67 Geef de objecten de volgende eigenschappen: Object Form Button Button Button PictureBox Name:Form1 Caption: Lijnen1 Heigth: 3600 twips Width:4800 twips Name: cmdlijnen Caption:Lijnen Name:cmdRechthoeken Caption: Rechthoeken Name:cmdBlokken Caption:Blokken Name: PictureBox1 Eigenschap Plaats de volgende code in het event cmdblokken_click Private Sub cmdblokken_click() Dim Breedte, Hoogte, x1, y1, x2, y2, i As Integer ' Bepaal de breedte en de hoogte van de PictureBox Breedte = Picture1.ScaleWidth Hoogte = Picture1.ScaleHeight 'teken 10 willekeurige blokken For i = 1 To 10 x1 = Int(Breedte * Rnd) y1 = Int(Hoogte * Rnd) x2 = Int(Breedte * Rnd) y2 = Int(Hoogte * Rnd) Picture1.Line (x1, y1)-(x2, y2), QBColor(Int(Rnd * 16)), BF Next Plaats de volgende code in het event cmdlijnen_click Visual Basic door ir. C.Daniels 67
68 Private Sub cmdlijnen_click() Dim Breedte, Hoogte, x1, y1, x2, y2, i As Integer ' Bepaal de breedte en de hoogte van de PictureBox Breedte = Picture1.ScaleWidth Hoogte = Picture1.ScaleHeight 'teken 10 willekeurige lijnen For i = 1 To 10 x1 = Int(Breedte * Rnd) y1 = Int(Hoogte * Rnd) x2 = Int(Breedte * Rnd) y2 = Int(Hoogte * Rnd) Picture1.Line (x1, y1)-(x2, y2), QBColor(Int(Rnd * 16)) Next Plaats de volgende code in het event cmdblokken_click Private Sub cmdrechthoek_click() Dim Breedte, Hoogte, x1, y1, x2, y2, i As Integer ' Bepaal de breedte en de hoogte van de PictureBox Breedte = Picture1.ScaleWidth Hoogte = Picture1.ScaleHeight 'teken 10 willekeurige rechthoeken For i = 1 To 10 x1 = Int(Breedte * Rnd) y1 = Int(Hoogte * Rnd) x2 = Int(Breedte * Rnd) y2 = Int(Hoogte * Rnd) Picture1.Line (x1, y1)-(x2, y2), QBColor(Int(Rnd * 16)), B Next Plaats de volgende code in het event Form_Load Private Sub Form_Load() AutoRedraw = True Uitleg: Het programma is klaar! Test het uit! ScaleWidth: geeft de breedte van de PictureBox in twips ScaleHeigth: geeft de hoogte van de PictureBox in twips Twip: Een twip is 1/20 van een punt van een printer (567 twips is gelijk aan één centimeter). Let er op dat de y-as haar nulpunt linksboven heeft, in grafische afbeeldingen: Visual Basic door ir. C.Daniels 68
69 QBColor(Nummer): kleureninstructie afkomstig uit een vroegere versie van basic: Quick Basic. Maar kan nog steeds gebruikt worden. Nummer kan de volgende waarden hebben Nummer Kleur Nummer Kleur 0 Zwart 8 Grijs 1 Blauw 9 Licht Blauw 2 Groen 10 Licht Groen 3 Cyaan 11 Licht Cyaan 4 Rood 12 Licht Rood 5 Magenta 13 Licht Magenta 6 Geel 14 Licht Geel 7 Wit 15 Helder Wit Met de instructie QBColor(Int(Rnd * 16)) kiezen we dus een willekeurige kleur uit de reeks: 0 <= Rnd <= 0, <= Rnd*16 <=15, <= Int(Rnd*16) <=15 Oefening: Sorteren2 In deze oefening gaan we het sorteerproces grafisch voorstellen. Elk getal wordt voorgesteld door een horizontale lijn. De lengte komt overeen met de grootte van het getal. Het project ziet er bij uitvoering zo uit: Visual Basic door ir. C.Daniels 69
70 Maak een nieuw project Sorteren2 aan in een nieuw map Sorteren2. Voeg onderstaande objecten aan het project toe: cmdnieuw cmdsorteren cmdsluiten PictureBox Geef de objecten de volgende eigenschappen: Object Form Button Eigenschappen Name:Form1 Caption:Bubble sort Borderstyle: 1- Fixed Single Heigth: 4050 Width: 4700 Name:cmdNieuw Visual Basic door ir. C.Daniels 70
71 Caption:Nieuw Button Button PictureBox Name:cmdSorteren Caption: Sorteren Name:cmdSluiten Caption: Sluiten Name: Picture1 Heigth: 200 ScaleMode: 3 Pixel Width: 305 Hieronder volgt de volledige code. Zet ze in de juiste events. Option Explicit Const Aantal = 200 'Aantal getallen Dim getallen(aantal) As Integer Private Sub cmdnieuw_click() Dim i As Integer Dim Breedte As Integer Picture1.Cls 'Leeg maken Picture1.ForeColor = vbred 'Kleur van de lijnen Breedte = Picture1.Width 'Maak de langste lijn zo breed als het beeld ' Getallen genereren For i = 0 To Aantal - 1 getallen(i) = Int(Breedte * Rnd) Picture1.Line (0, i)-(getallen(i), i) Next i cmdsorteren.enabled = True 'Zet sorteerknop aan Private Sub cmdsluiten_click() End Private Sub cmdsorteren_click() Dim gesorteerd As Boolean Dim i, inthulp, Laatste As Integer gesorteerd = False Laatste = Aantal - 2 'En nu sorteren... While Not (gesorteerd) gesorteerd = True 'Begin een cyclus For i = 0 To Laatste If getallen(i) > getallen(i + 1) Then Visual Basic door ir. C.Daniels 71
72 gesorteerd = False ' een wisseling! dus sorteren niet gedaan 'beide lijnen wissen (= tekenen met achtergrondkleur) Picture1.ForeColor = vbwhite Picture1.Line (0, i)-(getallen(i), i) Picture1.Line (0, i + 1)-(getallen(i + 1), i + 1) 'verwisselen inthulp = getallen(i) getallen(i) = getallen(i + 1) getallen(i + 1) = inthulp 'lijnen tekenen in rood Picture1.ForeColor = vbred Picture1.Line (0, i)-(getallen(i), i) Picture1.Line (0, i + 1)-(getallen(i + 1), i + 1) End If Next i Laatste = Laatste 1 'elke cyclus waarde Laatste 1 verminderen Wend cmdsorteren.enabled = False 'Zet sorteerknop uit Private Sub Form_Load() AutoRedraw = True Randomize 'Voor random-getallen cmdsorteren.enabled = False 'Zet sorteerknop uit Oefening: Quicksort-methode bijvoegen Om de snelheid van sorteren te kunnen vergelijken gaan we ook sorteren volgens de veel snellere Quicksort-methode. Sla het project en het formulier eerst op in een nieuwe map met naam Quicksort, zodat de oude versie ongemoeid blijft. Voeg een nieuwe knop toe met name = cmdquicksort en Caption = Quicksort Voeg de volgende code toe aan het programma, bijvoorbeeld onder de sectie (General) (Deckarations). Achteraan vindt u een korte beschrijving van de werking. Option Explicit Const Aantal = 200 'Aantal getallen Dim getallen(aantal) As Integer Public Sub vbquicksort(varray As Variant, l As Integer, r As Integer) Visual Basic door ir. C.Daniels 72
73 Dim i As Integer Dim j As Integer Dim X As Integer Dim Y As Integer Dim k As Long 'voor de vertraging i = l j = r X = varray((l + r) / 2) While (i <= j) Wend While (varray(i) < X And i < r) i = i + 1 Wend While (X < varray(j) And j > l) j = j - 1 Wend If (i <= j) Then ' VERTRAGING 'For k = 0 To 'Next 'lijnen wissen Picture1.ForeColor = vbwhite Picture1.Line (0, i)-(varray(i), i) Picture1.Line (0, i + 1)-(vArray(i + 1), i + 1) Y = varray(i) varray(i) = varray(j) varray(j) = Y 'lijnen tekenen Picture1.ForeColor = vbred Picture1.Line (0, i)-(varray(i), i) Picture1.Line (0, i + 1)-(vArray(i + 1), i + 1) i = i + 1 j = j - 1 End If If (l < j) Then vbquicksort varray, l, j If (i < r) Then vbquicksort varray, i, r Voeg de volgende code toe aan het event cmdquicksort_click Private Sub cmdquicksort_click() Visual Basic door ir. C.Daniels 73
74 Dim i As Integer 'roep de quicksort-methode aan vbquicksort getallen, 0, Aantal - 1 'toon de gesorteerde reeks Picture1.Cls For i = 0 To Aantal - 1 Picture1.Line (0, i)-(getallen(i), i) Next i Zorg er ook voor dat de knop cmdquicksort pas toegankelijk wordt als er op Nieuw is geklikt (eigenschap Enabled aan- en afzetten) Test de sorteermethode uit. Als een en ander te snel gaat, kunt u de vertraging inschakelen door de commentaar weg te laten in de code: (hoe hoger het getal, hoe langzamer) ' VERTRAGING For k = 0 To Next Uitleg: De Quicksort is een van de snelste methodes om objecten te sorteren. De werking is kort gezegd als volgt. Men neemt ergens een middelste element uit de reeks. Dan worden de getallen aan weerszijden van dit element omgewisseld, alle getallen kleiner dan dit element komen naar voren, alle getallen groter dan dit element gaan naar de achterste helft. Als dit gebeurt is, zijn alle getallen in het gedeelte vooraan kleiner als dit middelste element, alle getallen achteraan groter dan dit element. Maar ze staan nog niet in de juiste volgorde. Dan wordt de quicksort-methode opnieuw los gelaten op het voorste deel, en daarna op het achterste deel. Telkens wordt elk gedeelte dus ongeveer in de helft gedeeld, totdat alle getallen zijn gesorteerd. We zien hier een voorbeeld van een procedure Public Sub vbquicksort(varray As Variant, l As Integer, r As Integer) Dit is een sub-functie die niet samengaat met een event, maar die aangeroepen wordt vanuit een ander gedeelte van het programma. Hoe dit werkt, zien we in het volgend hoofdstuk. Private Sub cmdquicksort_click() Dim i As Integer 'roep de quicksort-methode aan vbquicksort getallen, 0, 199 Visual Basic door ir. C.Daniels 74
75 VI. Lab 6 - Strings en string-functies A. Wat zijn strings? Strings zijn eigenlijk teksten. U kunt die bewaren in een stringvariabele. Een tekst bestaat uit karakters zoals letters, cijfers, leestekens, Een karakter wordt door de computer inwendig voorgesteld door een getal van 8 bits (1 of 0), dit stelt getallen voor tussen 0 en 255. Zo stelt de binaire waarde voor een computer het getal 65 voor, of als hij het als een karakter moet tonen een hoofdletter A. Deze overeenkomst wordt samengevat in een internationale norm: de ASCII-tabel (zie bijlage) Enkele karakters hierin kunnen niet afgedrukt worden maar dienen uitsluitend voor de besturing van monitors of printers, zoals het karakter met waarde 12, dat op een printer een nieuw blad inschuift, of op een monitor het scherm leegmaakt. De declaratie van een string-variabele is als volgt: Dim Tekst as String Stel dat u de inhoud van de variabele wilt gelijk zetten aan de tekst: Champions League, dan doet u dat in een programma als volgt: Tekst = "Champions League" B. String-functies van Visual Basic VB komt met een heel aantal methoden om deze strings aan te passen, of er bewerkingen mee uit te voeren. We zullen eerst met enkele functies kennis maken. Meer functies en uitleg vindt u in VB- Help. Gebruik voor de oefeningen het Immediate window. 17) & Voegt strings samen. (engels: concatenation) Probeer uit in het Immediate venster:? ABC & 123? ABC & 99 &! 18) Left(string, n) Geeft n karakters van de linker karakters van de string Probeer uit in het Immediate venster:? left( Diepenbeek,4) a = Hasselt? left(a,3) Visual Basic door ir. C.Daniels 75
76 19) Right(string,n) Geeft n karakters vanaf de rechterkant van de string Probeer uit in het Immediate venster:? right( Diepenbeek,4) a = Hasselt?Right(a,3) 20) Mid (string, s, n) Geeft n karakters te tellen vanaf karakter s in de string. Probeer uit in het Immediate venster:? Mid( Diepenbeek,4,3) a = Hasselt?Mid(a,4,2) Kunt u dus ook gebruiken als u bijvoorbeeld één letter van een string nodig heeft: Zo heeft Mid( Hasselt,5,1) als resultaat de letter e. 21) Asc(karakter) Geeft de ASCII-waarde van een karakter. Probeer uit in het Immediate venster:?asc( A ) a = 0?Asc(a)?Asc( XYZ ) 22) Chr(getal) Omgekeerde van Asc. Geeft het karakter dat hoort bij de ASCII-waarde getal. Probeer uit in het Immediate venster:?chr(65) a = 102?Chr(a) 23) Str(getal) Maakt van een getal een tekst. Als u dat probeert gebeurt er precies niets, maar toch is het getal omgevormd tot een string. Probeer uit in het Immediate venster:?str(165) a =456 Visual Basic door ir. C.Daniels 76
77 ?Str(a)?mid(str(123),3,1) geeft 2, terwijl u zoudt denken dat dit 3 moet geven waarom zou dat zijn?? Als u het niet vindt, probeer dan eens? ABC +str(123). 24) Val(tekst) Als tekst een getal bevat, wordt dit getal uit de tekst omgezet in een long variabele. Probeer uit in het Immediate venster:?val( 123 )?Val( 123ABC )?Val( ABC123 ) 25) InStr([getal],string1,string2) Deze functie zoekt de plaats van string2 in string1 te beginnen vanaf plaats getal. Als u getal weglaat, wordt gestart vanaf het eerste karakter. (Als u iets tussen rechte haken zet, betekent dit dat u het mag weglaten.) Probeer uit in het Immediate venster:?instr( ABCDEFG, DE )?InStr( ABCDEFG, 12 )?InStr(5, ABCDEFG, ABC ) 26) StrComp(String1,String2) Vergelijkt String1 met String2. - Als ze gelijk zijn wordt een nul teruggegeven. - Als String1 > String2 wordt 1 teruggegeven. - Als String1 < String2 wordt -1 teruggegeven. Probeer uit in het Immediate venster:?strcomp( ABC, ABC )?StrComp( 678, 123 )?StrComp( ABCDEFG, ABC )?StrComp( ABC, ABCDEF )?StrComp( ABC, ) (staat een spatie tussen twee ) 27) Format Drukt datums, getallen en strings volgens een bepaald formaat. Wordt best uitgelegd aan de hand van enkele voorbeelden. Probeer uit in het Immediate venster en noteer het resultaat:?format(date, "Long Date")? Format(Time, "h:m:s") Tijd = #17:04:23# Datum = #January 27, 1993#? Format(Tijd, "hh:mm:ss AMPM")? Format(Datum, "dddd, mmm d yyyy") Visual Basic door ir. C.Daniels 77
78 ?Format(5459.4, "##,##0.00")?Format(334.9, "###0.00")?Format(5, "0.00%")?Format("HALLO", "<")?Format("Dat is het!", ">") C. Procedures en functies Event-procedures zijn we al tegengekomen. Telkens u op een knop klikte werd het event Click aangeroepen van die knop. Maar we kunnen ook procedures schrijven die los staan van een event. Maar soms heb u een bepaald programmastukje dikwijls nodig. Dan maakt u daar best een apart subprogramma van. Er zijn twee soorten subprogramma s: - Sub-procedures - Functie-procedures of kortweg Functies 1) Sub-procedures Een Sub-procedure ziet er uit als volgt: Public Private Sub MijnProcedure (parameters). programmacode Op de betekenis van Private en Public komen we later terug. Vanuit het hoofdprogramma roept u deze procedure aan door de programmacode: Mijnprocedure parameters Een voorbeeld maakt dit duidelijker. Stel dat we een procedure willen schrijven die uw naam afdrukt op het formulier. Public DrukNaam(Naam as String) Print "Mijn naam is " & naam Stel dat deze code moet uitgevoerd worden als we op de Knop cmdbutton1 klikken, dat ziet de event-code er zo uit: Private Sub cmdbutton1_click ' Roep de procedure Druknaam aan met parameter "Janssens" DrukNaam "Janssens" Visual Basic door ir. C.Daniels 78
79 Parameters moogt u meegeven, maar u kunt ook procedures schrijven zonder parameters, of met meerdere parameters. Voorbeeld 1 van een Sub-procedure: het VisiteKaartje. Maak een nieuw project aan met de naam Visitekaartje. Sla het weer op in zijn eigen directory VisiteKaartje. De bedoeling is de nodige gegevens voor een adreskaartje in te tikken, en deze gegevens door het programma mooi te laten schikken: Project Visitekaartje in werking Plaats de volgende objecten op het formulier: Labels txtvoornaam txtnaam txtadres txtpostnummer cmdpreview txtwoonplaats cmdwissen PictureBox1 Visual Basic door ir. C.Daniels 79
80 Geef de objecten de volgende eigenschappen mee: Object Eigenschap Form Name: Form1 Caption: Visitekaartje Heigth: 4185 Width: Labels Name: Label1 tot Label5 Caption: Type je voornaam: Type je familinaam: Adres: Woonplaats: TextBox TextBox TextBox TextBox TextBox CommandButton CommandButton Picturebox Postnummer Name: txtvoornaam Multiline: False Text: (geen) TabIndex: 0 Tabstop: true Name: txtnaam Multiline: False Text: (geen) TabIndex: 1 Tabstop: true Name: txtadres Multiline: False Text: (geen) TabIndex: 2 Tabstop: true Name: txtwoonplaats Multiline: False Text: (geen) TabIndex: 3 Tabstop: true Name: txtpostnummer Multiline: False Text: (geen) TabIndex: 4 Tabstop: true Name: cmdpreview Caption: Preview TabIndex: 5 Tabstop: True Name:cmdWissen Caption: Wissen TabIndex: 6 Tabstop: True Name: Picture1 Visual Basic door ir. C.Daniels 80
81 BackColor: &H00FFFFFF (wit) In de event-procedure cmdpreview_click komt volgende code: Private Sub cmdpreview_click() Dim VoorNaam, Naam, Adres, Woonplaats, Postnummer As String 'Haal de nodige gegevens uit de tekstvelden VoorNaam = txtvoornaam.text Naam = txtnaam.text Adres = lbladres.text Woonplaats = txtwoonplaats.text Postnummer = txtpostnummer.text 'Roep de sub-procedure Afdrukken aan Afdrukken VoorNaam, Naam, Adres, Woonplaats, Postnummer Met de lijn Afdrukken VoorNaam, Naam, Adres, Woonplaats, Postnummer Roepen wij de sub-procedure Afdrukken aan met als parameters de gegevens, nodig om het visitekaartje af te drukken. Deze sub-procedure moeten we zelf helemaal schrijven. Plaats ze onder het gedeelte (general)(declarations) als volgt: Private Sub AfDrukken(nVoorn, nnaam, nadres, _ nwoonplaats, npostnummer As String) Dim tekst As String 'Maak de PictureBox leeg Picture1.Cls 'Zet de eigenschappen van het lettertype Picture1.Font = "Palace Script MT" 'lettertype Picture1.Font.Size = Picture1.ScaleHeight / 3 Picture1.Font.Italic = True 'cursief 'lettergrootte 'Druk bovenaan voornaam en naam tekst = nvoorn & " " & nnaam Picture1.CurrentX = (Picture1.ScaleWidth / 2) (Picture1.TextWidth(tekst)/2) Picture1.CurrentY = 0 Picture1.Font.Bold = True 'vetjes aan Picture1.Print tekst ' Adres tekst = nadres Picture1.CurrentX = (Picture1.ScaleWidth / 2) (Picture1.TextWidth(tekst)/2) Picture1.CurrentY = Picture1.TextHeight(tekst) Visual Basic door ir. C.Daniels 81
82 Picture1.Font.Bold = False 'vetjes uit Picture1.Print tekst 'Postnummer en woonplaats tekst = npostnummer & nwoonplaats Picture1.CurrentX = (Picture1.ScaleWidth / 2) (Picture1.TextWidth(tekst)/2) Picture1.CurrentY = 2 * Picture1.TextHeight(tekst) Picture1.Font.Bold = False 'vetjes uit Picture1.Print tekst 'Afdrukken in de Picturebox Uitleg: De instructie Cls maakt het formulier of de PictureBox leeg. De instructie Print tekst druk de inhoud van tekst af in het formulier of de picturebox. We moeten nog twee problemen oplossen: de juiste plaatsing van de tekst, en het lettertype. - De plaatsing van de tekst: We gebruiken hiervoor de eigenschappen CurrentX en CurrentY van een Picturebox. Ook in een formulier kunt u deze eigenschappen gebruiken. Geeft de plaats aan waar een tekst of een afbeelding in het object gaat plaatsen. Denk eraan dat de Y-coordinaat van boven naar beneden wijst! CurrentY CurrentX Tekst Om de tekst te horizontaal centreren moeten we dus de volgende berekening maken: Tekstlengte Marge Te centreren tekst Breedte van de PictureBox Uit de figuur blijkt dat: Visual Basic door ir. C.Daniels 82
83 Marge = ( Breedte PictureBox) ( Tekstlengte) 2 2 Of in VB-code: Picture1.CurrentX = (Picture1.ScaleWidth/2) (Picture1.TextWidth(tekst)/2) ScaleWidth: breedte van het object PictureBox of van een Form ScaleHeight: hoogte van het object PictureBox of van een Form - Het aanpassen van het lettertype en grootte De teksteigenschappen kunne we aanpassen door de eigenschappen van het font te veranderen: Het lettertype (Font) kiezen: Picture1.Font = "Palace Script MT" De tekstgrootte (Size) kiezen we gelijk aan 1/3 van de hoogte van de PictureBox Picture1.Font.Size = Picture1.ScaleHeight / 3 De tekst cursief maken: Picture1.Font.Italic = True De tekst vetjes maken: Picture1.Font.Bold = True Met de knop cmdwissen worden alle velden en de picturebox leeggemaakt. Schrijf zelf die code. Experimenteer met andere lettertypes, en font-eigenschappen! Zoek ze op in de Help! Hoe kunt u zorgen voor een witte tekst op een blauwe achtergrond? Voorbeeld 2 van een Subprocedure: Conversie van Eenheden. De bedoeling van dit voorbeeld is een snelheid uitgedrukt in een bepaalde eenheid (meter/sec bijvoorbeeld) om te rekenen naar andere grootheden zoals Mijl/seconde of Knopen. Het project Conversie in werking Visual Basic door ir. C.Daniels 83
84 Maak een nieuw project Conversie aan, en geef het weer zijn eigen map. Plaats de onderstaande objecten op het ontwerpformulier: Label ListBox TextBox CommandButton Eigenschappen van de objecten Object Form Label TextBox CommandButton ListBox Eigenschappen Name: Form1 Caption: Conversie van Snelheden Height:2040 Width:3400 Name:lblTekst Caption: Waarde: Name: txtwaarde Text: (geen) Multiline: false Name: cmdbereken Caption:Berekenen Name:listEenheden De nodige omrekeningsfactoren plaatsen we als constanten in het gedeelte bovenaan (General)(Declarations) Visual Basic door ir. C.Daniels 84
85 De resultaten van de berekening tonen we in een apart venster, form2. Om dat venster bij te voegen aan het project klikt u in het menu op Project Add Form. U krijgt dan onderstaande dialoog. Kies voor Form in het tabblad New en klik op Openen. Uw project bevat nu twee formulieren, Form1 en Form2. Visual Basic door ir. C.Daniels 85
86 Selecteer nu Form2. Plaats een CommandButton op het formulier: En geef deze objecten de volgende eigenschappen Object Form CommandButton Name:cmdOK Caption: OK Eigenschappen Name:Form2 Autoredraw: true BackgroundColor: Palette: wit Caption: (niets) ControlBox: False Font: Arial 10p Height: 2800 StartUpPosition: Manual Width: 4800 Visual Basic door ir. C.Daniels 86
87 Zorg dat de twee formulieren Form1 en Form2 zichtbaar zijn, dan kunt u met de muis in het Form Layout Window de juiste plaats van de beide formulieren bij het openen aangeven: Klik op de OK-knop en plaats volgende code in de eventprocedure cmdok_click van Form2: Selecteer nu terug Form1. Het event Form_Load van Form1 vullen we als volgt aan: Private Sub Form_Load() ' De keuzemogelijkheden aan de ListBox toevoegen listeenheden.additem ("Km/sec") listeenheden.additem ("Km/uur") listeenheden.additem ("Meter/sec") listeenheden.additem ("Meter/min") listeenheden.additem ("Mijl/uur") listeenheden.additem ("Mijl/sec") listeenheden.additem ("Voet/sec") listeenheden.additem ("Knoop") listeenheden.additem ("Lichtsnelheid") Visual Basic door ir. C.Daniels 87
88 Met de eigenschap AddItem van de ListBox vullen we de keuzelijst in. Uitleg: Private Sub cmdbereken_click() Dim Waarde, conv As Double If listeenheden.listindex = -1 Then 'Waarschuwing als u geen eenheid kiest MsgBox "Kies de eenheid!" ElseIf Not IsNumeric(txtWaarde.Text) Then 'Waarschuwing als u geen geldig getal invult MsgBox "De ingegeven waarde is niet geldig!" Else 'OK, nu kunnen we gaan berekenen 'de waarde uit de textbox halen Waarde = Val(txtWaarde.Text) 'kies de conversie factor naargelang de gekozen eenheid Select Case listeenheden.listindex Case 0 conv = Kilometer_per_seconde Case 1 conv = Kilometer_per_uur Case 2 conv = Meter_per_seconde Case 3 conv = Meter_per_minuut Case 4 conv = Mijl_per_uur Case 5 conv = Mijl_per_seconde Case 6 conv = Voet_per_seconde Case 7 conv = Knoop Case 8 conv = Lichtsnelheid End Select 'Bereken conv, Waarde Call Bereken(conv, Waarde) 'En toon het ingevulde formulier Form2.Show 1, Me End If Visual Basic door ir. C.Daniels 88
89 - De eigenschap ListIndex geeft het volgnummer van het gekozen item uit de ListBox. Als u geen item aanklikt wordt de waarde 1 teruggegeven. Met de aanroep Call Bereken(conv, Waarde) roepen we de procedure Bereken aan, met als parameters de omrekeningsfactor conv en de waarde uit de TextBox. - Met de instructie Form2.Show 1, Me openen we formulier 2 modaal. Een modaal formulier moet u eerst sluiten voor u kunt verder werken in het originele formulier form1. Dit wordt aangegeven met de waarde 1 achter de instructie Show. De Sub-procedure Bereken moeten we helemaal zelf intypen in het gedeelte (General)(Declarations) van Form1: Sub Bereken(c, w) Form2.Cls Form2.Print Str(w * c / Kilometer_per_seconde) & " Kilometer/sec" Form2.Print Str(w * c / Kilometer_per_uur) & " Kilometer/uur" Form2.Print Str(w * c / Meter_per_seconde) & " Meter/sec" Form2.Print Str(w * c / Meter_per_minuut) & " Meter/min" Form2.Print Str(w * c / Mijl_per_uur) & " Mijl/uur" Form2.Print Str(w * c / Mijl_per_seconde) & " Mijl/sec" Form2.Print Str(w * c / Voet_per_seconde) & " Voet/sec" Form2.Print Str(w * c / Knoop) & " Knopen" Form2.Print Str(w * c / Lichtsnelheid) & " Lichtsnelheid" Uitleg: Met de instructie Cls maken we het formulier Form2 eerst schoon. Met de instructie Print kunnen we tekst afdrukken. 2) Functie-procedures Functie-procedures worden ook kortweg functies genoemd. Het grote verschil tussen een subprocedure en een functie is dat een functie een waarde (integer, string, ) teruggeeft aan het aanroepende hoofdprogramma. Voorbeeldje: Stel dat we regelmatig de halve som S van twee getallen A en B moeten berekenen. We kunnen dit als volgt programmeren: A=20.5 Visual Basic door ir. C.Daniels 89
90 B=37.75 S = (A + b)/2 Print S Als dit regelmatig voorkomt in ons programma, kunnen we van die formule beter een functie maken, als volgt: ' de declaratie van de functie Private Function HalveSom(M as double,n as double) as Double HalveSom = (M + N)/2 ' In het hoofdprogramma: A = 20.5 B= Print HalveSom A B 'de syntax Print Halvesom(A,B) mag ook Let goed op de structuur van een functie: Private of Public Zelf gekozen naam van de functie Datatype van de berekende waarde in de functie Woordje Function Parameters, echter niet verplicht Private Public Function Functienaam(parameter1 as type, ) as type Programmacode Functienaam = waarde of variabele End Function Teruggeven aan het hoofdprogramma Vergelijk met het bovenstaande voorbeeld van de functie Halvesom. Belangrijk: Bij de aanroep van de functie moet u evenveel parameters meegeven als er bij de declaratie van de functie werden aangegeven. Ook het datatype van elke parameter moet overeenkomen! Visual Basic door ir. C.Daniels 90
91 Een heel eenvoudig voorbeeld van een functieaanroep kunt u als volgt programmeren: Maak een nieuw project Functie1 aan, en plaats de volgende code in het programmavenster: Option Explicit 'De functie Product Private Function Product(a As Double, b As Double) As String Product = Str(a * b) End Function 'De eventprocedure Private Sub Form_Load() AutoRedraw = True Print "Het product van 5 en 7 is" & Product(5, 7) Probeer uit! Wat is het resultaat bij de uitvoering? Uitleg: de functie aanroep Product(5,7) plaatst de waarde 5 in de parameter a van de functie, en de waarde 7 in de parameter b. De functie berekent het product en geeft het resultaat, omgevormd tot een string Str(a*b), terug aan het hoofdprogramma. Voorbeelden van ingewikkelder toepassingen met functies zien we in het volgende hoofdstuk. 3) Private en Public Wanneer gebruikt u nu de instructie Private en Public? Een programma (project) bestaat meestal uit verschillende modules. Zo is er voor elk formulier (window) dat u nodig heeft een module met de layout van dat venster (met extensie *.frm) en de bijbehorende programmacode voor de afhandeling van events, en andere sub-programmas. U kan ook aparte programma-modules maken met alleen maar programmacode bevatten (extensie *.bas). Als een procedure Private wordt gedeclareerd, kan zij alleen maar aangeroepen worden vanuit deze module. Als zij Public wordt gedeclareerd is zij te gebruiken overal in het ganse project. Men noemt dat de scope van een procedure. Programma project MijnProject Module 1 Module 2 Module 3 Private Sub ProcX. Private Sub ProcY. Public Sub ProcZ. Andere procedures Andere procedures Andere procedures en functies van en functies van en functies van module 1 module 2 module Aanroep: Aanroep: Aanroep: Visual Basic door ProcX() ir. C.Daniels verboden ProcX() verboden 91 ProcX() OK ProcY() verboden ProcZ() OK ProcY() OK ProcZ() OK ProcY() verboden ProcZ() OK
92 Bovenstaand programma bestaat uit drie modules. De procedure X is alleen te gebruiken in Module 1. De procudure Y is alleen te gebruiken in Module 2. Terwijl de procedure Z te gebruiken is in de drie modules. Visual Basic door ir. C.Daniels 92
93 VII. Lab 7 - Functie-procedures Functieprocedures geven een waarde terug aan het hoofdprogramma. Laten we dat even uitproberen in het volgend voorbeeld van de calculator. We zullen daar twee functies in gebruiken: - Private Function IsOk(Code As Integer) As Boolean Krijgt de code van de ingedrukte toets mee als parameter en geeft True terug als de toets ok is, anders False. Alleen cijfers, het punt en een minteken zijn toegelaten. - Private Function Bereken(xx As Double, _ yy As Double, Actie As Integer) As Double Krijgt de x-waarde, de y-waarde en het nummer(index) van de bewerkingstoets van de bewerking mee om de berekening uit te voeren. Geeft het resultaat als een Double terug A. Nieuw project: de calculator Maak een nieuw project aan Calculator1, en zet alles in een aparte map.plaats de volgende objecten op het formulier: Label1 Label2 txtx txty cmdcls Array van 4 knoppen voor de 4 hoofdbewerkingen lblresultaat Array van knoppen: We plaatsen in dit formulier een array van knoppen. Dat zijn knoppen die allemaal dezelfde naam hebben cmdactie. Om eze van elkaar te onderscheiden krijgen ze Visual Basic door ir. C.Daniels 93
94 elke een nummer, een zogenaamde index. De plusknop krijgt indexnummer 0, de min-knop indexnummer 1, enz. In het programma kunt u de minknop gebruiken als cmdactie(1). Een array van knoppen aanmaken Dat array aanmaken, kunt u gewoon door vier knoppen aan te maken, ze dezelfde naam te geven en de index-waarde voor elke knop juist te zetten. Het gaat makkelijker als volgt: - Plaats de eerste knop, de plusknop. - Geef hem de naam cmdactie. - Selecteer de knop, en kopieer hem door door in het menu Bewerken copiëren te kiezen, of door op Ctrl-C te duwen. - Plak nu de knop driemaal terug door in het menu Bewerken Plakken te kiezen of Ctrl-V in te duwen. Beantwoordt de vraag Do you want to create a control array? met JA. Als u nu de indexen van de vier knoppen nakijkt in het venster Properties, zult u zien dat ze automatisch goed genummerd werden. Geef de objecten de volgende eigenschappen: Form Name:Form1 Caption: Calculator Height:3800 Width: 4600 Label Name:Label1 Caption: X Label Name:Label2 Caption: Y TextBox Name: txtx Text: (geen) Font: MS Sans Serif 12p Vetjes TextBox Name: txty Text: (geen) Font: MS Sans Serif 12p Vetjes CommandButton (Array) Name:cmdActie Caption: + - x / Index: van 0 tot 3 Font:Arial Black 12p Vet CommandButton Name: cmdcls Caption: Cls Font:Arial Black 12p Vet Label Name:lblResultaat Caption: (geen) Font:Arial Black 12p Vet Visual Basic door ir. C.Daniels 94
95 Trek er vier rode lijnen rond (Line) Typ de twee volgende functies in onder Option Explicit: Option Explicit ' Check of de ingedrukte toets een cijfer, een punt of minteken is Private Function IsOk(Code As Integer) As Boolean Select Case Code Case Asc("."), Asc("0") To Asc("9"), Asc("-") IsOk = True Case Else IsOk = False End Select End Function ' het resultaat berekenen Private Function Bereken(xx As Double, _ yy As Double, Actie As Integer) As Double Select Case Actie Case 0 Bereken = xx + yy Case 1 Bereken = xx - yy Case 2 Bereken = xx * yy Case 3 Bereken = xx / yy End Select End Function Uitleg: In de functie IsOk bevat de parameter Code de ascii-code van de ingedrukte toets Bij de functie Bereken, worden de parameters X, Y, en Actie meegegeven. Actie is de index van de gekozen bewerkingstoets. Vul het event cmdactie_click als volgt in (de index van de toets komt automatisch mee als parameter) Private Sub cmdactie_click(index As Integer) Dim x As Double, y As Double ' Kijk of het een geldig getal is If Not IsNumeric(txtX.Text) Then MsgBox "Het eerste getal is ongeldig", vbokonly Exit Sub ElseIf Not IsNumeric(txtY.Text) Then MsgBox "Het tweede getal is ongeldig", vbokonly Exit Sub End If ' Zet de waarden uit de textvelden in een variabele x = Val(txtX.Text) y = Val(txtY.Text) Visual Basic door ir. C.Daniels 95
96 ' delen door nul kan niet If (Index = 3) And (y = 0) Then MsgBox "Deling door nul", vbokonly Exit Sub End If ' ok, maak de bewerking lblresultaat.caption = Str(Bereken(x, y, Index)) We gaan ook de toetsaanslagen onderscheppen: als het geen geldig teken is (cijfer, punt of minteken, vagen we de aanslag uit (=0) en laten een geluidje horen. Kies daartoe het event KeyPress van de textboxen txtx en txty. De ascii-code van de ingedrukte toets zit dan in de parameter KeyAscii. Private Sub txtx_keypress(keyascii As Integer) If Not IsOk(KeyAscii) Then Beep KeyAscii = 0 End If Private Sub txty_keypress(keyascii As Integer) If Not IsOk(KeyAscii) Then Beep KeyAscii = 0 End If Bij het klikken op de knop Cls moeten alle velden uitgewist worden: Private Sub cmdcls_click(index As Integer) txtx = "" txty = "" lblresultaat.caption = "" Het programma is klaar! Test het uit! Opdracht: voeg een knop bij om X Y te berekenen. Daarmee kunt u ook worteltrekken want dat is verheffen tot de macht 0.5, of derdemachtswortel Visual Basic door ir. C.Daniels 96
97 Breidt de voorgaande calculator uit met een array van vier knoppen met naam cmdfunctie (indexen 0 tot 3) waarmee de wiskundige functies sin, cos,tg en ln (natuurlijk logaritme grondtal e= ) kunnen berekend worden van de waarde in veld X. Ln( ) berekenen Bij een foutieve ingave Hieronder de code van het event cmdfunctie_click. Schrijf zelf de code van de functie BerekenFunctie() Private Sub cmdfunctie_click(index As Integer) Dim Waarde As Double ' controleer eerst of de x-waarde wel numeriek is If Not IsNumeric(txtX.Text) Then MsgBox "X-waarde is niet numerisch",vbokonly Exit Sub End If ' ok, maak de bewerking Waarde = Val(txtX.Text) lblresultaat.caption = Str(BerekenFunctie(Waarde, Index)) Opgave: Welke wiskundige functies bestaan in VB? En hoe kunt u bijvoorbeeld de Briggse logaritme berekenen (basis grondtal 10)?Zoek op in de Help. Een meer geavanceerde calculator vindt u in het hoofdstuk Projecten achteraan. Visual Basic door ir. C.Daniels 97
98 B. ByVal en ByRef Parameters kunt u op twee manieren doorgeven aan een functie: - als waarde (by value) - als referentie (by reference) By Value: alleen de waarde van de variabele wordt doorgegeven aan de procedure. By Reference: hier wordt niet de waarde van de variabele doorgegeven, maar wel de plaats van de variabele in het geheugen, ook het adres van de variabele genoemd. Dit heeft tot gevolg dat u een parameter niet van waarde kunt wijzigen in de functie als u hem als waarde doorgeeft, maar wel als u een referentie doorgeeft. Probeer dit eens uit aan de hand van volgend voorbeeld. Maak een nieuw project aan met naam ValRef, en plaats het in zijn eigen map met dezelfde naam. Typ de volgende code in: Option Explicit Private Sub Test(ByVal x As Integer, ByRef y As Variant, _ z As Integer) x = x + 1 y = y + 1 z = z + 1 Print "In de functie Test"; x; y; z Plaats de volgende code in het event Form_Click Private Sub Form_Click() Dim x, y, z As Integer x = 1: y = 1: z = 1 Cls Print "Voor de functie Test"; x; y; z Call Test(x, y, z) ' de schrijfwijze Test x,y,z mag ook Print "Na de functie Test"; x; y; z Start het programma, en klik op het formulier. Wat gebeurt er met de waarde van x, y en z? Visual Basic door ir. C.Daniels 98
99 De uitleg is vrij eenvoudig. Variabelen zijn op een bepaalde geheugenplaats opgeslagen. Deze geheugenplaatsen zijn genummerd. Dit nummer noemen we het adres van de variabele. Als we een parameter als waarde doorgeven, geven we alleen de waarde mee. Waar de echte variabele staat in het geheugen weet de functie niet, en kan de originele waarde van de variabele dus niet veranderen. Als we een parameter als referentie doorgeven, geven we het adres mee van de variabele. Nu kan de functie de waarde van de originele variabele wel veranderen. RAM-geheugen Adressen Inhoud / Waarde Variabele X Als u de functie Test met een parameter X ByVal meegeeft, doet u in feite de volgende aanroep: Test(1500) Geeft u de parameter mee als referentie mee, dan doet u de volgende aanroep: Test(9100) In dit laatste geval wordt niet de waarde maar het adres meegegeven, vandaar dat in de functie de paramater dan moet aangegeven worden met het type Variant en niet als integer. Het adres is immers geen integer, maar een speciaal type. Een goed begrip hiervan is erg belangrijk als u goed wilt leren programmeren! Wat is de default waarde, als u dus niets aangeeft bij de parameter, zoals bij de z in voorgaand voorbeeld? Wat gebeurt er als u in voorgaand voorbeeld de parameter y toch als integer aangeeft? Visual Basic door ir. C.Daniels 99
100 VIII. Werken met Bestanden Al de informatie die u in het RAM-geheugen van een computer opslaat, verdwijnt als u het programma afsluit. Als u gegevens langer wil bewaren, moet u deze gegevens op een schijf (diskette of harde schijf) van uw pc opslaan. De computer slaat deze gegevens op in bestanden (Engels: files). Er bestaan twee essentieel verschillende soorten van bestanden: Sequentiële bestanden om tekst op te slaan. Kenmerken: - Uitsluitend voor tekstgegevens - Variabele lengte van een record. Elke lijn wordt afgesloten met de karakters CR en LF. - Kan alleen gelezen worden van voor naar achteren Random-access bestanden voor andere gegevens. Kenmerken: - Is in principe geschikt voor alle soorten van gegevens - Vaste recordlengte - Mogelijkheid om een willekeurige record op te halen. In beide soorten is het mogelijk om gegevens te lezen (input) vanaf de diskette naar het RAM-geheugen, en te schrijven (output) vanuit het RAM-geheugen naar de diskette. Laten we deze twee types even wat nader bekijken en toepassen in Visual Basic. A. Sequentiële bestanden Sequentiële bestanden kunnen alleen gebruikt worden voor het opslaan van tekst. Deze tekst moet opgedeeld zijn in lijnen, per lees- of schrijfoperatie wordt één enkele lijn gelezen. Elke lijn heet een record van het bestand. Het bestand kan ook maar alleen van voor naar achteren worden gelezen of geschreven. Om iets terug te vinden moet u door het ganse bestand lezen, totdat u aan de gevraagde passage aanbelandt. Zowel bij het lezen als het schrijven van bestanden zijn drie verschillende bewerkingen nodig: 1. Het openen van een bestand. Hier worden buffers in het geheugen vrijgemaakt om de gevraagde bewerkingen mogelijk te maken. 2. Een of meerdere lees- en/of schrijfbewerkingen 3. Het sluiten van het bestand. Omgekeerde van het openen. Om hierin wat meer kennis te vergaren, kunnen we enkele eenvoudige oefeningen maken. Visual Basic door ir. C.Daniels 100
101 4) Een sequentieel bestand schrijven Oefening: Maak een nieuw project aan met naam Bestanden1. Zet het liefst in aparte map met dezelfde naam. Plaats een knop linksonder op het formulier, met de naam cmdopslaan en de caption Opslaan. De bedoeling is enkele records te schrijven in een bestand text.txt op een diskette. Zorg dus dat er een diskette met voldoende ruimte in het diskettestation steekt. Type volgende code in het event cmdopslaan_click: Private Sub cmdopslaan_click() Print "Bestand wordt geopend" Open "a:\test.txt" For Output As #1 Print #1, "Record een" Print "Record 1 opgeslagen" Print #1, "Record twee" Print "Record 2 opgeslagen" Print #1, "Laatste record" Print "Record 3 opgeslagen" Close #1 Print "Bestand terug gesloten." Uitleg: Open "a:\test.txt" For Output As #1 - Open a:\test.txt : met deze code wordt een bestand test.txt geopend in de root-map op de diskette a:\. Het bestand wordt aangemaakt, want het bestaat nog niet. Moest het bestaan wordt het oude overschreven! - For Output : betekent dat er informatie gaat geschreven worden. - As #1: elk bestand dat in een programma wordt gebruikt krijgt een nummer (filehandle genoemd), zodat we meerdere bestanden kunnen openen. Het nummer wordt gebruikt om aan te geven in welk bestand er gelezen of geschreven wordt. Dan worden er drie records (hier teksten) geschreven: Print #1, "Record een" Print #1 : schrijf in het bestand met file-handle 1, dus hier in a:\test.txt Record een De tekst die weggeschreven wordt. Close #1 Visual Basic door ir. C.Daniels 101
102 Deze code sluit het bestand met file-handle 1 weer af. Tip: Sluit aan het einde van een programma steeds de geopende bestanden af! Anders kan er informatie verloren gaan. De code Close (zonder nummer) sluit alle geopende bestanden af. Tussen elke bewerking hebben we een print-statement gezet, zodat we op het formulier kunnen volgen wat er gebeurt. Klik op de knop Opslaan. Uw formulier ziet er dan zo uit: Ons programma heeft een tekstbestand met de naam test.txt op de diskette geschreven. Als het niet lukt: kijk dan of de diskette wel goed is, geformatteerd is, niet beveiligd tegen schrijven en nog voldoende vrije ruimte heeft (enkele kbyte is hier voldoende). We zullen straks het programma zelf laten controleren of alles goed verloopt! Dit kun je controleren door even met het Kladblok dit bestand te openen: U ziet dat er 3 records geschreven werden, met de inhoud zoals teksten in ons testprogramma. Met het dos-proramma type kunnen we eveneens de tekst van het bestand afdrukken. A:\>type test.txt Record een Record twee Laatste record Visual Basic door ir. C.Daniels 102
103 Met het dos-programma debug, kunnen we precies zien, wat er nu eigenlijk op de diskette werd geschreven: hexadecimaal Stuurkarakters Dezelfde tekst leesbaar A:\>debug test.txt -d 1A27: F E 0D 0A F Record een..reco 1A27: D-0A 4C rd twee..laatste 1A27: F D-0A F record..t...u 1A27: C 01 3A A-04 E8 1C EC 2C 41 FE C0 Y..:uS...,A.. 1A27:0140 3C 1A A2 91 D3 B0-04 EB C8 F A27:0150 E8 5B CE 72 2E EB-BA F F E8 57.[.r.r...t..W 1A27: EB F2 83 7D 02 FF 74-0C F FF 3F }..t..E..?t. 1A27: D B D3 EB 96 B U.t... -q A:\> Links staan de geheugenadressen waarop de data werden ingelezen. We gaan hier niet verder op in. In het midden vindt u de hexadecimale ascii-codes van de geschreven karakters: = 5x = = R = karakter nr.82 uit de asciicode = 6x = = e = karakter nr.101 uit de asciicode = 6x = = c = karakter nr.99 uit de asciicode enz Uiterst rechts staan de afdrukbare tekens in leesbare vorm. Tussen elke record vindt u de code 0D (= ) 0A (= ). Dit zijn de codes voor de ascii-stuurkarakters Carriage Return (naar begin van de lijn), en Line Feed (nieuwe lijn). Deze worden niet afgedrukt op het scherm of de printer, maar laten de cursor naar het begin van de lijn terugspringen en dan naar de volgende lijn. Dit is een voornaam kenmerk van sequentiële bestanden. Waarom dit belangrijk is zien we later. U ziet dat er achteraan ook enkele onleesbare gedeelten zijn (niet meer vetjes afgedrukt), voorbij het einde van het bestand. De lengte van het bestand wordt ook ergens opgeslagen op de diskette, zodat de computer weet welke tekens nog zinvol zijn en tot het bestand behoren en welke niet meer. Dit zijn resten van informatie die vroeger op de diskette werd geschreven. Visual Basic door ir. C.Daniels 103
104 5) Een sequentieel bestand lezen Laten we nu de code bekijken die het zojuist aangemaakte bestand leest en deze tekst op het scherm afdrukt. Voeg een tweede knop toe aan bestand met de naam cmdlezen, en de caption Lezen. Plaats de volgende code in het event cmdlezen_click: Private Sub cmdlezen_click() Dim Lijn As String Print "Bestand wordt geopend om te lezen" Open "a:\test.txt" For Input As #1 While Not EOF(1) Input #1, Lijn Print Lijn Wend Close #1 Print "Bestand is terug gesloten." Als u op de knop Lezen klikt krijgt u volgend resultaat: Uitleg: Dim Lijn As String We declareren een variabele Lijn als een string. Hierin slaan we telkens een lijn op van ons bestand. Open "a:\test.txt" For Input As #1 Het bestand test.txt op de diskette wordt geopend om te lezen met file-handle 1. While Not EOF(1) Input #1, Lijn Print Lijn Visual Basic door ir. C.Daniels 104
105 Wend Een while-lusinstructie. De lus werkt zolang het einde van het bestand niet is bereikt. Als we alles gelezen hebben, wordt de functie EOF(1) WAAR, en stopt de lus. EOF staat voor End Of File. De parameter (1) slaat op de file-handle van het geopende bestand. De instructie Input #1,Lijn leest één record en plaatst de inhoud ervan in de stringvariabele Lijn. De instructie Print Lijn drukt de inhoud van Lijn af op het formulier. Close #1 Het bestand wordt terug gesloten. 6) Fouten opvangen Als het bestand test.txt niet op de diskette staat krijgt u volgende foutmelding: Klik op End om het programma te stoppen. In Visual Basic kunnen we dergelijke fouten opvangen met de On error goto instructie. Pas de code van het inlezen als volgt aan: Private Sub cmdlezen_click() Dim Lijn As String Print "Bestand wordt geopend om te lezen" On Error GoTo Fout Open "a:\test.txt" For Input As #1 While Not EOF(1) Input #1, Lijn Print Lijn Wend Close #1 Print "Bestand is terug gesloten." Exit Sub Fout: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description Visual Basic door ir. C.Daniels 105
106 Dezelfde fout geeft nu het volgende pop-upscherm: Uitleg: On error goto naam: Als er na deze instructie een fout optreedt, springt het programma naar de plaats waar de naam: staat. Fout : MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description Een fout schept steeds een fout-object met de naam Err. Een eigenschap is het foutnummer (aangeduid met Err.number) en de beschrijving van de fout (aangeduid met Err.description) Beide worden afgedrukt in de popup als er een fout optreedt. De karakters 13 en 10 kenden we al. Let op de dubbele punt achter het label Fout: Op dezelfde manier kunnen we ook het opslaan van het bestand beveiligen. We kunnen zelfs eerst testen of het bestand al bestaat, door het eerst proberen te openen voor input. Als het blijkt dat we dat kunnen, bestaat het reeds, en kunnen we vragen of de gebruiker het bestaande bestand wil afvegen. De test kunnen we in een functie-procedure onderbrengen als volgt: Private Function BestandBestaat() As Boolean BestandBestaat = False On Error GoTo BestaatNiet: Open "a:\test.txt" For Input As #1 BestandBestaat = True Close #1 Exit Function BestaatNiet: BestandBestaat = False End Function De redenering is als volgt: als het bestand kan geopend worden bestaat het: BestandBestaat = True In het andere geval bestaat het bestand niet (of is er een andere fout opgetreden) Visual Basic door ir. C.Daniels 106
107 Plaats deze code ergens bovenaan in uw programma. De procedure Opslaan wordt nu als volgt aangepast: Private Sub cmdopslaan_click() Dim Ant As Integer Ant = vbyes If BestandBestaat Then Ant = MsgBox("Bestand bestaat al! Overschrijven?", vbyesno, "Opgelet!") End If If Ant = vbyes Then Cls Print "Bestand wordt geopend" On Error GoTo Fout Open "a:\test.txt" For Output As #1 Print #1, "Record een" Print "Record 1 opgeslagen" Print #1, "Record twee" Print "Record 2 opgeslagen" Print #1, "Laatste record" Print "Record 3 opgeslagen" Close #1 Print "Bestand terug gesloten." Exit Sub Else Cls Print "Bestand werd niet overschreven." End If Exit Sub Fout: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description Als het bestand reeds bestaat, krijgt u nu volgende messagebox bij het opslaan: Visual Basic door ir. C.Daniels 107
108 Test het aangepaste programma uit! Simuleer enkele fouten, zoals het weglaten van de diskette uit de drive. 7) De Append-optie Er is nog een derde manier beschikbaar om een bestand te openen: Append. Hiermee kun je achteraan tekst toevoegen aan het bestand. Laten we dit even uitproberen. We gebruiken hierbij een Inputbox om extra tekst te kunnen ingeven. Dit kunt u vergelijken met een messagebox, met de extra mogelijkheid om wat data in te tikken. Voeg een nieuwe knop toe aan uw programma met de naam cmdappend, en de caption Append. In het event cmdappend_click plaatst u volgende code: Private Sub cmdappend_click() Dim strnieuwetekst As String strnieuwetekst = InputBox("Type een tekst:", "Tekst bijvoegen") If strnieuwetekst <> "" Then Print "Bestand wordt geopend voor append" On Error GoTo Fout Open "a:\test.txt" For Append As #1 Print #1, strnieuwetekst Close #1 Print "Bestand is terug gesloten." Exit Sub Fout: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + Chr(13) + Chr(10) + _ Err.Description End If Als u de knop Append aanklikt krijgt u dan onderstaande InputBox waarin u tekst kunt typen die u aan het bestand wil toevoegen: Als u dan terug op Lezen klikt, krijgt u het aangevulde bestand te zien: Visual Basic door ir. C.Daniels 108
109 Ingevoegde tekstlijn Oefening 1: Vraag met een inputbox naar het nummer van een record, en laat dan de tekst van deze record af, als hij bestaat. Als het nummer groter is dan het aantal records in het bestand moet er een messagebox met een foutmelding worden weergegeven. Voorbeeld: u geeft het nummer 3 in, dan moet de tekst Laatste record uit het bestand op het formulier verschijnen. Tip: gebruik een teller en lees de records vanaf het begin van het bestand. Voor elke gelezen record telt u één op bij de teller. Tot u de gevraagde record bereikt. Oefening 2: schrijf een programma dat het bestand test.txt opent om te lezen, en een tweede bestand test2.txt om te schrijven. Schrijf de inhoud van bestand test.txt over naar bestand test2.txt en verander daarbij alle letters in hoofdletters. Zet de benodigde code hiervoor bijvoorbeeld achter een extra knop met caption Hoofdletters in het voorgaande programma. Tip: Gebruik de functie Ucase, om tekst om te zetten in hoofdletters. Gebruik filehandle 1 voor test.txt en file-handle2 voor test2.txt. Lees telkens een regel in test1.txt, verander deze in hoofdletters, en schrijf deze regel weg naar bestand test2.txt. Oefening 3: Pas het programma zodanig aan dat u met een een inputbox naar de naam van het bestand vraagt, zodat u een willekeurig bestand kunt inlezen. Tip: declareer een variabele strbestandsnaam om de naam uit de inputbox op te slaan. Met de code Open strbestandsnaam For Input As #1 kunt u dan proberen het bestand te openen. Voorzie ook de nodige foutafhandeling, bijvoorbeeld als het gevraagde bestand niet bestaat! Oefening: Visual Basic door ir. C.Daniels 109
110 Schrijf een VB-programma dat een tekstbestand inleest, alle tekst naar hoofdletters converteert, en wegschrijft in een nieuw bestand. Vraag de naam van het in te lezen tekstbestand, en de naam van het uitvoerbestand op in twee textboxen. Tips: maak gebruik van de VB-functie Ucase() om de tekst te converteren (probeer eerst uit in het Immediate Window!). Open het invoerbestand bijvoorbeeld For Input as #1, en het te schrijven bestand For Output as #2. Lees telkens één lijn in het invoerbestand, converteer naar hoofdletters, en schrijf die lijn weg naar het uitvoerbestand. B. Random access bestanden In het volgende project maken we een programma dat adresgegevens opslaat in een random access bestand met de naam Adres.dat. Het grote voordeel is dat we onmiddellijk elke record kunnen terugvinden (lezen en schrijven) aan de hand van zijn volgnummer, zonder het ganse bestand te moeten doorlopen. Om met dit type van bestanden te kunnen werken heb je een recordstructuur nodig. Stel dat we naam, woonplaats en geboortedatum van een aantal personen in een dergelijk bestand willen opslaan. We gaan hiervoor een record-type aanmaken: Type Adres Naam As String * 14 Woonplaats As String * 30 Geboortedatum As Long End Type In ons programma kunnen we nu een nieuwe variabele Kennis declareren van het type Adres als volgt: Private Kennis as Adres De naam van een adres bereiken we door de uitdrukking: Kennis.Naam Men noemt dit de punt-operator. Deze wordt courant gebruikt in object georiënteerd programmeren. Kennis is eigenlijk een object met de eigenschappen Naam, Woonplaats en Geboortedatum. Visual Basic is eigenlijk een object georiënteerde taal. Zo is ook elk formulier, knop of tekstveld een object met eigenschappen (Caption, Font, ) en met methodes (Load, Click, ). Voor verdere informatie over Object Georiënteerd Programmeren (OOP = Object Oriented Programming) verwijzen we naar gepaste handboeken. Visual Basic door ir. C.Daniels 110
111 8) Een random access bestand beheren Dit gebeurt met het commando: Open "bestandsnaam" For Random As #filehandle Len = RecordLengte Elke record heeft nu een vaste recordlengte afhankelijk van de gegevens. Een record wegschrijven gaat met de put-instructie: Put #filehandle, recordnummer, RecordData Een record inlezen gebeurt met de get-instructie: Get #filehandle, recordnummer, RecordData Het bestand sluiten gaat weer met close: Close #filehandle Oefening: maak een nieuw project aan met de naam RandomAccess. Geef het weer een plaatsje in een aparte map op je diskette, of HD. Plaats de volgende objecten op je formulier: lblinfo Geef de objecten de volgende eigenschappen: Object Eigenschap Formulier Form1 Caption: Demo Random Access Knop Nieuw Name: cmdnieuw Caption: Nieuw Knop Invoeren Name: cmdinvoeren Caption: Invoeren Knop Annuleren Name: cmdannuleren Caption: Annuleren Knop Eerste Record Name: cmdeerste Caption: Eerste Record Knop Volgende Name: cmdvolgende Caption: Volgende Visual Basic door ir. C.Daniels 111
112 Knop Vorige Knop Laatste Record Label Naam Label Woonplaats Label Geboortedatum Textbox Naam Textbox Woonplaats Textbox Geboortedatum Label Info Name: cmdvorige Caption: Volgende Name: cmdlaatste Caption: Laatste Record Name: lblnaam Caption: Naam: Name: lblwoonplaats Caption: Woonplaats Name:lblGeboortedatum Caption: Gebortedatum Name: txtnaam Text: (leeg) Name: txtwoonplaats Text: (leeg) Name:txtGeboortedatum Text: (leeg) Name: lblinfo Caption: (leeg) BackColor: kies een aangepaste kleur Plaats de structuur van de record in een aparte bas-module: Kies Project Add Module: Kies Openen. In deze module plaatst u volgende code: Visual Basic door ir. C.Daniels 112
113 Een bas-module bevat code die in het ganse programma nuttig is. Het is niet verbonden aan een formulier. Modules kunt u ook inlassen in andere programma s, zodat de code niet opnieuw moet worden geschreven. Na het invoeren van deze module moet het project-venster er als hiernaast uitzien: Laten we nu de verschillende events programmeren, eerst het openen van het formulier: Private Sub Form_Load() Dim i As Integer RecordLengte = Len(Kennis) ' Vang eventuele fouten op On Error GoTo Foutmelding 'Open het bestand op de diskette Open "a:\adres.dat" For Random As #1 Len = RecordLengte 'Niet nodig, ter info in het Immediate Window Debug.Print "Bestand wordt geopend" Debug.Print "Lengte van het bestand in bytes: " + Str(LOF(1)) Debug.Print "Recordlengte: " + Str(RecordLengte) ' Bereken het aantal records in het bestand AantalRecords = LOF(1) / RecordLengte ' kijk of het misschien nog leeg is If AantalRecords = 0 Then lblinfo = "Het bestand is leeg. Klik op nieuw." cmdeerste.enabled = False cmdlaatste.enabled = False cmdvolgende.enabled = False cmdvorige.enabled = False cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False Else lblinfo = "Er zijn " + Str(AantalRecords) + " records aanwezig" cmdeerste.enabled = True cmdlaatste.enabled = True cmdvolgende.enabled = True cmdvorige.enabled = True cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False HuidigeRecord = 1 ToonRecord (1) End If Exit Sub Foutmelding: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description Visual Basic door ir. C.Daniels 113
114 Uitleg: Dim i As Integer Wordt alleen gebruikt voor de msgbox RecordLengte = Len(Kennis) Met de VB-functie len() bepalen we het aantal bytes nodig voor één record On Error GoTo Foutmelding Vang eventuele fouten op Open "a:\adres.dat" For Random As #1 Len = RecordLengte Open het bestand op de diskette, en we zetten de recordlengte gelijk aan de berekende lengte. Debug.Print "Bestand wordt geopend" Debug.Print "Lengte van het bestand in bytes: " + Str(LOF(1)) Debug.Print "Recordlengte: " + Str(RecordLengte) Deze lijnen zijn niet nodig maar in een testfase geven ze interessante info over het bestand in het Immediate-window. Als het programma naar behoren werkt, kunt u ze verwijderen. AantalRecords = LOF(1) / RecordLengte Bereken het aantal records in het bestand. De functie LOF(filehandle) geeft de lengte van het geopende bestand in bytes. If AantalRecords = 0 Then lblinfo = "Het bestand is leeg. Klik op nieuw." cmdeerste.enabled = False cmdlaatste.enabled = False cmdvolgende.enabled = False cmdvorige.enabled = False cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False Else lblinfo = "Er zijn " + Str(AantalRecords) + " records aanwezig" cmdeerste.enabled = True cmdlaatste.enabled = True cmdvolgende.enabled = True cmdvorige.enabled = True cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False HuidigeRecord = 1 ToonRecord (1) End If Exit Sub Visual Basic door ir. C.Daniels 114
115 In deze code wordt getest of het bestand nog leeg is ( AantalRecords = 0). Dan wordt alleen de knop Nieuw toegankelijk gemaakt, om een nieuwe record in te voeren. Ook de knoppen Invoeren en Annuleren worden zichtbaar. Als er al records aanwezig zijn, worden de knoppen Invoeren en Annuleren onzichtbaar gemaakt, en wordt het aantal aanwezige records getoond in het label Info. Foutmelding: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description fout. De foutafhandeling vermeld het foutnummer en de omschrijving van de opgetreden ToonRecord (1) Deze code roept een subprocedure aan, die de record vermeld tussen haakjes (hier 1) toont in de textboxen. Plaats de volgende code hiervoor vooraan in je programma. Dimensioneer ook de nodige variabelen zoals hieronder: Option Explicit Private Kennis As Adres ' bevat de data van één record Private RecordLengte As Integer ' de lengte van de record Private HuidigeRecord As Integer ' het nummer van de huidige record Private AantalRecords As Integer 'het aantal records in het bestand 'Toon record #n op het scherm Private Sub ToonRecord(n As Integer) Get #1, n, Kennis txtnaam = Kennis.Naam txtwoonplaats = Kennis.Woonplaats txtgeboortedatum = Format(Kennis.Geboortedatum, "dddd, d/mm/yyyy") lblinfo.caption = "Record #" + Str(n) Het event Nieuwe record invoeren: cmdnieuw_click Private Sub cmdnieuw_click() txtnaam.text = "" txtwoonplaats = "" txtgeboortedatum = "" cmdeerste.enabled = False cmdlaatste.enabled = False cmdvolgende.enabled = False cmdvorige.enabled = False cmdnieuw.enabled = False cmdinvoeren.visible = True cmdannuleren.visible = True Visual Basic door ir. C.Daniels 115
116 Uitleg: Als we de knop Nieuw aanklikken worden de tekstvelden leeggemaakt, zodat we nieuwe gegevens kunnen invullen. Tevens worden de knoppen Invoeren (om de gegevens in het bestand te schrijven) en Annuleren (om de bewerking te schrappen) zichtbaar gemaakt. Het event Invoeren: de gegevens wegschrijven in het bestand: Private Sub cmdinvoeren_click() Dim i As Integer Kennis.Naam = txtnaam.text Kennis.Woonplaats = txtwoonplaats.text If Not (IsDate(txtGeboortedatum.Text)) Then MsgBox txtgeboortedatum.text & " is geen geldige datum." Exit Sub Else Kennis.Geboortedatum = CDate(txtGeboortedatum.Text) End If If Trim(Kennis.Naam) = "" Or Trim(Kennis.Woonplaats) = "" Then i = MsgBox("U moet de 3 velden juist invullen", vbexclamation, "Foutieve Ingave") Exit Sub Else AantalRecords = AantalRecords + 1 On Error GoTo Foutmelding Put #1, AantalRecords, Kennis lblinfo = "Er zijn " + Str(AantalRecords) + " records aanwezig" cmdeerste.enabled = True cmdlaatste.enabled = True cmdvolgende.enabled = True cmdvorige.enabled = True cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False End If Exit Sub Foutmelding: MsgBox "Fout nr. " + Str(Err.Number) + " opgetreden!" + _ Chr(13) + Chr(10) + Err.Description Visual Basic door ir. C.Daniels 116
117 Uitleg: Kennis.Naam = txtnaam.text Kennis.Woonplaats = txtwoonplaats.text Plaats de teksten uit de velden Naam en Woonplaats in de record. If Not (IsDate(txtGeboortedatum.Text)) Then MsgBox txtgeboortedatum.text & " is geen geldige datum." Exit Sub Else Kennis.Geboortedatum = CDate(txtGeboortedatum.Text) End If Test of de ingevoerde datum correct is met de functie IsDate(). Deze geeft true voor een geldige datum, en false voor een foutieve datum. Bij een foutieve datum wordt de bewerking afgebroken met Exit Sub. If Trim(Kennis.Naam) = "" Or Trim(Kennis.Woonplaats) = "" Then i = MsgBox("U moet de 3 velden juist invullen", vbexclamation, "Foutieve Ingave") Exit Sub Else Test of de velden naam en woonplaats ingevuld zijn. De functie Trim() verwijdert onnodige spaties. AantalRecords = AantalRecords + 1 On Error GoTo Foutmelding Put #1, AantalRecords, Kennis lblinfo = "Er zijn " + Str(AantalRecords) + " records aanwezig" cmdeerste.enabled = True cmdlaatste.enabled = True cmdvolgende.enabled = True cmdvorige.enabled = True cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False Alles is goed ingevuld, het aantalrecords wordt dus met één verhoogd, en we kunnen de record wegschrijven met het put-commando. De knoppen Invoeren en Annuleren worden weer onzichtbaar gemaakt. Het event Annuleren (nieuwe gegevens invoeren annuleren): Private Sub cmdannuleren_click() lblinfo = "Er zijn " + Str(AantalRecords) + " records aanwezig" cmdeerste.enabled = True cmdlaatste.enabled = True cmdvolgende.enabled = True cmdvorige.enabled = True cmdnieuw.enabled = True cmdinvoeren.visible = False cmdannuleren.visible = False Visual Basic door ir. C.Daniels 117
118 Het event Eerste Record (toont de eerste record van het bestand): Private Sub cmdeerste_click() If AantalRecords = 0 Then MsgBox ("Het bestand is nog leeg! Voer gegevens in!") Else HuidigeRecord = 1 ToonRecord (HuidigeRecord) End If Het event Volgende Record: Private Sub cmdvolgende_click() If HuidigeRecord >= AantalRecords Then MsgBox ("Einde van het bestand bereikt!") Else HuidigeRecord = HuidigeRecord + 1 ToonRecord (HuidigeRecord) End If Het event Vorige Record: Private Sub cmdvorige_click() If HuidigeRecord <= 1 Then MsgBox ("Begin van het bestand bereikt!") Else HuidigeRecord = HuidigeRecord - 1 ToonRecord (HuidigeRecord) End If Het event Laatste Record: Private Sub cmdlaatste_click() If AantalRecords = 0 Then MsgBox ("Het bestand is nog leeg! Voer gegevens in!") Else HuidigeRecord = AantalRecords ToonRecord (HuidigeRecord) End If Het programma is klaar! Test het grondig uit! Test ook de foutafhandeling door de bijvoorbeeld de schrijfbeveiliging van uw diskette in te schakelen. Visual Basic door ir. C.Daniels 118
119 Oefening: Voeg een nieuwe knop Lijst in. Deze toont in een apart formulier een volledige lijst van de ingevoerde data. Tip:Plaats daarvoor een tekstveld in dit formulier, bijna zo groot als het formulier, en schrijf daarin alle records. Zet de eigenschappen van het tekstveld op Multiline en schakel de Scrollbars in. Oefening: Voeg een knop Wijzigen in, waarmee gegevens van een record kunnen gewijzigd worden. Enkele screenshots van het programma: Er werd ook reeds een knop Lijst bijgevoegd zoals in de oefening. Tevens werd de mogelijkheid voorzien een bestaande record te wijzigen met de knop Wijzigen. Het programma bij het opstarten als het bestand nog leeg is. Het programma toont record 3. Visual Basic door ir. C.Daniels 119
120 Een nieuwe record bij het invoeren met een verkeerde datum Het formulier met het overzicht van de data. En zo ziet de data eruit, gezien door het programma Debug. Merk op dat de records niet gescheiden zijn door Cr Lf. Ook tussen de velden van één record is er geen scheidingsteken. De datum wordt opgeslagen als een long getal van 4 bytes op het einde van iedere record. 1A27:0100 4A 61 6E E Jan VerstratenHa 1A27: C sselt 1A27: CE 6F o.. 1A27:0130 4B C 20 4F D Karel OvermaetGe 1A27:0140 6E 6B nk 1A27: C \.. 1A27: E 6E C-6C 65 6D A 6F Anne Willems Zo 1A27:0170 6E 68 6F E nhoven 1A27: F De data van één record Datum in long-formaat Visual Basic door ir. C.Daniels 120
121 I. LAB 1 - INLEIDING EN KENNISMAKING MET VB...2 A. WAAROM VISUAL BASIC?...2 B. HOE WERKT WINDOWS?...2 C. DE PROGRAMMEEROMGEVING VAN VISUAL BASIC: ONS EERSTE PROGRAMMA...3 D. DE EIGENSCHAPPEN VAN EEN OBJECT VERANDEREN...6 E. REAGEREN OP EEN EVENT...7 F. EEN POPUP-SCHERM...9 G. WAT IS EEN VARIABELE? Option Explicit Datatypes Declareren van variabelen...14 H. OEFENINGEN ) ) Oefening II. LAB 2 - VOORWAARDELIJKE PROGRAMMA-UITVOERING...16 III. IV. A. IF THEN ELSE INSTRUCTIE...16 A. EEN EENVOUDIG SPELLETJE: RAADSPELLETJE ) De opdracht ) Een random getal genereren ) Randomize ) Het event Load van een formulier ) De Or-operator...24 B. HET PROGRAMMA RAADSPELLETJE AFWERKEN ) Elseif...26 LAB 3 CONTAINERS SELECT - MENU...27 A. CONTAINERS ) Frame en Option Button ) Str-functie...29 B. DE SELECT CASE INTRUCTIE...31 C. EEN MENU...34 D. EEN NIEUW FORMULIER TOEVOEGEN...37 LAB 4 LUSINTSRUCTIES FOUTAFHANDELING - COMBOBOX...39 A. LUSINSTRUCTIES ) For Next ) While Wend ) Do Loop...43 B. FOUTAFHANDELING: ON ERROR...45 C. DE COMBOBOX...48 V. LAB 5 ARRAYS LINE...59 A. WAT ZIJN ARRAYS? ) Een array declareren ) Arrays gebruiken in het programma ) Sorteren met bubblesort...61 B. DE LINE-INSTRUCTIE...65 Visual Basic door ir. C.Daniels 121
122 VI. LAB 6 - STRINGS EN STRING-FUNCTIES...75 A. WAT ZIJN STRINGS?...75 B. STRING-FUNCTIES VAN VISUAL BASIC ) & ) Left(string, n) ) Right(string,n) ) Mid (string, s, n) ) Asc(karakter) ) Chr(getal) ) Str(getal) ) Val(tekst) ) InStr([getal],string1,string2) ) StrComp(String1,String2) ) Format...77 C. PROCEDURES EN FUNCTIES ) Sub-procedures ) Functie-procedures ) Private en Public...91 VII. LAB 7 - FUNCTIE-PROCEDURES...93 A. NIEUW PROJECT: DE CALCULATOR...93 B. BYVAL EN BYREF...98 VIII. WERKEN MET BESTANDEN A. SEQUENTIËLE BESTANDEN ) Een sequentieel bestand schrijven ) Een sequentieel bestand lezen ) Fouten opvangen ) De Append-optie B. RANDOM ACCESS BESTANDEN ) Een random access bestand beheren Visual Basic door ir. C.Daniels 122
Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie
Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes
6.2 VBA Syntax. Inleiding Visual Basic
6.2 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik op Maken Macro s en Code -
Datum, Tijd en Timer-object
IX. Datum, Tijd en Timer-object A. Hoe worden tijd en datum in VB aangeduid? Zowel datum als tijd worden als een getal met decimalen opgeslagen. Het gedeelte voor de komma geeft de datum aan, het gedeelte
6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.
6.3 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik in het groepsvak Macro op
Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren:
V. Arrays A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele
Hoofdstuk 9: Menu s toevoegen
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, maart 2005 Hoofdstuk 9: Menu s toevoegen 9.0 Leerdoel
Hoofdstuk 2: Werken met variabelen
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, februari 2001 Hoofdstuk 2: Werken met variabelen 2.0
Een eerste applicatie
Een eerste applicatie 2.1 Inleiding Programmeren in Visual Basic.NET doe je niet alleen door regels met code te schrijven. Je begint met het ontwerpen van een venster in de design mode met allerlei controls,
Hoofdstuk 2: Werken met variabelen
Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste
Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving.
Small Basic - werkomgeving 1/5 Werkomgeving Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving. Bovenaan vind je de werkbalk met opdrachtknoppen. Onder de werkbalk links kan je
Inhoudsopgave. www.ffxs.nl/diy-elektro - 2 - Visual Basic 6.0
Inhoudsopgave Inhoudsopgave...2 Inleiding...4 Project 1: Begroeting...4 Starten van Visual Basic...4 Programmeeromgeving...4 De werkbalk...4 Het formuliervenster...4 Het projectvenster...5 Het eigenschappenvenster...5
Hoofdstuk 1: Een eerste Visual Basic project
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, februari 2001 Hoofdstuk 1: Een eerste Visual Basic
Hoofdstuk 1: Een eerste Visual Basic project
Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk
Variabelen en statements in ActionScript
Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer
Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface.
Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface. Dit document is gebaseerd op Inventor 2011 & Windows XP. PS: Het kan zijn dat bepaalde zaken verschillen of
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) LES 4 In deze les gaan we een eenvoudig dobbelspelletje maken: Allereerst krijgt de speler de gelegenheid zijn/haar naam in te vullen en daarna op OK te klikken
II. ZELFGEDEFINIEERDE FUNCTIES
II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual
9.18 Macro s: oefeningen
9.18 Macro s: oefeningen Oefening 77.: Macro relatief opnemen Open een nieuwe map. Plaats uw invoercel ergens in de linker-bovenhoek van het blad (bijvoorbeeld in B2). Start het opnemen van een macro met
1 Werken met (keuze)lijstjes: de control listbox
1 Werken met (keuze)lijstjes: de control listbox 1.1 Keuzelijstjes: wat en waarom In een educatief programma wordt vaak gebruik gemaakt van keuzelijstjes. Enkele voorbeelden: * bij het opstarten van een
Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens
Info-books AL20 Toegepaste Informatica Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) Jos Gils Erik Goossens Hoofdstuk 6 Lusstructuren of iteraties 6.1 Probleemstelling Het gebeurt dikwijls
Windows is het meest gebruikte besturingssysteem ter wereld.
2 Windows, inleiding Windows is het meest gebruikte besturingssysteem ter wereld. 2.1 Windows, een eerste verkenning In het vorige hoofdstuk heb je gezien wat een besturingssysteem is. Nu ga je werken
Inleiding Visual Basic en VBA. Karel Nijs 2009/01
Inleiding Visual Basic en VBA Karel Nijs 2009/01 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Ms Excel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx
15. Tabellen. 1. wat rijen, kolommen en cellen zijn; 2. rijen en kolommen invoegen; 3. een tabel invoegen en weer verwijderen;
15. Tabellen Misschien heeft u al eens geprobeerd om gegevens in een aantal kolommen te plaatsen door gebruik te maken van spaties, kolommen of tabs. Dat verloopt goed totdat u gegevens wilt wijzigen of
Hoofdstuk 4: Nieuwe objecten
Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk
Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.
1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat
9.19 Macro s: oefeningen
9.19 Macro s: oefeningen Oefening 84.: Macro relatief opnemen Open een nieuwe map. Plaats uw invoercel ergens in de linker-bovenhoek van het blad (bijvoorbeeld in B2). Start het opnemen van een macro met
1) Een sequentieel bestand schrijven
VIII. Werken met Bestanden Al de informatie die u in het RAM-geheugen van een computer opslaat, verdwijnt als u het programma afsluit. Als u gegevens langer wil bewaren, moet u deze gegevens op een schijf
Programmeren: Visual Basic
PETERSTUYVESANT COLLEGE INFORMATICA 2009-2010 Programmeren: Visual Basic Algemene Kennis: 01. Programmeren Programmeren is het schrijven van een computerprogramma, een concrete verzameling instructies
www.seniorencomputerlessen.nl 199 Kruidvat
www.seniorencomputerlessen.nl 199 Kruidvat laatst gewijzigd 27 oktober 2012 Uw keuze voor het maken van een fotoboek met software van Kruidvat. Deze cursus bestaat uit 5 delen. Deel 1 Foto's voor uw fotoboek
Briefhoofd maken in Word. Handleiding van Helpmij.nl
Briefhoofd maken in Word Handleiding van Auteur: CorVerm Januari 2011 We gaan ons deze keer wagen aan het maken van een briefhoofd met invulformulier in Word. De bedoeling is dat we eerst een briefhoofd
Hoofdstuk 7: Werken met arrays
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel
www.digitalecomputercursus.nl 6. Reeksen
6. Reeksen Excel kan datums automatisch uitbreiden tot een reeks. Dit betekent dat u na het typen van een maand Excel de opdracht kan geven om de volgende maanden aan te vullen. Deze voorziening bespaart
Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho.
Automatisering voor Financiële Dienstverleners Werken met Queries en Merge Documenten For more information visit our website at www.pyrrho.com Date: Document Nr: 30 maart, 2007 UBizzMerge, Versie 4.0 Status:
BEGINNER JAVA Inhoudsopgave
Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire
Programmeerstructuren met App Inventor
Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement
Cursus Onderwijs en ICT. Programmeren met Visual Basic
Cursus Onderwijs en ICT Jaargang 2, deel 23 (versie 1.0 NL 2-7-2011) Programmeren met Visual Basic door Serge de Beer Inleiding In sommige gevallen biedt het aanbod op de softwaremarkt niet wat je zoekt.
WebQuest / WebKwestie. met Word 2003. www.webkwestie.nl
WebQuest / WebKwestie met Word 2003 www.webkwestie.nl Een WebQuest / WebKwestie maken in Word 2003 Belangrijk is dat alle pagina s en afbeeldingen die u gebruikt in één map worden opgeslagen. Download
Wat zijn de verschillen tussen SPSS 9 en SPSS 10?
Wat zijn de verschillen tussen SPSS 9 en SPSS 10? 1.1 De data-editor / het definiëren van variabelen 1.2 Het openen van bestanden 1.3 Output lezen 1.4 Mogelijke problemen 1.1.1 De data-editor Het grootste
Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF--- --- Reken om naar EURO---
3UREOHPHQRSORVVHQPHW9%$WRHSDVVLQJHQELMGHHO Naam. NR : Klas. PC : Datum. 23*$9( Hieronder vind je het algoritme om een bedrag in BEF om te rekenen naar EURO. Zet het algoritme om in programmacode. Noem
Handleiding bij de Booktest Generator
Handleiding bij de Booktest Generator Het programma voor het maken van toetsen bij boeken. (c) 2005/2009 Visiria Uitgeversmaatschappij Twisk Inleiding Onze dank voor het aanvragen van de Booktest Generator.
Voorzie iedere pagina van een titel. Je kan de titel uit het menu aanhouden. Een titel voeg je toe als volgt: 1. Klik op Element toevoegen.
Een Jimdo website Pagina s opvullen Je hebt je navigatie aangepast. Nu moet je ervoor zorgen dat de inhoud van de pagina s ook overeen komen met het menu. Om te beginnen wis je de inhoud die reeds op de
Snel aan de slag met BasisOnline en InstapInternet
Snel aan de slag met BasisOnline en InstapInternet Inloggen Surf naar www.instapinternet.nl of www.basisonline.nl. Vervolgens klikt u op de button Login links bovenin en vervolgens op Member Login. (Figuur
Programmeren: Visual Basic
PETERSTUYVESANT COLLEGE INFORMATICA 2009-2010 Programmeren: Visual Basic Document Afbaking 01. VERSCHILLENDE PROGRAMMEERTALEN 02. PROGRAMMEER PAKKETTEN 03. GUI 03.1 GUI ELEMENTEN 03.2 GUI EIGENSCHAPPEN
Blog-Het gebruik van variabelen in Excel VBA
Blog-Het gebruik van variabelen in Excel VBA Versie : 2012.01.31.1 (Blog http://www.reinder.eu) Dank voor de leuke reacties op het vorige blog en ook dank voor de kritische noot over het nivo dat de gebruiker
Mappen en bestanden. In dit hoofdstuk leert u het volgende:
Mappen en bestanden 1 Mappen en bestanden Een bestand is een verzamelnaam voor teksten, tekeningen of programma s. Alles wat op de vaste schijf van uw computer staat, is een bestand. Op een vaste schijf
HANDLEIDING RAPPORTEN
HANDLEIDING RAPPORTEN Versie 2.0 dd 13/10/2014 Versie 2.1 dd 03/04/2015 Inhoudstabel VAN START MET DE RAPPORTEN... 2 1 EEN TOETS TOEVOEGEN... 3 MOGELIJKHEID 1: PROEVEN PER KLAS... 3 MOGELIJKHEID 2: INVOEREN
HTA Software - Klachten Registratie Manager Gebruikershandleiding
HTA Software - Klachten Registratie Manager Gebruikershandleiding Inhoudsopgave Hoofdstuk 1: Opstarten en inloggen, overzicht startscherm, uitleg symbolen Hoofdstuk 2: aanmaken relaties Hoofdstuk 1: Opstarten
Derde Delphi Programma verkenning
Derde Delphi Programma verkenning In deze opdracht gaan we een aantal typische componenten en gegevenstypen van Windows en Delphi verkennen. We bouwen een eenvoudige rekenmachine en ondertussen leer je
Deel 1: PowerPoint Basis
Deel 1: PowerPoint Basis De mogelijkheden van PowerPoint als ondersteunend middel voor een gedifferentieerde begeleiding van leerlingen met beperkingen. CNO Universiteit Antwerpen 1 Deel 1 PowerPoint Basis
Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?
1 Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? Voordat je begint met programmeren, moet je Ruby installeren.
6. Tekst verwijderen en verplaatsen
6. Tekst verwijderen en verplaatsen In deze module leert u: een stuk tekst selecteren een stuk tekst verwijderen; acties ongedaan maken en opnieuw doen; een stuk tekst vervangen; een stuk tekst verplaatsen;
Hoofdstuk 6: Zelf functies maken
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 6: Zelf functies maken 6.0 Leerdoel
Handleiding Websitebeheer
Handleiding Websitebeheer Event Media Websites Copyright 2005, Event Media 1. Inleiding... 3 2. CMS-systeem... 3 2.1 Inloggen... 3 2.2 Basis-menu... 3 2.3 Bestaande pagina s aanpassen...3 2.4 Nieuwe pagina
Hoofdstuk 3: Keuzestructuren
Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk
Online c++ leren programmeren:
Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma
Beknopte handleiding Overhoor 4.0.3 NL (Efka-soft)
Beknopte handleiding Overhoor 4.0.3 NL (Efka-soft) 1. Programma algemeen 1.1 Downloaden en installeren 1.2 Opstarten 1.3 Afsluiten 1.4 Verwijderen 2. Overhoorbestanden gebruiken 2.1 Nieuw bestand maken
VAN HET PROGRAMMEREN. Inleiding
OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,
Hoofdstuk 4: Nieuwe objecten
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, maart 2001 Hoofdstuk 4: Nieuwe objecten 4.0 Leerdoel
Een pagina toevoegen en/of bewerken.
Een pagina toevoegen en/of bewerken. Na het inloggen in het CMS zie u het volgende: 2 3. Een klik op dit menu geeft een overzicht van alle pagina s waar de website op dat moment uit bestaat: 2. Een klik
Symbol for Windows BlissEditor
Handicom Symbol for Windows BlissEditor ( Versie 4 ) Handicom, 2006, Nederland Inhoud 1. Inleiding... 2 2. Schermopbouw van de Bliss Editor...3 2.1 Werkbalk... 3 2.2 Matrix... 4 2.3 Palet met basisvormen,
HOOFDSTUK 1. beginnen met excel
HOOFDSTUK 1 beginnen met excel Inleiding Voor het betere rekenwerk in de bedrijfseconomie worden spreadsheets (rekenbladen) gebruikt. In dit hoofdstuk leer je omgaan met algemene basisbewerkingen in Excel:
Declareren. Stap 1 Openstaande behandelingen
Declareren Stap 1 Openstaande behandelingen Bij het programma onderdeel Declaratie, Openstaande behandelingen (zorgverzekeraars) kunt u kijken welke welke behandelingen er nog niet gedeclareerd zijn. Druk
Na het inloggen met de gegevens die je hebt gekregen, verschijnt het overzichtsscherm zoals hieronder:
Inhoud van de website invoeren met de ContentPublisher De inhoud van websites kan worden ingevoerd en gewijzigd met behulp van een zogenaamd Content Management Systeem (CMS). De websites van Muismedia
196 CEWE *)zie einde les
www.sencomp.nl 196 CEWE *)zie einde les laatst gewijzigd 29 oktober 2012 Uw keuze voor het maken van een fotoboek met CEWE. Deze cursus bestaat uit 5 delen.indien u gekozen heeft voor Hema lees Hemafotoboek
Met dit programma kunt u fotoalbums, collages, kalenders, posters en nog veel meer maken. Wij vertellen u graag hoe dat werkt.
Beste klant, Met dit programma kunt u fotoalbums, collages, kalenders, posters en nog veel meer maken. Wij vertellen u graag hoe dat werkt. Na de installatie ziet u dit icoon op uw bureaublad: staan. Ga
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) LES 3 De programma s die we in Les 1 en Les 2 gezien hebben, zagen er niet erg mooi uit. In deze les gaan we er onder andere naar kijken, hoe we de programma
Computer Club Bodegraven. 10-4-2012
1 8 Alvorens we etiketten kunnen afdrukken moet u beschikken over: 1. Programma Works 2. Vellen met etiketten; noteer merk en nummer, dat heeft u straks nodig. b.v. Rank Xerox, nr. 3R96298 (21 stuks/vel
Strings en string-functies
VI. Strings en string-functies A. Wat zijn strings? Strings zijn eigenlijk teksten. U kunt die bewaren in een stringvariabele. Een tekst bestaat uit karakters zoals letters, cijfers, leestekens, Een karakter
Handleiding Digitaal Aanvraagformulier
Handleiding Digitaal Aanvraagformulier Deze handleiding wil een summier overzicht geven van de installatieprocedure van het digitaal aanvraagformulier. De handleiding is bedoeld voor de al wat ervaren
P O W E R P O I N T - onderdeel van Microsoft Office 2000 pakket (nl) De Windows versies van Powerpoint kunnen onderling afwijken
P O W E R P O I N T - onderdeel van Microsoft Office 000 pakket (nl) De Windows versies van Powerpoint kunnen onderling afwijken DEEL I De zes basisstappen Met het programma Powerpoint kun je zelf een
QUESTI OPSTARTGIDS ALGEMENE INSTELLINGEN EN LVS
01 - WELKOM BIJ QUESTI Welkom bij Questi. Alvorens je opstart, willen we je graag attent maken op enkele zaken. Voor je op de knop inloggen klikt, bekijk je best even de algemene filmpjes onder de knop
1. Kennismaken met Calc
1. Kennismaken met Calc In deze module leert u: - het programma Calc starten. - de onderdelen van het programmavenster van Calc herkennen. - over het werkblad verplaatsen. - gegevens invoeren. - het programma
SNEL WERKEN MET EXCEL
SNEL WERKEN MET EXCEL 2013 Computertraining voor 50-plussers PC50plus computertrainingen Eikbosserweg 52 1214AK Hilversum tel: 035 6213701 [email protected] www.pc50plus.nl Snel werken met Excel C O M P
6. Absolute en relatieve celadressering
6. Absolute en relatieve celadressering In deze module leert u: - Wat absolute en relatieve celadressering is; - De relatieve celadressering toepassen; - De absolute celadressering toepassen; - De absolute
SNELLE INVOER MET EXCEL
SNELLE INVOER MET EXCEL Naam Nr Klas Datum Het is de bedoeling dat je de gegevens van een tabel op efficiënte wijze invoert, dat betekent: correct en snel! Microsoft Excel biedt verscheidene mogelijkheden
14. Opsomming & Nummering (lijsten)
14. Opsomming & Nummering (lijsten) Het is mogelijk om een alinea op te maken als een opsomming. De regels springen dan een beetje in en ze worden voorafgegaan door een streepje, bolletje of nummer. Hieronder
The Nanny Personeel. Lokaal inloggen
The Nanny Personeel Lokaal inloggen Inleiding Binnen uw organisatie wordt gebruik gemaakt van The Nanny Personeel. The Nanny Personeel is een webapplicatie. Echter, in tegenstelling tot de meeste websites,
1. Kennismaken met Impress
1. Kennismaken met Impress In deze module leert u: 1 Wat Impress is; 2 Impress starten; 3 Een nieuwe presentatie maken; 4 Instellingen van Impress wijzigen; 5 Opslaan en openen. 1 Wat is Impress? OpenOffice.org
Opdracht Informatica Tutorial Visual Basic
Opdracht Informatica Tutorial Visual Basic Opdracht door een scholier 2329 woorden 23 december 2008 3,8 18 keer beoordeeld Vak Informatica In deze tutorial ga ik jullie een beetje de basis van Visual Basic
Programmeren in Excel VBA. Karel Nijs 2010/09
Programmeren in Excel VBA Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen MsExcel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx
Programmeren onder RISC OS: de snelstart. in BBC-Basic
Programmeren onder RISC OS: de snelstart in BBC-Basic Programmeren in RISC OS: de snelstart De programma-directory Vensters maken Een eenvoudige foutprocedure Muis en toetsenbord Een icoon op de icoonbalk
Handleiding Joomla! Frontend, content en gallery. september 2014 versie 1.0
Handleiding Joomla! Frontend, content en gallery. september 2014 versie 1.0 1 Inhoudsopgave Toevoegen nieuw artikel, of wijzigen...3 Extra web-functionaliteit...4 toevoegen van een foto/plaatje...4 toevoegen
Bijlage Inlezen nieuwe tarieven per verzekeraar
! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer
Hoe maak ik een PowerPoint-presentatie?
Hoe maak ik een PowerPoint-presentatie? 1) Je opent PowerPoint met dit icoontje. Je komt op dit scherm: Hier in deze balk zie je in het klein welke dia s je allemaal hebt. Je kan de volgorde ook veranderen
Inleiding. Instellingen. Agendamodule
Inleiding Instellingen Agendamodule Inhoudsopgave 1. Starten in Omniwize 2 a) opstarten en inloggen 2 b) mijn profiel wijzigen (enkel nodig bij eerste gebruik) 2 2. Een kleine rondleiding door het programma
Ledenlijsten + etiketten maken
Ledenlijsten + etiketten maken Eerst wordt uitgelegd hoe je een ledenlijst (van alle clubleden of leden per lesjaar) kan opvragen en bewerken en nadien hoe je met deze lijst etiketten kan maken. De ledenlijst
Simon de schildpad. 2015 J van Weert 1
Programmeren met Simon Simon de schildpad 2015 J van Weert 1 Inleiding: Wat is programmeren eigenlijk? Een computer doet niets zonder een programma. Die programma s worden geschreven door mensen: programmeurs.
Parallelle Poort Aansturen Met Visual Basic
Parallelle Poort Aansturen Met Visual Basic 1. Waarom? (Voor Beginners) Er zijn geregeld vragen over hoe je nu eigenlijk een parallelle poort moet aansturen. Op het internet is heel wat te vinden, maar
Hoofdstuk 5: Functies voor getallen en teksten
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, maart 2001 Hoofdstuk 5: Functies voor getallen en teksten
Inhoud van de website invoeren met de ContentPublisher
Inhoud van de website invoeren met de ContentPublisher De inhoud van Muismedia websites wordt ingevoerd en gewijzigd met behulp van een zogenaamd Content Management Systeem (CMS): de ContentPublisher.
Windows 8, Windows 8.1, deel II
Windows 8, Windows 8.1, deel II Opstarten op bureaublad Daar we toch de gewoonte hebben om via het bureaublad te werken, is het misschien handig om de PC te laten opstarten op het bureaublad in plaats
Welkom bij Sitebuilder, een praktijksite maken in 5 stappen.
Welkom bij Sitebuilder, een praktijksite maken in 5 stappen. Wat is sitebuilder Site Builder is een uiterst gebruiksvriendelijk en zeer uitgebreid product waarmee u snel een eigen praktijkwebsite kunt
1 BUSINESS INTERNET SUPPORT
Versie 1 BUSINESS INTERNET SUPPORT Yoron Dot Net Stap voor stap Handleiding YORON DOT NET BEHEER V1.X Stap voor stap handleiding YORON Het Wielsem 10 s-hertogenbosch Inhoudsopgave Opstarten Yoron DotNet
Afdrukken in Calc Module 7
7. Afdrukken in Calc In deze module leert u een aantal opties die u kunt toepassen bij het afdrukken van Calc-bestanden. Achtereenvolgens worden behandeld: Afdrukken van werkbladen Marges Gedeeltelijk
www.digitalecomputercursus.nl 10. Voorbeeld berekeningen maken met Excel
10. Voorbeeld berekeningen maken met Excel In de komende hoofdstukken worden een aantal voorbeelden van berekeningen die gemaakt kunnen worden in Excel uitgelicht. U kunt deze berekeningen ook zodanig
INRICHTEN VAN DAXIS CLOUD
INRICHTEN VAN DAXIS CLOUD Dit is een handleiding over het inrichten van de Daxis Cloud, waarin enkele onderdelen voor het personaliseren worden behandeld. Inhoud 1. Inleiding... 2 2. De metro-omgeving...
Android apps met App Inventor 2 antwoorden
2014 Android apps met App Inventor 2 antwoorden F. Vonk versie 1 11-11-2014 inhoudsopgave Mollen Meppen... - 2 - Schrandere Scholier... - 15 - Meteoor... - 21 - Dit werk is gelicenseerd onder een Creative
Deel 7: PowerPoint. Presentaties gemakkelijker maken
Deel 7: PowerPoint Presentaties gemakkelijker maken De mogelijkheden van PowerPoint als ondersteunend middel voor een gedifferentieerde begeleiding van leerlingen met beperkingen. CNO Universiteit Antwerpen
TI-SMARTVIEW. Installeren op Windows PC
TI SmartView 1 TI-SMARTVIEW Installeren op Windows PC De licentie van de school voor TI-SmartView is tot nader bericht een single-user licentie, hetgeen betekent dat deze op één pc mag geïnstalleerd worden,
