2.4.15 UpDown

Назад Содержание Дальше

Данный вид элементов представляет собой текстовое поле, содержащее некоторое числовое значение и 2 кнопки, позволяющие увеличить/уменьшить значение данного поля. В функциональном плане данный класс элементов схож с классом Scale для слайдеров. У него также есть интервал допустимых значений ( извлекается свойством Range ), также есть свойства и методы, позволяющие извлечь числовое значение из поля ( свойство iValue ). Поскольку в основе данного типа элементов лежит текстовое поле, то имеется функциональность, аналогичная классу TextField, а именно метод SetText и свойство sValue. Для удобства работы допишем свойства sMinimum, sMaximum для текстовых полей, отвечающих за нижнюю/верхнюю границы. Также для самого поля udTheUpDown создадим свойство, которое принимает/возвращает числовое значение поля udTheUpDown. В файле TestApp.inc:

Code

	[+] window TestApp_Controls dUpDown
		[ ] tag "Up-Down"
		..........................................................................
		[ ] 
		[+] property iTheUpDown
			[+] VOID Set( INTEGER iValue )
				[ ] this.udTheUpDown.iValue = iValue
			[+] INTEGER Get()
				[ ] return this.udTheUpDown.iValue

 

Теперь приступим к написанию шага. Для начала реализуем ввод позиции и интервала ( с соответствующими проверками накорректность ввода ):

Code

		[ ] wTestApp.Control.UpDown.Pick()
		[-] with dUpDown
			[+] if( !.bExists )
				[ ] Error("No UpDown dialog appears")
			[ ] .iTheUpDown = 1
			[ ] .sMinimum = "1"
			[ ] .sMaximum = "5"
			[ ] .btnApply.Click()
			[ ] 
			[+] if( .iTheUpDown != 1 )
				[ ] Error("The Up Down field was entered incorrectly. Expected: ""1"" . "+
          "Actual: ""{.iTheUpDown}"" ")
			[+] if( .udTheUpDown.Range.iMin != 1 )
				[ ] Error("Minimum field was entered incorrectly. Expected: ""1"" . "+
          "Actual: ""{.udTheUpDown.Range.iMin}"" ")
			[+] if( .udTheUpDown.Range.iMax != 5 )
				[ ] Error("Maximum field was entered incorrectly. Expected: ""5"" . "+
          "Actual: ""{.udTheUpDown.Range.iMax}"" ")

 

Обратите внимание на используемое свойство Range. В отличие от класса Scale, класс UpDown для извлечения интервала использует тип SBRANGE с полями iMax, iMin. Это целочисленные поля, что не совсем правильно. Элементы управления типа UpDown могут использоваться для хранения действительных значений. Возможно это недочет отдельной версии, тем более что в Help-е свойство Range ссылается на тип SCLRANGE ( как и в классе Scale ), хотя реально это величина типа SBRANGE.

 

Идем дальше. Нужно проверить работу с граничными значениями поля The Up Down. Для этого нужно несколько раз нажать на кнопку увеличения значения. После этого нужно сделать то же самое для кнопки уменьшения значения. Данные кнопки и текстовое поле воспринимаются SilkTest-ом как единое целое и отдельно до кнопок не добраться. Нажатия данных кнопок осуществляются методами Increment и Decrement, которые соответственно увеличивают или уменьшают значение элемента класса UpDown. У этих методов есть параметр, который указывает на количество нажатий, которое нужно произвести на соответствующей кнопке. Таким образом, например, пятикратное нажатие на кнопку увеличения значения осуществляется вызовом Increment( 5 ). Реализуем необходимые действия:

Code

			[ ] .udTheUpDown.Increment(5)
			[+] if( .iTheUpDown != 5 )
				[ ] Error("The Up Down field contains incorrect value. Expected: ""5"" . "+
          "Actual: ""{.iTheUpDown}"" ")
			[ ] 
			[ ] .udTheUpDown.Decrement(5)
			[+] if( .iTheUpDown != 1 )
				[ ] Error("The Up Down field contains incorrect value. Expected: ""1"" . "+
          "Actual: ""{.iTheUpDown}"" ")

 

Осталось установить флаг в поле Wraparound и проверить, что поле The Up Down зацикливает увеличение/уменьшение значения. То есть если достигнуто максимальное значение, то при нажатии кнопки увеличения значения поле примет минимальное значение и наоборот, если достигнут минимум, то при нажатии на кнопку уменьшения значения поле примет максимум. После этой проверки нужно закрыть диалог. На этом шаг завершается. Код имеет вид:

Code

			[ ] .cbWraparound.bValue = TRUE
			[+] if( !.cbWraparound.bValue )
				[ ] Error("Unable to set WrapAround flag")
			[ ] 
			[ ] .iTheUpDown = 1
			[ ] .udTheUpDown.Decrement()
			[+] if( .iTheUpDown != 5 )
				[ ] Error("The Up Down field contains incorrect value. Expected: ""5"" . "+
          "Actual: ""{.iTheUpDown}"" ")
			[ ] 
			[ ] 
			[ ] .iTheUpDown = 5
			[ ] .udTheUpDown.Increment()
			[+] if( .iTheUpDown != 1 )
				[ ] Error("The Up Down field contains incorrect value. Expected: ""1"" . "+
          "Actual: ""{.iTheUpDown}"" ")
			[ ] 
			[+] if( !.Exit() )
				[ ] Error("Unable to close Up Down dialog")

 


Назад Содержание Дальше