Implementing optional and default parameters (QTP, VBScript)
Original date: 16 Dec 2008, 1:14pm
Service function
Public Function AssociateParameters(ByVal strParams)
Dim objDictionary, Values, strPair, Pair
Dim intCount, i
strParams = Replace(strParams, "\,", Chr(176))
strParams = Replace(strParams, "\=", Chr(187))
Values = Split(strParams, ",")
intCount = UBound(Values)
Set objDictionary = CreateObject("Scripting.Dictionary")
For i=0 To intCount
strPair = Trim(Values(i))
Pair = Split(strPair, "=")
If UBound(Pair) = 1 Then
If Not objDictionary.Exists(Trim(Pair(0))) Then
objDictionary.Add Trim(Pair(0)), Replace(Replace(Trim(Pair(1)), Chr(176), ","), Chr(187), "=")
Else
objDictionary.Item(Trim(Pair(0))) = Replace(Replace(Trim(Pair(1)), Chr(176), ","), Chr(187), "=")
End If
End If
Next
Set AssociateParameters = objDictionary
End Function
Implementation
Public Function SetWindow(ByRef objWin, ByVal objParameter)
Dim boolRC
Dim sTypeName
Dim intSync, boolSync
Dim sWinState, intX, intY
'Verify parameters
sTypeName = TypeName (objParameter)
If sTypeName <> "Dictionary" Then
Set objParameter = CreateObject("Scripting.Dictionary")
End If
'--First optional parameter--
'Sync
If objParameter.Exists("p.sync") Then
boolSync = TRUE
intSync = CInt(objParameter.Item("p.sync"))
If intSync <= 0 Then
intSync = 300
End If
Else
boolSync = FALSE
End If
If boolSync Then
objWin.WaitProperty "enabled", 1, intSync
End If
boolRC = objWin.Exist(0)
If Not boolRC Then
SetWindow = FALSE
Exit Function
End If
'Retrieve arguments
sWinState = UCase(objParameter.Item("state"))
'--HERE WE'RE DEFAULTING--
If sWinState = "" Then
sWinState = "FOCUS"
End If
Select Case UCase(sWinState)
Case "FOCUS"
objWin.Activate
Case "MIN"
objWin.Minimize
Case "MAX"
objWin.Maximize
objWin.Activate
Case "RESTORE"
objWin.Restore
objWin.Activate
Case "RESIZE"
'--More optional parameters--
intX = CInt(objParameter.Item("p.width"))
intY = CInt(objParameter.Item("p.height"))
objWin.Resize intX, intY
objWin.Activate
Case "MOVE"
'--More optional parameters--
intX = CInt(objParameter.Item("p.x"))
intY = CInt(objParameter.Item("p.y"))
objWin.Move intX, intY
objWin.Activate
Case Else
objWin.Activate
End Select
SetWindow = TRUE
End Function
Examples
'Just verify the window exists and set focus on
boolRC = SetWindow(Window("Test Window"), Nothing)
'Verify the window exists and maximize
boolRC = SetWindow(Window("Test Window"), AssociateParameters("state = MAX"))
'Verify the window exists and move
boolRC = SetWindow(Window("Test Window"), AssociateParameters("state = MOVE, p.x = 10, p.y = 10"))
PS. Later on I published an article describing this approach and how to use function overloading in VBScript.

