2.4.13 Cursor

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

Данный объект полезен при извлечении координат мыши, реже – для определения состояния. В нашем тесткейсе нужно определить состояние при наведении на определенную область. Данный шаг рассматривает работу с курсором мыши вообще, но класс курсора играет тут ключевую роль. Откроем диалог курсора:

Code

		[+] with dCursors
			[+] if( !.bExists )
				[ ] Error("Cursor dialog didn't appear")

 

А далее, для всех 6-ти областей нужно выполнить наведение на область и проверить на тип курсора. Наведение на область осуществляется в 2 этапа: получение координат области и перемещение курсора по координатам. Первое осуществляется методом GetRect диалогового окна. Этот метод возвращает координаты клиентской области главного окна, по которым располагается нужный элемент. Результатом возвращается величина типа RECT, поэтому объявим соответствующую переменную: RECT rc в блок объявления переменных.

 

Для перемещения курсора по указанным координатам используется метод MoveMouse, определенный в AnyWin классе и доступный во всех типах окон. Проверить данные координаты можно методом GetPosition() класса Cursor. Но тут могут быть расхождения, так как методы GetRect и MoveMouse работают с относительными координатами окна, в то время как класс Cursor и его методы не привязаны к конкретному окну.

 

Проверяется тип курсора методом GetPosition() класса Cursor. Для данного тесткейса, нам нужно проверить, что на соответствующих областях данный метод вернет значения “POINTER” “INSERT” “DELAY” “CROSS” “UPARROW” “SIZEALL”. Реализаций данного участка шага может быть много, но я сделаю следующим образом: проинициализирую список строк содержащих пары “имя окна – ожидаемый тип курсора”. Элементы внутри пары разделены точкой с запятой. Каждый элемент пары извлекается функцией GetField, которая принимает параметры: исходная строка, строка-разделитель (в нашем случае точка с запятой), номер извлекаемого слова. Строка имени окна будет использована для наведения курсора, а строка ожидаемого типа курсора будет сравниваться с результатом Cursor.GetType(). Итак, код выглядит так:

Code

			[+] lsValue = {...}
				[ ] "Pointer;POINTER"
				[ ] "Insert;INSERT"
				[ ] "Delay;DELAY"
				[ ] "Cross;CROSS"
				[ ] "UpArrow;UPARROW"
				[ ] "Size;SIZEALL"
			[ ] 
			[+] for each sValue in lsValue
				[ ] rc = dCursors.@("cw{GetField(sValue,";",1)}").GetRect()
				[ ] .MoveMouse(rc.xPos + rc.xSize / 2 , rc.yPos + rc.ySize / 2 , TRUE )
				[+] if( Cursor.GetType() != Upper(GetField(sValue,";",2)) )
					[ ] Error("Cursor isn't a ""{GetField(sValue,";",2)}"". Actual state: ""{Cursor.GetType()}""", FALSE)
			[ ] 
			[+] if( !.Exit())
				[ ] Error("Unable to close Cursors dialog")

 

Вот так мы выполнили все действия данного шага.


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