Modify

Opened 15 years ago

Closed 15 years ago

#702 closed Bug (Duplicate)

_GUICtrlListView_ClickItem() function does not always click on List View item

Reported by: Bowmore Owned by: Gary
Milestone: Component: Standard UDFs
Version: 3.2.12.1 Severity: None
Keywords: GuiListView.au3 Cc:

Description

Enviroment:
Win XP Home SP3
AutoIt 3.2.12.1
AutoIt Beta 3.2.13.11

The coords of the centre of the item 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 <GuiListView.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","","SysListView321")
			If $ifunc = 0 Then
				;click on List View Item 1 without moving mouse
				ToolTip("Standard UDF Function '_GUICtrlListView_ClickItem()' MouseCoordMode = " & $iCoordMode & @CRLF & "Attempting To click on item 'A    One' mouse moving is " & ($iMove <> 0), 20, 20)
				WinActivate("Sample GUI")
				_GUICtrlListView_ClickItem($hWnd, 0, "left", ($iMove <> 0), 1, 50)
				Sleep(3000)
				;click on List View Item 2 moving mouse
				ToolTip("Standard UDF Function '_GUICtrlListView_ClickItem()' MouseCoordMode = " & $iCoordMode & @CRLF & "Attempting To click on item 'C    Three' mouse moving is " & ($iMove <> 0), 20, 20)
				WinActivate("Sample GUI")
				_GUICtrlListView_ClickItem($hWnd, 2, "left", ($iMove <> 0), 1, 50)
				Sleep(3000)
			Else
				;click on List View Item 3 without moving mouse
				ToolTip("Modified UDF Function '_GUICtrlListView_ClickItem()' MouseCoordMode = " & $iCoordMode & @CRLF & "Attempting To click on item 'A    One' mouse moving is " & ($iMove <> 0), 20, 20)
				WinActivate("Sample GUI")
				MOD_GUICtrlListView_ClickItem($hWnd, 0, "left", ($iMove <> 0), 1, 50)
				Sleep(3000)
				;click on List View Item 4 moving mouse
				ToolTip("Modified UDF Function '_GUICtrlListView_ClickItem()' MouseCoordMode = " & $iCoordMode & @CRLF & "Attempting To click on item 'B    Two' mouse moving is " & ($iMove <> 0), 20, 20)
				WinActivate("Sample GUI")
				MOD_GUICtrlListView_ClickItem($hWnd, 1, "left", ($iMove <> 0), 1, 50)
				Sleep(3000)
			EndIf
		Next
	Next
Next
Exit

Func MOD_GUICtrlListView_ClickItem($hWnd, $iIndex, $sButton = "left", $fMove = False, $iClicks = 1, $iSpeed = 1)
	If $Debug_LV Then _GUICtrlListView_ValidateClassName($hWnd)
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	Local $aPos, $tRect, $iX, $iY, $tPoint, $iMode

	_GUICtrlListView_EnsureVisible($hWnd, $iIndex, False)
	$tRect = _GUICtrlListView_GetItemRectEx($hWnd, $iIndex, $LVIR_LABEL)
	$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)
		_WinAPI_ShowCursor(True)
	Else
		MouseClick($sButton, $iX, $iY, $iClicks, $iSpeed)
	EndIf
	;Switch back to user MouseCoordMode 
	Opt("MouseCoordMode", $iMode)
EndFunc   ;==>_GUICtrlListView_ClickItem

Attachments (0)

Change History (2)

comment:1 Changed 15 years ago by Bowmore

Sorry I posted this one twice it is a duplicate of 701 please delete

comment:2 Changed 15 years ago by Gary

  • Resolution set to Duplicate
  • Status changed from new to closed

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as closed The owner will remain Gary.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.