Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 
  Antwoorden hoofdstuk 8      


1a. Bij de properties (= eigenschappen) van de command-button (klik eerst op de command-button, en ga dan naar het propertiesvenster) voer je bij Caption Geef het antwoord in.
b. Bij de properties van het formulier (klik eerst op een leeg gedeelte van het formulier, en ga dan naar het propertiesvenster) ga je naar BackColor. Als je daar achter klikt verschijnt er een pijltje. Daar klik je op, en klik dan op het tabblad Palette en kies de kleur zwart uit.
c. Dubbelklik op de command-button. Dan krijg je de bijbehorende code (de event-handler) in beeld.
Verander de regel:
If g2<>0 then Text6.text=Str(q) else Text6.text = " "
in:
If g2<>0 then Text6.text=Str(q) else Text6.text = "Sukkel, delen door nul is flauwe kul !"
d. Zet een command-button op het formulier, en vul in het propertiesvenster bij Caption Reset in.
Dubbelklik op de nieuwe command-button. Dan kun je de bijbehorende code (de event-handler) invoeren.
Voer in:
text1.text=""
text2.text=""
text3.text=""
text4.text=""
text5.text=""
text6.text=""
e. Bij de properties van het label (klik eerst op het label, en ga dan naar het propertiesvenster) voer je bij Caption Kleinste in.
Dubbelklik op de Bereken-button. Dan krijg je de bijbehorende code (de event-handler) in beeld.
Verwijder de regel met: if g2<>0 then q = g1 / g2
En verander de regel:
If g2<>0 then Text6.text=Str(q) else Text6.text = " "
in:
If g1 < g2 then Text6.text=Str(g1) else Text6.text = Str(g2)


2a. Maak eerst de interface.
Zet 5 tekstvenstertjes naast elkaar. Noem het eerste txtGetal1, zet in het tweede een x, noem het derde txtGetal2, zet in het vierde een =, en noem het vijfde txtUitkomst.
Zet daaronder een label, noem dat lblGoedzo, en maak dat bij de start onzichtbaar (zet in het propertiesvenster visible op false).

Dubbelklik op een leeg gedeelte van het formulier. Dan kun je de code invoeren, die bij de start van het formulier wordt uitgevoerd. Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Form_Load( ) 
    dim g1, g2 As Integer 
    Randomize
    g1 = Int (Rnd * 6) + 5
    txtGetal1.Text = Str(g1) 
    g2 = Int (Rnd * 6) + 5
    txtGetal2.Text = Str(g2) 
    txtUitkomst=""
End Sub
Dubbelklik dan het vijfde tekstvenster. Dan kun je de code invoeren, die wordt wordt uitgevoerd als je iets aan dat tekstvenster verandert.
Rechtsboven is automatisch Change verschenen, maar dat moeten we niet hebben: kies Keypress uit.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub txtUitkomst_KeyPress(KeyAscii As Integer)
  dim g1,g2,u As Integer
  If KeyAscii = 13 Then
   g1 = Val(txtGetal1.Text)
   g2 = Val(txtGetal2.Text)
   u = Val(txtUitkomst.Text)
   lblGoedzo.Visible = True
   If u = g1 * g2 Then
     lblGoedzo.Caption = "Goed zo !"
   Else
     lblGoedzo.Caption="Nee, het goede antwoord is "+Str(g1*g2)
   End If
  End If
End Sub
b. Maak eerst de interface.
Zet een command-button op het formulier, en zorg er voor dat het opschrift Geef een som wordt.
Zet daaronder 5 tekstvenstertjes naast elkaar. Noem het eerste txtGetal1, zet in het tweede een +, noem het derde txtGetal2, zet in het vierde een =, en noem het vijfde txtUitkomst.
Maak die 5 tekstvenstertjes bij de start onzichtbaar (zet in het propertiesvenster visible op false).
Zet daaronder een label, noem dat lblGoedzo, en maak dat bij de start onzichtbaar (zet in het propertiesvenster visible op false).

Dubbelklik dan op de command-button. Dan kun je de code invoeren, die bij het klikken op die knop wordt uitgevoerd. Voer dan het volgende in (de eerste en de laatste regel staan er al):
dim g1, g2 As Integer
Randomize
g1 = Int (Rnd * 11) + 20
txtGetal1.Text = Str(g1)
g2 = Int (Rnd * 11) + 20
txtGetal2.Text = Str(g2)
txtUitkomst=""

