paravis
2 years ago
1 changed files with 0 additions and 537 deletions
@ -1,537 +0,0 @@ |
|||||||
#Region Header |
|
||||||
|
|
||||||
#include-once |
|
||||||
|
|
||||||
#CS UDF Info |
|
||||||
|
|
||||||
Name.........: GUICtrlOnHover.au3 |
|
||||||
Forum link...: http://www.autoitscript.com/forum/index.php?s=&showtopic=55120 |
|
||||||
Author.......: G.Sandler a.k.a MrCreatoR (CreatoR's Lab, www.creator-lab.ucoz.ru, www.autoit-script.ru) |
|
||||||
Remarks......: |
|
||||||
1) TreeView/ListView Items can not be set :(. |
|
||||||
2) When the window is not active, the hover/leave hover functions will still called, but not when the window is disabled. |
|
||||||
3) The hover/leave hover functions will be called even if the script is paused by such functions as MsgBox(). |
|
||||||
4) The $sHover_Func/$sLeaveHover_Func functions should not introduce significant delays in the main script, |
|
||||||
for example by calling functions like Sleep() or MsgBox(). |
|
||||||
5) IMPORTANT! |
|
||||||
A) Do not call _GUICtrl_OnHoverRegister inside $sHover_Func/$sLeaveHover_Func functions, it's not a good idea. |
|
||||||
|
|
||||||
B) This UDF registering WM_COMMAND and WM_LBUTTONDOWN window messages. |
|
||||||
Please ensure that those messages are not used after including this library, |
|
||||||
if they do, you will have to call __GUICtrl_SOH_WM_COMMAND and __GUICtrl_SOH_WM_LBUTTONDOWN inside those functions. Example: |
|
||||||
|
|
||||||
Func MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) |
|
||||||
__GUICtrl_SOH_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) |
|
||||||
... |
|
||||||
EndFunc |
|
||||||
|
|
||||||
|
|
||||||
*** Version History *** |
|
||||||
|
|
||||||
[v2.0] - [09.06.2010] |
|
||||||
* Fixed potential issue with calling $sPrimaryDownFunc function (first call was performed only after recieving WM_COMMAND message, wich is the control event). |
|
||||||
* Fixed an issue with blocking the OnHover function - the OnLeaveHover function was not called untill the OnHover function was blocked. |
|
||||||
* Fixed(?) (again) issue when the UDF is not working under 64-bit OS. |
|
||||||
* Optimized internal "__GUICtrl_SOH_Call" function to work faster when calling parameters functions. |
|
||||||
|
|
||||||
[v1.9] - [21.05.2010] |
|
||||||
* UDF library now compatible with AutoIt 3.3.6.1. |
|
||||||
* UDF library renamed to GUICtrlOnHover.au3. |
|
||||||
* Changed the main function name to _GUICtrl_OnHoverRegister, For backwards compatibility reasons, other (old) function names are still supported: |
|
||||||
_GUICtrl_SetOnHover, GUICtrl_SetOnHover, GUICtrlSetOnHover, _GUICtrlSetOnHover |
|
||||||
|
|
||||||
* Fixed(?) issue when the UDF is not working under 64-bit OS. |
|
||||||
* Global variables and internal functions renaming (for "cosmetic" reasons only). |
|
||||||
* UDF's code is more readable now. |
|
||||||
|
|
||||||
|
|
||||||
[v1.8] - [28.09.2009] |
|
||||||
* Few Global variables now have more unique name. |
|
||||||
* Fixed an issue with false calling of function on PrimaryDown event. |
|
||||||
I.e when the user clicks on other place (not on the hovered control) and drag the cursor to the control, the PrimaryDown function was called. |
|
||||||
* Due to (and as a result of) previous issue, the UDF now registering WM_COMMAND and WM_LBUTTONDOWN messages at first UDF call. |
|
||||||
|
|
||||||
|
|
||||||
[v1.7] - [07.07.2009] |
|
||||||
+ Added _GUICtrl_SetHoverOnBackWindow... |
|
||||||
Allows to set the hovering mode: |
|
||||||
$iSetBackWin = 1 (default) hovering process will proceed even when GUI is not active (in background). |
|
||||||
$iSetBackWin <> 1 hovering process will NOT proceed when GUI is not active. |
|
||||||
|
|
||||||
|
|
||||||
[v1.6] - [12.06.2009] |
|
||||||
* Now the UDF compatible with scripts (or other udfs) that uses OnAutoItExit function. |
|
||||||
i.e: "OnAutoItExit" function that was *previously* set by user will be called as well. |
|
||||||
|
|
||||||
+ Added new parameter $iKeepCall_Hover_Func. If this parameter = 1, |
|
||||||
then the $sHover_Func function *Will* be called constantly untill the control is no longer been hovered |
|
||||||
(default is 0, do not call the function constantly). |
|
||||||
+ Added new arguments to calling function... |
|
||||||
The OnPrimaryDown/Up function now can recieve one more argument: |
|
||||||
$iClickMode - Defines the Click mode (1 - Pressed, 2 - Released) |
|
||||||
|
|
||||||
* Changed return value - function will return 2 when $iCtrlID is redefined (ReSet, already exists in the controls list). |
|
||||||
* Fixed incorrect documentation parts. |
|
||||||
* Fixed "OnClick" handeling. When using multiple GUIs, the active gui was not recognized properly. |
|
||||||
* Fixed(?) bug with "dimension range exceeded" when trying to UnSet a Control. |
|
||||||
|
|
||||||
[v1.5] |
|
||||||
+ Added AutoIt 3.2.10.0+ support, but 3.2.8.1 or less is dropped :( (due to lack of native CallBack functions). |
|
||||||
+ Added Primary Down and Primary Up support. Helping to handle with the buttons pressing. |
|
||||||
+ Added new arguments to calling function... |
|
||||||
The OnHover function now can recieve two more arguments: |
|
||||||
$iHoverMode - Defines the hover mode (1 - Hover, 2 - Leaves Hovering) |
|
||||||
$hWnd_Hovered - Control Handle where the mouse is moved to (after hovering). |
|
||||||
|
|
||||||
* Almost all code of this UDF was rewritted. |
|
||||||
* Now the main function name is _GUICtrl_SetOnHover(), |
|
||||||
but for backwards compatibility reasons, other (old) function names are still supported. |
|
||||||
* Fixed bug with hovering controls in other apps. |
|
||||||
* Improvements in generaly, the UDF working more stable now. |
|
||||||
|
|
||||||
[v1.?] |
|
||||||
* Beta changes, see "Forum link" for more details. |
|
||||||
|
|
||||||
[v1.0] |
|
||||||
* First release. |
|
||||||
|
|
||||||
#CE |
|
||||||
|
|
||||||
#EndRegion Header |
|
||||||
|
|
||||||
#Region Internal Global Variables |
|
||||||
|
|
||||||
Global $a__GUICtrl_SOH_Ctrls[1][1] |
|
||||||
Global $a__GUICtrl_SOH_LastHoveredElements[2] = [-1, -1] |
|
||||||
Global $a__GUICtrl_SOH_LastHoveredElementsMark = -1 |
|
||||||
Global $h__GUICtrl_SOH_LastClickedElementMark = -1 |
|
||||||
Global $i__GUICtrl_SOH_CtrlsModified = 0 |
|
||||||
Global $i__GUICtrl_SOH_HoverOnBackWin = 1 |
|
||||||
Global $i__GUICtrl_SOH_LastPrimaryDownCtrlID = 0 |
|
||||||
|
|
||||||
Global $p__GUICtrl_SOH_TimerProc = 0 |
|
||||||
Global $i__GUICtrl_SOH_TimerID = 0 |
|
||||||
|
|
||||||
Global $s__GUICtrl_SOH_User32_Dll = @SystemDir & "\User32.dll" |
|
||||||
Global $s__GUICtrl_SOH_OnExitFunc = "" |
|
||||||
|
|
||||||
If @AutoItVersion < "3.3.2.0" Then |
|
||||||
$s__GUICtrl_SOH_OnExitFunc = Execute('Opt("OnExitFunc", "__GUICtrl_SOH_Exit")') |
|
||||||
Else |
|
||||||
Execute('OnAutoItExitRegister("__GUICtrl_SOH_Exit")') |
|
||||||
EndIf |
|
||||||
|
|
||||||
Global Const $n__GUICtrl_SOH_WM_COMMAND = 0x0111 |
|
||||||
Global Const $n__GUICtrl_SOH_WM_LBUTTONDOWN = 0x0201 |
|
||||||
|
|
||||||
#EndRegion Internal Global Variables |
|
||||||
|
|
||||||
#Region Public Functions |
|
||||||
|
|
||||||
; #FUNCTION# ==================================================================================================== |
|
||||||
; Name...........: _GUICtrl_OnHoverRegister |
|
||||||
; Description....: Registers a function to be called when GUI elements been hovered. |
|
||||||
; Syntax.........: _GUICtrl_OnHoverRegister($iCtrlID [, $sHover_Func="" [, $sLeaveHover_Func=-1 [, $sPrimaryDownFunc=-1 [, $sPrimaryUpFunc=-1 [, $iKeepCall_PrDn_Func=1 [, $iKeepCall_Hover_Func=0 ]]]]]]) |
|
||||||
; |
|
||||||
; Parameters.....: $iCtrlID - The Ctrl ID to set hovering for (can be a -1 as indication to the last item created). |
|
||||||
; |
|
||||||
; $sHover_Func - [Optional] Function to call when the mouse is hovering the control. |
|
||||||
; If this parameter passed as empty string (""), |
|
||||||
; then the specified CtrlID is UnSet from Hovering Handler list. |
|
||||||
; |
|
||||||
; $sLeaveHover_Func - [Optional] Function to call when the mouse is leaving hovering the control |
|
||||||
; (-1 no function used). |
|
||||||
; * For both parameters, $sHover_FuncName and $sLeaveHover_FuncName, |
|
||||||
; the specified function called with maximum 3 parameters: |
|
||||||
; $iCtrlID - CtrlID of hovered control. |
|
||||||
; $iHoverMode - Defines the hover mode (1 - Hover, 2 - Leaves Hovering). |
|
||||||
; $hWnd_Hovered - Control Handle where the mouse is moved to (after hovering). |
|
||||||
; |
|
||||||
; $sPrimaryDownFunc - [Optional] Function to call when Primary mouse button is *clicked* on the control. |
|
||||||
; (-1 -> function is not called). |
|
||||||
; |
|
||||||
; $sPrimaryUpFunc - [Optional] Function to call when Primary mouse button is *released* the control. |
|
||||||
; (-1 -> function is not called). |
|
||||||
; |
|
||||||
; * For both parameters, $sPrimaryDownFunc and $sPrimaryUpFunc, |
|
||||||
; the specified function called with maximum 2 parameters: |
|
||||||
; $iCtrlID - CtrlID of clicked control. |
|
||||||
; $iClickMode - Defines the click mode (1 - Pressed, 2 - Released). |
|
||||||
; |
|
||||||
; $iKeepCall_PrDn_Func - [Optional] If this parameter < 1, |
|
||||||
; then the $sPrimaryDownFunc function will *Not* be called constantly untill |
|
||||||
; the primary mouse button is released (default behaviour - $iKeepCall_PrDn_Func = 1). |
|
||||||
; |
|
||||||
; $iKeepCall_Hover_Func - [Optional] If this parameter = 1, |
|
||||||
; then the $sHover_Func function *Will* be called constantly untill |
|
||||||
; the control is no longer been hovered (default behaviour - $iKeepCall_Hover_Func = 0). |
|
||||||
; |
|
||||||
; Return values..: Success - Returns 1 if the function registered succesefully. |
|
||||||
; When $iCtrlID is redefined (ReSet, already exists in the controls list), the return value is 2. |
|
||||||
; Failure - Set @error to 1 and return 0 if $iCtrlID is not a GUI Control Identifier. |
|
||||||
; |
|
||||||
; Author.........: G.Sandler (a.k.a CreatoR), www.creator-lab.ucoz.ru, www.autoit-script.ru. |
|
||||||
; Modified.......: |
|
||||||
; Remarks........: 1) TreeView/ListView Items can not be set :(. |
|
||||||
; 2) When the window is not active, the hover/leave hover functions will still called, but not when the window is disabled. |
|
||||||
; 3) The hover/leave hover functions will be called even if the script is paused by such functions as MsgBox(). |
|
||||||
; 4) The $sHover_Func/$sLeaveHover_Func functions should not introduce significant delays in the main script, |
|
||||||
; for example by calling functions like Sleep() or MsgBox(). |
|
||||||
; 5) IMPORTANT! |
|
||||||
; A) Do not call _GUICtrl_OnHoverRegister inside $sHover_Func/$sLeaveHover_Func functions, it's not a good idea. |
|
||||||
; |
|
||||||
; B) This UDF registering WM_COMMAND and WM_LBUTTONDOWN window messages. |
|
||||||
; Please ensure that those messages are not used after including this library, |
|
||||||
; if they do, you will have to call __GUICtrl_SOH_WM_COMMAND and __GUICtrl_SOH_WM_LBUTTONDOWN inside those functions. Example: |
|
||||||
; |
|
||||||
; Func MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) |
|
||||||
; __GUICtrl_SOH_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) |
|
||||||
; ... |
|
||||||
; EndFunc |
|
||||||
; |
|
||||||
; Related........: |
|
||||||
; Link...........: http://www.autoitscript.com/forum/index.php?s=&showtopic=55120 |
|
||||||
; Example........: Yes. |
|
||||||
; =============================================================================================================== |
|
||||||
Func _GUICtrl_OnHoverRegister($iCtrlID, $sHover_Func="", $sLeaveHover_Func=-1, $sPrimaryDownFunc=-1, $sPrimaryUpFunc=-1, $iKeepCall_PrDn_Func=1, $iKeepCall_Hover_Func=0) |
|
||||||
Local $hCtrlID = GUICtrlGetHandle($iCtrlID) |
|
||||||
|
|
||||||
If Not $hCtrlID Then |
|
||||||
Return SetError(1, 0, 0) |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $p__GUICtrl_SOH_TimerProc = 0 Then |
|
||||||
$p__GUICtrl_SOH_TimerProc = DllCallbackRegister("__GUICtrl_SOH_CALLBACK", "none", "hwnd;int;uint_ptr;dword") |
|
||||||
$i__GUICtrl_SOH_TimerID = DllCall($s__GUICtrl_SOH_User32_Dll, "int", "SetTimer", _ |
|
||||||
"hwnd", 0, "uint_ptr", Round(TimerInit()), "uint", 30, "ptr", DllCallbackGetPtr($p__GUICtrl_SOH_TimerProc)) |
|
||||||
|
|
||||||
GUIRegisterMsg($n__GUICtrl_SOH_WM_COMMAND, "__GUICtrl_SOH_WM_COMMAND") |
|
||||||
GUIRegisterMsg($n__GUICtrl_SOH_WM_LBUTTONDOWN, "__GUICtrl_SOH_WM_LBUTTONDOWN") |
|
||||||
|
|
||||||
If IsArray($i__GUICtrl_SOH_TimerID) Then |
|
||||||
$i__GUICtrl_SOH_TimerID = $i__GUICtrl_SOH_TimerID[0] |
|
||||||
EndIf |
|
||||||
EndIf |
|
||||||
|
|
||||||
;UnSet Hovering for specified control (remove control id from hovering checking process) |
|
||||||
If $sHover_Func = "" And @NumParams <= 2 Then |
|
||||||
Local $a__GUICtrl_SOH_Ctrls_Tmp[1][1] |
|
||||||
Local $a__GUICtrl_SOH_Ctrls_Swap = $a__GUICtrl_SOH_Ctrls ;This one prevents a bug with "dimension range exceeded" |
|
||||||
|
|
||||||
For $i = 1 To $a__GUICtrl_SOH_Ctrls_Swap[0][0] |
|
||||||
If $hCtrlID <> $a__GUICtrl_SOH_Ctrls_Swap[$i][0] Then |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[0][0] += 1 |
|
||||||
ReDim $a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]+1][7] |
|
||||||
|
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][0] = $a__GUICtrl_SOH_Ctrls_Swap[$i][0] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][1] = $a__GUICtrl_SOH_Ctrls_Swap[$i][1] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][2] = $a__GUICtrl_SOH_Ctrls_Swap[$i][2] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][3] = $a__GUICtrl_SOH_Ctrls_Swap[$i][3] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][4] = $a__GUICtrl_SOH_Ctrls_Swap[$i][4] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][5] = $a__GUICtrl_SOH_Ctrls_Swap[$i][5] |
|
||||||
$a__GUICtrl_SOH_Ctrls_Tmp[$a__GUICtrl_SOH_Ctrls_Tmp[0][0]][6] = $a__GUICtrl_SOH_Ctrls_Swap[$i][6] |
|
||||||
EndIf |
|
||||||
Next |
|
||||||
|
|
||||||
If $a__GUICtrl_SOH_Ctrls_Tmp[0][0] < 1 Then |
|
||||||
__GUICtrl_SOH_ReleaseResources() ;Release the callbacks |
|
||||||
Else |
|
||||||
$i__GUICtrl_SOH_CtrlsModified = 1 |
|
||||||
$a__GUICtrl_SOH_Ctrls = $a__GUICtrl_SOH_Ctrls_Tmp |
|
||||||
EndIf |
|
||||||
|
|
||||||
Return 1 |
|
||||||
EndIf |
|
||||||
|
|
||||||
;Check if the hovering process already handle the passed CtrlID, if so, just assign new values (functions) |
|
||||||
For $i = 1 To $a__GUICtrl_SOH_Ctrls[0][0] |
|
||||||
If $hCtrlID = $a__GUICtrl_SOH_Ctrls[$i][0] Then |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][0] = $hCtrlID |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][1] = $sHover_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][2] = $sLeaveHover_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][3] = $sPrimaryDownFunc |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][4] = $sPrimaryUpFunc |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][5] = $iKeepCall_PrDn_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$i][6] = $iKeepCall_Hover_Func |
|
||||||
|
|
||||||
Return 2 |
|
||||||
EndIf |
|
||||||
Next |
|
||||||
|
|
||||||
$a__GUICtrl_SOH_Ctrls[0][0] += 1 |
|
||||||
ReDim $a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]+1][7] |
|
||||||
|
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][0] = $hCtrlID |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][1] = $sHover_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][2] = $sLeaveHover_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][3] = $sPrimaryDownFunc |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][4] = $sPrimaryUpFunc |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][5] = $iKeepCall_PrDn_Func |
|
||||||
$a__GUICtrl_SOH_Ctrls[$a__GUICtrl_SOH_Ctrls[0][0]][6] = $iKeepCall_Hover_Func |
|
||||||
|
|
||||||
Return 1 |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Set the hovering mode: |
|
||||||
; $iSetBackWin = 1 (default) hovering process will proceed even when GUI is not active (in background). |
|
||||||
; $iSetBackWin <> 1 hovering process will NOT proceed when GUI is not active. |
|
||||||
Func _GUICtrl_SetHoverOnBackWindow($iSetBackWin) |
|
||||||
$i__GUICtrl_SOH_HoverOnBackWin = Number($iSetBackWin = 1) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
#EndRegion Public Functions |
|
||||||
|
|
||||||
#Region Backwards Compatibility Functions |
|
||||||
|
|
||||||
;Backwards compatibility function #1 |
|
||||||
Func _GUICtrl_SetOnHover($iCtrlID, $sHover_Func="", $sLeaveHover_Func=-1, $sPrimaryDownFunc=-1, $sPrimaryUpFunc=-1, $iKeepCall_PrDn_Func=1, $iKeepCall_Hover_Func=0) |
|
||||||
_GUICtrl_OnHoverRegister($iCtrlID, $sHover_Func, $sLeaveHover_Func, $sPrimaryDownFunc, $sPrimaryUpFunc, $iKeepCall_PrDn_Func, $iKeepCall_Hover_Func) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Backwards compatibility function #2 |
|
||||||
Func GUICtrl_SetOnHover($iCtrlID, $sHover_Func="", $sLeaveHover_Func=-1, $sPrimaryDownFunc=-1, $sPrimaryUpFunc=-1, $iKeepCall_PrDn_Func=1, $iKeepCall_Hover_Func=0) |
|
||||||
_GUICtrl_OnHoverRegister($iCtrlID, $sHover_Func, $sLeaveHover_Func, $sPrimaryDownFunc, $sPrimaryUpFunc, $iKeepCall_PrDn_Func, $iKeepCall_Hover_Func) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Backwards compatibility function #3 |
|
||||||
Func GUICtrlSetOnHover($iCtrlID, $sHover_Func="", $sLeaveHover_Func=-1, $sPrimaryDownFunc=-1, $sPrimaryUpFunc=-1, $iKeepCall_PrDn_Func=1, $iKeepCall_Hover_Func=0) |
|
||||||
_GUICtrl_OnHoverRegister($iCtrlID, $sHover_Func, $sLeaveHover_Func, $sPrimaryDownFunc, $sPrimaryUpFunc, $iKeepCall_PrDn_Func, $iKeepCall_Hover_Func) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Backwards compatibility function #4 |
|
||||||
Func _GUICtrlSetOnHover($iCtrlID, $sHover_Func="", $sLeaveHover_Func=-1, $sPrimaryDownFunc=-1, $sPrimaryUpFunc=-1, $iKeepCall_PrDn_Func=1, $iKeepCall_Hover_Func=0) |
|
||||||
_GUICtrl_OnHoverRegister($iCtrlID, $sHover_Func, $sLeaveHover_Func, $sPrimaryDownFunc, $sPrimaryUpFunc, $iKeepCall_PrDn_Func, $iKeepCall_Hover_Func) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
#EndRegion Backwards Compatibility Functions |
|
||||||
|
|
||||||
#Region Internal Functions |
|
||||||
|
|
||||||
;CallBack function to handle the hovering process |
|
||||||
Func __GUICtrl_SOH_CALLBACK($hWnd, $uiMsg, $idEvent, $dwTime) |
|
||||||
$i__GUICtrl_SOH_CtrlsModified = 0 |
|
||||||
|
|
||||||
If $a__GUICtrl_SOH_Ctrls[0][0] < 1 Then |
|
||||||
Return |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $i__GUICtrl_SOH_HoverOnBackWin Then |
|
||||||
Local $iControl_Hovered = __GUICtrl_SOH_ControlGetHovered() |
|
||||||
Else |
|
||||||
Local $iControl_Hovered = GUIGetCursorInfo() |
|
||||||
|
|
||||||
If Not IsArray($iControl_Hovered) Then |
|
||||||
Return |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iControl_Hovered = GUICtrlGetHandle($iControl_Hovered[4]) |
|
||||||
EndIf |
|
||||||
|
|
||||||
Local $sCheck_LHE = $a__GUICtrl_SOH_LastHoveredElements[1] |
|
||||||
Local $iCheck_LCEM = $h__GUICtrl_SOH_LastClickedElementMark |
|
||||||
Local $iCtrlID |
|
||||||
|
|
||||||
;Leave Hovering Process and reset variables |
|
||||||
If Not $iControl_Hovered Or ($sCheck_LHE <> -1 And $iControl_Hovered <> $sCheck_LHE) Then |
|
||||||
If $a__GUICtrl_SOH_LastHoveredElementsMark = -1 Then |
|
||||||
Return |
|
||||||
EndIf |
|
||||||
|
|
||||||
Local $a__Tmp_GUICtrl_SOH_LastHoveredElements[2] = [$a__GUICtrl_SOH_LastHoveredElements[0], $a__GUICtrl_SOH_LastHoveredElements[1]] |
|
||||||
|
|
||||||
$a__GUICtrl_SOH_LastHoveredElements[0] = -1 |
|
||||||
$a__GUICtrl_SOH_LastHoveredElements[1] = -1 |
|
||||||
$a__GUICtrl_SOH_LastHoveredElementsMark = -1 |
|
||||||
$h__GUICtrl_SOH_LastClickedElementMark = -1 |
|
||||||
|
|
||||||
If $a__Tmp_GUICtrl_SOH_LastHoveredElements[0] <> -1 Then |
|
||||||
$iCtrlID = DllCall($s__GUICtrl_SOH_User32_Dll, "int", "GetDlgCtrlID", "hwnd", $a__Tmp_GUICtrl_SOH_LastHoveredElements[1]) |
|
||||||
|
|
||||||
If IsArray($iCtrlID) Then |
|
||||||
$iCtrlID = $iCtrlID[0] |
|
||||||
EndIf |
|
||||||
|
|
||||||
;2 is the indicator of OnLeavHover process |
|
||||||
__GUICtrl_SOH_Call($a__Tmp_GUICtrl_SOH_LastHoveredElements[0], $iCtrlID, 2, $iControl_Hovered) |
|
||||||
EndIf |
|
||||||
Else ;Hovering Process, Primary Down/Up handler, and set $a__GUICtrl_SOH_LastHoveredElements |
|
||||||
If $i__GUICtrl_SOH_CtrlsModified = 1 Then |
|
||||||
$i__GUICtrl_SOH_CtrlsModified = 0 |
|
||||||
Return |
|
||||||
EndIf |
|
||||||
|
|
||||||
Local $iUbound = UBound($a__GUICtrl_SOH_Ctrls)-1 |
|
||||||
|
|
||||||
For $i = 1 To $a__GUICtrl_SOH_Ctrls[0][0] |
|
||||||
If $i > $iUbound Then |
|
||||||
ExitLoop |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $a__GUICtrl_SOH_Ctrls[$i][0] = $iControl_Hovered Then |
|
||||||
$iCtrlID = DllCall($s__GUICtrl_SOH_User32_Dll, "int", "GetDlgCtrlID", "hwnd", $iControl_Hovered) |
|
||||||
|
|
||||||
If IsArray($iCtrlID) Then |
|
||||||
$iCtrlID = $iCtrlID[0] |
|
||||||
EndIf |
|
||||||
|
|
||||||
;Primary Down/Up handler |
|
||||||
If ($a__GUICtrl_SOH_Ctrls[$i][3] <> "" Or $a__GUICtrl_SOH_Ctrls[$i][4] <> "") And ($iCheck_LCEM = -1 Or $iCheck_LCEM = $iControl_Hovered) Then |
|
||||||
Local $aCursorInfo = 0 |
|
||||||
Local $hParent_Wnd = DllCall($s__GUICtrl_SOH_User32_Dll, "hwnd", "GetParent", "hwnd", $iControl_Hovered) |
|
||||||
|
|
||||||
If Not @error And IsArray($hParent_Wnd) Then |
|
||||||
$hParent_Wnd = $hParent_Wnd[0] |
|
||||||
$aCursorInfo = GUIGetCursorInfo($hParent_Wnd) |
|
||||||
Else |
|
||||||
$aCursorInfo = GUIGetCursorInfo() |
|
||||||
EndIf |
|
||||||
|
|
||||||
If IsArray($aCursorInfo) Then |
|
||||||
;Primary Down... |
|
||||||
;* First condition is to prevent function call when holding down m.button from other control |
|
||||||
;* Last condition is to Prevent/Allow multiple function call |
|
||||||
;(depending on $iKeepCall_PrDn_Func param). |
|
||||||
If ($i__GUICtrl_SOH_LastPrimaryDownCtrlID = $iControl_Hovered Or $i__GUICtrl_SOH_LastPrimaryDownCtrlID = 0) And WinActive($hParent_Wnd) And _ |
|
||||||
$aCursorInfo[2] = 1 And $a__GUICtrl_SOH_Ctrls[$i][3] <> -1 And _ |
|
||||||
(($a__GUICtrl_SOH_Ctrls[$i][5] < 1 And $iCheck_LCEM <> $iControl_Hovered) Or $a__GUICtrl_SOH_Ctrls[$i][5] > 0) Then |
|
||||||
|
|
||||||
;1 is the indicator of Primary*Down* event |
|
||||||
__GUICtrl_SOH_Call($a__GUICtrl_SOH_Ctrls[$i][3], $iCtrlID, 1) |
|
||||||
|
|
||||||
$h__GUICtrl_SOH_LastClickedElementMark = $iControl_Hovered |
|
||||||
;Primary Up |
|
||||||
ElseIf $aCursorInfo[2] = 0 And $a__GUICtrl_SOH_Ctrls[$i][4] <> -1 And $iCheck_LCEM = $iControl_Hovered Then |
|
||||||
;2 is the indicator of Primary*Up* event |
|
||||||
__GUICtrl_SOH_Call($a__GUICtrl_SOH_Ctrls[$i][4], $iCtrlID, 2) |
|
||||||
|
|
||||||
$h__GUICtrl_SOH_LastClickedElementMark = -1 |
|
||||||
EndIf |
|
||||||
EndIf |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $i__GUICtrl_SOH_CtrlsModified = 1 Then |
|
||||||
ExitLoop |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $a__GUICtrl_SOH_Ctrls[$i][6] < 1 And $a__GUICtrl_SOH_LastHoveredElementsMark = $a__GUICtrl_SOH_Ctrls[$i][0] Then |
|
||||||
ExitLoop |
|
||||||
Else |
|
||||||
$a__GUICtrl_SOH_LastHoveredElementsMark = $a__GUICtrl_SOH_Ctrls[$i][0] |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $a__GUICtrl_SOH_Ctrls[$i][2] <> -1 Then |
|
||||||
$a__GUICtrl_SOH_LastHoveredElements[0] = $a__GUICtrl_SOH_Ctrls[$i][2] |
|
||||||
$a__GUICtrl_SOH_LastHoveredElements[1] = $iControl_Hovered |
|
||||||
EndIf |
|
||||||
|
|
||||||
__GUICtrl_SOH_Call($a__GUICtrl_SOH_Ctrls[$i][1], $iCtrlID, 1, 0) ;1 is the indicator of OnHover process |
|
||||||
|
|
||||||
If $i__GUICtrl_SOH_CtrlsModified = 1 Then |
|
||||||
ExitLoop |
|
||||||
EndIf |
|
||||||
|
|
||||||
ExitLoop |
|
||||||
EndIf |
|
||||||
Next |
|
||||||
EndIf |
|
||||||
|
|
||||||
$i__GUICtrl_SOH_CtrlsModified = 0 |
|
||||||
EndFunc |
|
||||||
|
|
||||||
Func __GUICtrl_SOH_WM_COMMAND($hWndGUI, $MsgID, $WParam, $LParam) |
|
||||||
$i__GUICtrl_SOH_LastPrimaryDownCtrlID = $LParam |
|
||||||
EndFunc |
|
||||||
|
|
||||||
Func __GUICtrl_SOH_WM_LBUTTONDOWN($hWndGUI, $MsgID, $WParam, $LParam) |
|
||||||
$i__GUICtrl_SOH_LastPrimaryDownCtrlID = 0 |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Thanks to amel27 for that one!!! |
|
||||||
Func __GUICtrl_SOH_ControlGetHovered() |
|
||||||
Local $iOld_Opt_MCM = Opt("MouseCoordMode", 1) |
|
||||||
Local $tPoint = DllStructCreate("int X;int Y") |
|
||||||
Local $aMPos = MouseGetPos() |
|
||||||
|
|
||||||
DllStructSetData($tPoint, "x", $aMPos[0]) |
|
||||||
DllStructSetData($tPoint, "y", $aMPos[1]) |
|
||||||
|
|
||||||
Local $tPointCast = DllStructCreate("int64", DllStructGetPtr($tPoint)) |
|
||||||
Local $aRet = DllCall($s__GUICtrl_SOH_User32_Dll, "hwnd", "WindowFromPoint", "int64", DllStructGetData($tPointCast, 1)) |
|
||||||
|
|
||||||
Opt("MouseCoordMode", $iOld_Opt_MCM) |
|
||||||
|
|
||||||
If @error Then |
|
||||||
Return SetError(@error, @extended, 0) |
|
||||||
EndIf |
|
||||||
|
|
||||||
Return $aRet[0] |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Call() function wrapper |
|
||||||
Func __GUICtrl_SOH_Call($sFunction, $sParam1="", $sParam2="", $sParam3="", $sParam4="", $sParam5="") |
|
||||||
Local $iRet = Call($sFunction) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iRet = Call($sFunction, $sParam1) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iRet = Call($sFunction, $sParam1, $sParam2) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iRet = Call($sFunction, $sParam1, $sParam2, $sParam3) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iRet = Call($sFunction, $sParam1, $sParam2, $sParam3, $sParam4) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
$iRet = Call($sFunction, $sParam1, $sParam2, $sParam3, $sParam4, $sParam5) |
|
||||||
|
|
||||||
If @error <> 0xDEAD Then |
|
||||||
Return $iRet |
|
||||||
EndIf |
|
||||||
|
|
||||||
Return SetError(1, 0, 0) |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Release resources function |
|
||||||
Func __GUICtrl_SOH_ReleaseResources() |
|
||||||
If $p__GUICtrl_SOH_TimerProc > 0 Then |
|
||||||
DllCallbackFree($p__GUICtrl_SOH_TimerProc) |
|
||||||
EndIf |
|
||||||
|
|
||||||
If $i__GUICtrl_SOH_TimerID > 0 Then |
|
||||||
DllCall($s__GUICtrl_SOH_User32_Dll, "int", "KillTimer", "hwnd", 0, "uint_ptr", $i__GUICtrl_SOH_TimerID) |
|
||||||
EndIf |
|
||||||
|
|
||||||
GUIRegisterMsg($n__GUICtrl_SOH_WM_COMMAND, "") |
|
||||||
GUIRegisterMsg($n__GUICtrl_SOH_WM_LBUTTONDOWN, "") |
|
||||||
|
|
||||||
$p__GUICtrl_SOH_TimerProc = 0 |
|
||||||
$i__GUICtrl_SOH_TimerID = 0 |
|
||||||
EndFunc |
|
||||||
|
|
||||||
;Release the CallBack resources when exit |
|
||||||
Func __GUICtrl_SOH_Exit() |
|
||||||
If $s__GUICtrl_SOH_OnExitFunc <> "" Then |
|
||||||
Call($s__GUICtrl_SOH_OnExitFunc) |
|
||||||
EndIf |
|
||||||
|
|
||||||
__GUICtrl_SOH_ReleaseResources() |
|
||||||
EndFunc |
|
||||||
|
|
||||||
#EndRegion Internal Functions |
|
Loading…
Reference in new issue