﻿id	summary	reporter	owner	description	type	status	milestone	component	version	severity	resolution	keywords	cc
704	_GUICtrlTab_ClickTab() function does not always click on tab button	Bowmore	Gary	"'''Enviroment:'''
WinXP Home SP3
AutoIt 3.2.12.1
AutoIt Beta 3.2.13.11

The coords of the centre of button are calculated in screen coords, but the click is preformed using whatever MouseCoordMode the user has set. The MouseCoordMode option needs setting to 1 and then resetting back to the original value before exiting the function. 

Code to demonstrate existing behaviour of existing function and that of the suggested fix below. GuiControlsItemClickTest.exe is a compiled version of the Sample GUI from the examples folder to give some tabs to click.
GuiControlsItemClickTest.exe is the SampleControls.au3 from the AutoIt\Examples folder compliled and saved as GuiControlsItemClickTest.exe

{{{
Opt(""MustDeclareVars"", 1)
Opt(""WinWaitDelay"", 100)
Opt(""WinTitleMatchMode"", 4)
Opt(""WinDetectHiddenText"", 1)
Opt(""MouseCoordMode"", 2)
Opt(""PixelCoordMode"", 2)

#include <GuiTab.au3>

Local $hWnd = 0 
Local $iCommandID = 0

Run(@ScriptDir & ""\GuiControlsItemClickTest.exe"")


For $ifunc = 0 To 1 
	;Display behaviour when mouse is not moved and then when mouse is moved
	For $iMove = 0 To 1
		;Use each of the MouseCoordMode in turn 
		For $iCoordMode = 0 To 2
			Opt(""MouseCoordMode"", $iCoordMode)
			WinActivate(""Sample GUI"")
			$hwnd = ControlGetHandle(""Sample GUI"","""",""SysTabControl321"")
			If $ifunc = 0 Then
				;click on tab 3 without moving mouse
				ToolTip(""Standard UDF Function '_GUICtrlTab_ClickTab()' MouseCoordMode = "" & $iCoordMode & @CRLF & ""Attempting To click on tab 'Three' mouse moving is "" & ($iMove <> 0), 20, 20)
				WinActivate(""Sample GUI"")
				_GUICtrlTab_ClickTab($hWnd, 2, ""left"", ($iMove <> 0), 1, 50)
				Sleep(3000)
				;click on tab 2 moving mouse
				ToolTip(""Standard UDF Function '_GUICtrlTab_ClickTab()' MouseCoordMode = "" & $iCoordMode & @CRLF & ""Attempting To click on tab 'Two' mouse moving is "" & ($iMove <> 0), 20, 20)
				WinActivate(""Sample GUI"")
				_GUICtrlTab_ClickTab($hWnd, 1, ""left"", ($iMove <> 0), 1, 50)
				Sleep(3000)
			Else
				;click on tab 3 without moving mouse
				ToolTip(""Modified UDF Function '_GUICtrlTab_ClickTab()' MouseCoordMode = "" & $iCoordMode & @CRLF & ""Attempting To click on tab 'Three' mouse moving is "" & ($iMove <> 0), 20, 20)
				WinActivate(""Sample GUI"")
				MOD_GUICtrlTab_ClickTab($hWnd, 2, ""left"", ($iMove <> 0), 1, 50)
				Sleep(3000)
				;click on tab 1 moving mouse
				ToolTip(""Modified UDF Function '_GUICtrlTab_ClickTab()' MouseCoordMode = "" & $iCoordMode & @CRLF & ""Attempting To click on tab 'One' mouse moving is "" & ($iMove <> 0), 20, 20)
				WinActivate(""Sample GUI"")
				MOD_GUICtrlTab_ClickTab($hWnd, 0, ""left"", ($iMove <> 0), 1, 50)
				Sleep(5000)
			EndIf
		Next
	Next
Next
Exit

Func MOD_GUICtrlTab_ClickTab($hWnd, $iIndex, $sButton = ""left"", $fMove = False, $iClicks = 1, $iSpeed = 1)
	Local $iX, $iY, $tPoint, $tRect, $iMode, $aPos
	If $Debug_TAB Then _GUICtrlTab_ValidateClassName($hWnd)
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	$tRect = _GUICtrlTab_GetItemRectEx($hWnd, $iIndex)
	$tPoint = _WinAPI_PointFromRect($tRect, True)
	$tPoint = _WinAPI_ClientToScreen($hWnd, $tPoint)
	_WinAPI_GetXYFromPoint($tPoint, $iX, $iY)
	;Switch to screen MouseCoordMode 
	$iMode = Opt(""MouseCoordMode"", 1)
	If Not $fMove Then
		$aPos = MouseGetPos()
		_WinAPI_ShowCursor(False)
		;_WinAPI_ShowCursor does not seem to work on XP so set mouse speed it instant 
		MouseClick($sButton, $iX, $iY, $iClicks, 0)
		MouseMove($aPos[0], $aPos[1], 0)
		Sleep(3000)
		_WinAPI_ShowCursor(True)
	Else
		MouseClick($sButton, $iX, $iY, $iClicks, $iSpeed)
	EndIf
	;Switch back to user MouseCoordMode 
	Opt(""MouseCoordMode"", $iMode)
EndFunc   ;==>_GUICtrlTab_ClickTab
}}}"	Bug	closed		Standard UDFs	3.2.12.1	None	No Bug	GuiTab.au3	