Dubbelklik dan het vijfde tekstvenster. Dan kun je de code invoeren, die wordt wordt uitgevoerd als je iets aan dat tekstvenster verandert.
Rechtsboven is automatisch Change verschenen, maar dat moeten we niet hebben: kies Keypress uit.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub txtUitkomst_KeyPress(KeyAscii As Integer)
  dim g1,g2,u As Integer
  If KeyAscii = 13 Then
   g1 = Val(txtGetal1.Text)
   g2 = Val(txtGetal2.Text)
   u = Val(txtUitkomst.Text)
   lblGoedzo.Visible = True
   If u = g1 + g2 Then
     lblGoedzo.Caption = "Goed zo !"
     txtGetal1.visible = false
     txtGetal2.visible = false
     Text1.visible = false
     Text2.visible = false
     txtUitkomst.visible = false
   Else
     lblGoedzo.Caption="Fout, nog eens"
     txtUitkomst.Text=""
   End If
  End If
End Sub
c. Maak eerst de interface, zoals beschreven bij de opgave.
Noem het tekstvenster, waarin het antwoord moet worden ingevoerd, txtAntwoord.
En noem het label, waar Goed of Fout op komt lblGoedzo, en maak dat bij de start onzichtbaar (zet in het propertiesvenster visible op false).

Dubbelklik dan op het antwoordvenster. Dan kun je de code invoeren, die wordt wordt uitgevoerd als je iets aan dat tekstvenster verandert.
Rechtsboven is automatisch Change verschenen, maar dat moeten we niet hebben: kies Keypress uit.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub txtAntwoord_KeyPress(KeyAscii As Integer)
  dim a as string As String
  If KeyAscii = 13 Then
   a = txtAntwoord.Text
   lblGoedzo.Visible = True
   If a = "table" Then
     lblGoedzo.Caption = "Goed zo !"
   Else
     lblGoedzo.Caption="Fout, het goede antwoord is table"
   End If
  End If
End Sub
d. Maak eerst de interface.
Zet 5 tekstvenstertjes naast elkaar. Noem het eerste txtGetal1, zet in het tweede een x, noem het derde txtGetal2, zet in het vierde een =, en noem het vijfde txtUitkomst.
Zet daaronder een label, noem dat lblGoedzo, en maak dat bij de start onzichtbaar (zet in het propertiesvenster visible op false).

Dubbelklik op een leeg gedeelte van het formulier. Dan kun je de code invoeren, die bij de start van het formulier wordt uitgevoerd. Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Form_Load( ) 
    dim g1, g2 As Integer 
    Randomize
    g1 = Int (Rnd * 6) + 5
    txtGetal1.Text = Str(g1) 
    g2 = Int (Rnd * 6) + 5
    txtGetal2.Text = Str(g2) 
    txtUitkomst = ""
    t1 = timer
End Sub
De variabele t1 moet nog gedeclareerd worden, maar dat moet niet de event-handler voor Form_Load want dan is het programma de begintijd weer vergeten zodra die event-handler is uitgevoerd.
Het moet een globale variabele zijn.
Klik daarom in het programmavenster linksboven op het pijltje, en kies dan de bovenste mogelijkheid uit: General. Rechtsboven staat dan "declarations" als het goed is. In dat programmagedeelte typ je in: Dim t1 As Single

Dubbelklik dan het vijfde tekstvenster. Dan kun je de code invoeren, die wordt wordt uitgevoerd als je iets aan dat tekstvenster verandert.
Rechtsboven is automatisch Change verschenen, maar dat moeten we niet hebben: kies Keypress uit.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub txtUitkomst_KeyPress(KeyAscii As Integer)
  dim g1,g2,u As Integer
  dim t2, t As Single
  If KeyAscii = 13 Then
   g1 = Val(txtGetal1.Text)
   g2 = Val(txtGetal2.Text)
   u = Val(txtUitkomst.Text)
   lblGoedzo.Visible = True
   t2 = timer
   t = t2 - t1
   If u = g1 * g2 Then
     lblGoedzo.Caption = "Goed zo, je tijd was " + str(t)
   Else
     lblGoedzo.Caption="Nee, nog eens"
     txtUitkomst.Text=""
   End If
  End If
End Sub


