Mark Dixon, SoCCE SOFT 131Page 1 19 – Procedure Parameters
Mark Dixon, SoCCE SOFT 131Page 2 Session Aims & Objectives Aims, to introduce: –passing parameters/arguments to procedures Objectives, after this week’s sessions, you should be able to: –use parameters in your programs to make procedures more flexible
Mark Dixon, SoCCE SOFT 131Page 3 Parameters in Event Procedures Provide us with information about event –e.g. if mouse was clicked where was it (x, and y co-ordinates) which mouse button was pressed which keyboard buttons were pressed ([Shift] / [Ctrl])
Mark Dixon, SoCCE SOFT 131Page 4 Example: Draw Option Explicit Private Sub picDraw_MouseDown( Button As Integer, Shift As Integer, X As Single, Y As Single ) If Button = 1 Then picDraw.PSet (X, Y) End If End Sub Private Sub picDraw_MouseMove( Button As Integer, Shift As Integer, X As Single, Y As Single ) If Button = 1 Then picDraw.Line -(X, Y) End If End Sub Parameters: –appear in the brackets of a procedure definition horizontal & vertical mouse co-ordinates mouse button keyboard [Shift] [Ctrl] keys
Mark Dixon, SoCCE SOFT 131Page 5 Parameters/Arguments (what) Sometimes our own procedures need information –Making a cup of tea: milk, and number of sugars Makes them more flexible Make cup of tea Milk Sugars
Mark Dixon, SoCCE SOFT 131Page 6 Parameters (how) Procedure Declaration –Formal parameters define name & type Procedure Call –actual parameters list values in order Option Explicit Dim res As Long Private Sub Calc(Num1 As Long, Num2 As long) res = Num1 * Num2 End Sub Private Sub btnCalc_Click() Calc 5, 2 Calc 11, 15 End Sub
Mark Dixon, SoCCE SOFT 131Page 7 Parameters (how)
Mark Dixon, SoCCE SOFT 131Page 8 Example: House v1 Option Explicit Private Sub btnDraw_Click() picHouse.Cls picHouse.Line (1000, 1000)-(2000, 1750),, B picHouse.Line (1000, 1000)-(1500, 750) picHouse.Line -(2000, 1000) End Sub House v1
Mark Dixon, SoCCE SOFT 131Page 9 Example: House v1 to v2 Option Explicit Private Sub btnDraw_Click() picHouse.Cls picHouse.Line (1000, 1000)-(2000, 1750),, B picHouse.Line (1000, 1000)-(1500, 750) picHouse.Line -(2000, 1000) End Sub Option Explicit Private Sub DrawHouse() picHouse.Line (1000, 1000)-(2000, 1750),, B picHouse.Line (1000, 1000)-(1500, 750) picHouse.Line -(2000, 1000) End Sub Private Sub btnDraw_Click() picHouse.Cls DrawHouse End Sub House v1House v2
Mark Dixon, SoCCE SOFT 131Page 10 Example: House v2 Option Explicit Private Sub DrawHouse() picHouse.Line (1000, 1000)-(2000, 1750),, B picHouse.Line (1000, 1000)-(1500, 750) picHouse.Line -(2000, 1000) End Sub Private Sub btnDraw_Click() picHouse.Cls DrawHouse End Sub House v2
Mark Dixon, SoCCE SOFT 131Page 11 Example: House v3 Option Explicit Private Sub DrawHouse(x As Single, y As Single) picHouse.Line (x, y)-(x , y + 750),, B picHouse.Line (x, y)-(x + 500, y - 250) picHouse.Line -(x , y) End Sub Private Sub btnDraw_Click() picHouse.Cls DrawHouse 1000, 1000 DrawHouse 2500, 1000 DrawHouse 4000, 1000 End Sub House v3
Mark Dixon, SoCCE SOFT 131Page 12 Questions: Parameters Given the following declaration: What will the following put in lblOutput? Sub thing(Num1 As Long, Num2 As Long, Num3 As Long) Dim tmpOutput As Long tmpOutput = (Num1 + Num2) * Num3 lblOutput.Caption = tmpOutput End Sub thing 2, 3, 6 thing 6, 3, 2 thing 20, 5,
Mark Dixon, SoCCE SOFT 131Page 13 Example: Till v1 Option Explicit Dim SubTotal As Double Dim Total As Double Private Sub btnEquals_Click() Dim price As Double Dim quantity As Double price = Val(Me.txtPrice.Text) quantity = Val(Me.txtQuantity.Text) SubTotal = price * quantity lblSubTotal.Caption = "£" & SubTotal End Sub Private Sub btnAdd_Click() Total = Total + SubTotal lblTotal.Caption = "£" & Total End Sub Private Sub btnUndo_Click() Total = Total - SubTotal lblTotal.Caption = "£" & Total End Sub Till v1
Mark Dixon, SoCCE SOFT 131Page 14 amount: Double Example: Till v2 Option Explicit Dim SubTotal As Double Dim Total As Double Private Sub TotalAdd(amount As Double) Total = Total + amount Me.lblTotal.Caption = "£" & Total End Sub Private Sub btnEquals_Click() Dim price As Double Dim quantity As Double price = Val(Me.txtPrice.Text) quantity = Val(Me.txtQuantity.Text) SubTotal = price * quantity lblSubTotal.Caption = "£" & SubTotal End Sub Private Sub btnAdd_Click() TotalAdd SubTotal End Sub Private Sub btnUndo_Click() TotalAdd -SubTotal End Sub TotalAdd Till v2
Mark Dixon, SoCCE SOFT 131Page 15 Example: Heart Rate v3 Option Explicit Dim HR(0 To 6) As Long Private Sub Form_Load() HR(0) = 134 HR(1) = 127 HR(2) = 139 HR(3) = 155 HR(4) = 143 HR(5) = 151 HR(6) = 141 End Sub Private Sub DrawHR() Dim i As Long picMain.Cls For i = 0 To 6 picMain.Line -(i * 500, HR(i) * 10) Next End Sub Private Sub btnDraw_Click() DrawHR End Sub
Mark Dixon, SoCCE SOFT 131Page 16 Example: Heart Rate v4 Option Explicit Dim HR(0 To 6) As Long Private Sub Form_Load() HR(0) = 134 HR(1) = 127 HR(2) = 139 HR(3) = 155 HR(4) = 143 HR(5) = 151 HR(6) = 141 End Sub Private Sub DrawHR(picTemp As PictureBox) Dim i As Long picTemp.Cls For i = 0 To 6 picTemp.Line -(i * 500, HR(i) * 10) Next End Sub Private Sub btnDraw_Click() DrawHR Me.picMain1 DrawHR Me.picMain2 End Sub
Mark Dixon, SoCCE SOFT 131Page 17 Tutorial Exercise: Draw LEARNING OBJECTIVE: –use parameters provided by event procedures Task 1: Get the Draw example (from the lecture) working. Task 2: Modify your code – allow the user to rub out (paint in the background colour) using the right mouse button. Task 3: Modify your code – allow the user to use a thicker line by holding down the [ctrl] button on the keyboard
Mark Dixon, SoCCE SOFT 131Page 18 Tutorial Exercise: House LEARNING OBJECTIVE: –use parameters in your own procedures, to make them more flexible (general purpose) Task 1: Get the House examples (versions 1, 2, and 3) from the lecture working. Task 2: Modify your code – add code that draws a door and a window for each house. Task 3: Modify your code – add code that draws 10 small houses. Hint: use a for loop (rather than simply copying the procedure calls)
Mark Dixon, SoCCE SOFT 131Page 19 Tutorial Exercise: Till LEARNING OBJECTIVE: –use parameters in your own procedures, to make them more flexible (general purpose) Task 1: Get the Till examples (versions 1 and 2) from the lecture working. Task 2: Modify your code – add code that clears all data when the clear button is clicked. Task 3: Modify your code – create a procedure to calculate and display the sub total.
Mark Dixon, SoCCE SOFT 131Page 20 Tutorial Exercise: Heart Rate LEARNING OBJECTIVE: –use parameters in your own procedures, to make them more flexible (general purpose) Task 1: Get the Heart Rate examples (versions 3 and 4) from the lecture working. Task 2: Modify your code – use additional parameters to control the horizontal and vertical sizes of the graphs (so that the two graphs can be different sizes).