3a. Maak de interface zoals beschreven.
Noem de lisbox lstNamen, noem de textbox txtNaam, noem de voegtoe-button cmdVoegtoe, noem de wijzig-button cmdWijzig en noem de verwijder-button cmdVerwijder.
b. Dubbelklik op de listbox. Dan kun je de code invoeren, die wordt uitgevoerd als je op een item in de listbox klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub lisNamen_Click()
Dim n As Integer
Dim h As String

n = lstNamen.ListIndex
If n > = 0 Then
    h = lstNamen.List(n)
    txtNaam.text = h
Else
    MsgBox ("Je moet eerst een naam selecteren!")
End If

End Sub
c. Dubbelklik op de voegtoe-button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de de voegtoe-button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdVoegtoe_Click()
Dim n As Integer
Dim h As String

n = lstNamen.ListIndex
If n > = 0 Then
    h = txtNaam.text
    lstNamen.AddItem (h, n+1)
Else
    lstNamen.AddItem (h)
End If

End Sub
d. Dubbelklik op de wijzig-button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de de wijzig-button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdWijzig_Click()
Dim n As Integer
Dim h As String

n = lstNamen.ListIndex
If n > = 0 Then
    h = txtNaam.text
    lstNamen.RemoveItem(n)
    lstNamen.AddItem (h, n)
Else
    MsgBox ("Je moet eerst een naam selecteren!")
End If

End Sub
e. Dubbelklik op de verwijder-button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de de verwijder-button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdVerwijder_Click()
Dim n As Integer

n = lstNamen.ListIndex
If n > = 0 Then
    lstNamen.RemoveItem(n)
Else
    MsgBox ("Je moet eerst een naam selecteren!")
End If

End Sub
f. Dubbelklik op het tekstvenster. Dan kun je de code invoeren, die wordt wordt uitgevoerd als je iets aan dat tekstvenster verandert.
Rechtsboven is automatisch Change verschenen, maar dat moeten we niet hebben: kies Keypress uit.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub txtNaam_KeyPress(KeyAscii As Integer)
  dim h as string
  If KeyAscii = 13 Then
    h = txtNaam.text
    lstNamen.AddItem (h)
  End If

End Sub


4a. Maak de interface zoals beschreven.
We gaan er van uit dat het bestand PROEF.TXT in de map TESTMAP van de C-drive staat.
Noem de tekstvensters txtRegel1, txtRegel2 en txtRegel3, en noem de button cmdLees. Dubbelklik op de button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdLees_Click()
	Open "C:\TESTMAP\PROEF.TXT" for input as #1
	line input #1, regel
	txtRegel1.text = regel
	line input #1, regel
	txtRegel2.text = regel
	line input #1, regel
	txtRegel2.text = regel
	close #1
End Sub
b. Maak de interface zoals beschreven.
We gaan er van uit dat het bestand PROEF.TXT in de map TESTMAP van de C-drive staat.
Noem de listbox lstRegels, en noem de button cmdLees.
Dubbelklik op de button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdLees_Click()
	Open "C:\TESTMAP\PROEF.TXT" for input as #1
	line input #1, regel
	lstRegels.AddItem (regel)
	line input #1, regel
	lstRegels.AddItem (regel)
	line input #1, regel
	lstRegels.AddItem (regel)
	close #1
End Sub
c. Maak de interface zoals beschreven.
We gaan er van uit dat het bestand PROEF.TXT in de map TESTMAP van de C-drive staat.
Noem de listbox lstRegels, en noem de button cmdLees.
Noem de DriveListBox drive1, noem de DirListBox dir1 en noem de FileListBox file1.

Dubbelklik op de DriveListBox. Dan kun je de code invoeren, die wordt uitgevoerd als je op de DriveListBox klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Drive1_Change( ) Dir1.Path = Drive1.Drive File1.Path = Drive1.Drive End Sub

Dubbelklik op de DirListBox. Dan kun je de code invoeren, die wordt uitgevoerd als je op de DirListBox klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Dir1_Change( ) File1.Path = Dir1.Path End Sub

Dubbelklik op de button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdLees_Click()
	Dim naambestand As String
	naambestand = File1.Path + "\" + File1.Filename
	Open naambestand for input as #1
	While not eof(1)
	          line input #1, regel
	          lstRegels.AddItem (regel)
	wend
	close #1
End Sub
d. Gewoon even doen.


5a. Maak eerst de interface.
Zet twee pictureboxen onder elkaar. Noem de bovenste Picture1 en de onderste Picture2.
Zet verder een timer op het formulier, noem die Timer1. En zet in het propertiesvenster Interval op 500

Dubbelklik op de timer. Dan kun je de code invoeren, die wordt uitgevoerd als de timer afloopt, dus steeds na 500 milliseconden.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Timer1_Timer()
	picture1.left = picture1.left + 100
	picture2.left = picture2.left + 200
End Sub
b. Maak eerst de interface.
Zet een picturebox op het formulier, en noem die Picture1.
Zet verder een timer op het formulier, noem die Timer1. En zet in het propertiesvenster Interval op 100

Dubbelklik op de timer. Dan kun je de code invoeren, die wordt uitgevoerd als de timer afloopt, dus steeds na 100 milliseconden.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Timer1_Timer()
	picture1.top = picture1.top + 10
End Sub
c. Maak eerst de interface.
Zet een picturebox op het formulier, en noem die Picture1.
Zet verder een timer op het formulier, noem die Timer1. En zet in het propertiesvenster Interval op 500

Dubbelklik op de timer. Dan kun je de code invoeren, die wordt uitgevoerd als de timer afloopt, dus steeds na 500 milliseconden.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Timer1_Timer()
	If picture1.visible = true Then
		picture1.visible = false
	Else
		picture1.visible = true
	Endif
End Sub
d. Maak eerst de interface.
Zet een picturebox op het formulier, en noem die Picture1.
Zet verder een timer op het formulier, noem die Timer1. En zet in het propertiesvenster Interval op 100

Dubbelklik op de timer. Dan kun je de code invoeren, die wordt uitgevoerd als de timer afloopt, dus steeds na 100 milliseconden.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub Timer1_Timer()
	h=h+0.1
	picture1.left = 2000 + 1000 * cos(h)
	picture1.top = 2000 + 1000 * sin(h)
End Sub
Declareer h als een globale variabele, dus onder General.
Zet daar: Dim h As Single


6a. Plaats eerst een extra button op het formulier, en noem die cmdSave.
Dubbelklik op de save-button. Dan kun je de code invoeren, die wordt uitgevoerd als je op de de save-button klikt.
Voer dan het volgende in (de eerste en de laatste regel staan er al):
Private Sub cmdSave_Click()
Dim n, i As Integer
	Open "C:\PROEF.TXT" for output as #1
	n = lstNamen.listcount
	for i=0 to n-1
		print #1, lstNamen.List(i)
	next i
	close #1
End Sub


7a.Text1.text = ""
Text2.text = ""
De programmaregels worden samen de event handler genoemd.
b. dim g1, g2 as integer
(of dim g1, g2 as single bij kommagetallen)
g1 = val (txtGetal1.text)
g2 = val (txtGetal2.text)
if (g1 > g2) then txtGrootste.text = str(g1) else txtGrootste.text = str(g2)
c. lblHallo.visible = false
d. Text1.enabled = false
e. dim g1, g2, a as integer
(of dim g1, g2, a as single bij kommagetallen)
g1 = val (txtGetal1.text)
g2 = val (txtGetal2.text)
a = val(txtAntwoord.text)
if (a = g1 + g2) then msgbox("Goed zo") else msgbox("Fout!")
f. Dim i As Integer

for i=1 to 100
        lstGetallen.AddItem Str(i)
Next i
g. Dim i As Integer

for i=1 to 26
        lstLetters.AddItem Chr(i+96)
Next i
h. Je moet een timer (= wekker) op het formulier plaatsen.
Bij de properties (= eigenschappen) van die timer moet je interval op bijvoorbeeld 100 zetten.
Dan voert hij de opdracht (die hieronder staat) om de 100 milliseconden uit.
Als opdracht voer je bijvoorbeeld in: lHallo.left = lHallo.left + 10
(Dubbelklik op de timer, dan krijg je het programmeervenster in beeld, en daar tik je het in)
i. dim w as string
Open "TEST.TXT" for output as #1
w = Text1.text
print #1, w
close #1
j. dim g as integer
(of dim g as single bij kommagetallen)
g = val (tGetal.text)
som = som + g
aantal = aantal + 1
txtSom.text = str(som)
txtAantal.text = str(aantal)
(Denk er om: som en aantal zijn globale variabelen. Die moet je niet in de procedure declareren, maar op de eerste regel van het programmavenster; zie vraag 7k).
k. Globale variabelen zijn variabelen, waarvan de waarde onthouden moet worden nadat de procedure is afgelopen. Die moet je niet in de procedure declareren, maar op de eerste regel van het programmavenster. (klik op General)