PDA

Показать полную графическую версию : [решено] Событие при наведении курсора на обьект, и наоборот


crashtuak
09-08-2009, 17:40
Ну хотел реализовать событие про наведении курсора на объект, и событие при снятии курсора с объекта. Вот код:
#include <GUIConstants.au3>


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 625, 443, 193, 125)
$Label1 = GUICtrlCreateLabel("Label1", 64, 48, 36, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $doo
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
$mousee = MouseEvent_OnEnter_OnLeave($Label1)
Switch $mousee
Case 1
MsgBox(0,"Title","Mouse entered")
Case 0
MsgBox(0,"Title","Mouse leaved")
EndSwitch

WEnd



Func MouseEvent_OnEnter_OnLeave($hwnd)
Local $array
Local $retvaluee
$array = GUIGetCursorInfo()
If $array[4] = $hwnd Then
$doo = 1
EndIf
If $doo = 1 Then
If $array[4] = $hwnd Then
$doo = 0
$retvaluee = 1
EndIf
EndIf
If $doo = 1 Then
If $array[4] <> $hwnd Then
$doo = 0
$retvaluee = 0
EndIf
EndIf
return $retvaluee
EndFunc
Получился такой себе мониторчик :), который показывает, курсор над нашим объектом, или нет :). Кто знает как сделать, чтоб события обрабатывались именно тогда, когда нужно?

crashtuak
09-08-2009, 18:02
Плин, сам сделал, не думал что у меня хватит мозгов :):
#include <GUIConstants.au3>


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 625, 443, 193, 125)
$Label1 = GUICtrlCreateLabel("Label1", 64, 48, 36, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $oncontrol
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
$mousee = MouseEvent_OnEnter_OnLeave($Label1)
Switch $mousee
Case 1
MsgBox(0,"Title","Mouse entered")
Case 0
MsgBox(0,"Title","Mouse leaved")
EndSwitch

WEnd



Func MouseEvent_OnEnter_OnLeave($hwnd)
Local $array
Local $retvaluee
$array = GUIGetCursorInfo()
If $array[4] = $hwnd and $oncontrol = 0 Then
$oncontrol = 1
$retvaluee = 1
ElseIf $array[4] <> $hwnd and $oncontrol = 1 Then
$retvaluee = 0
$oncontrol = 0
Else
$retvaluee = 3
EndIf
return $retvaluee
EndFunc
Работает вполне корректно, для моих целей (превращение пикчербокса в пнг кнопку :)) подойдет идеально.

Nik_rus
09-08-2009, 19:22
А решенной задачу Пушкин будет делать ?

crashtuak
09-08-2009, 21:25
В принципе, еще не до конца решено, надо еще сделать массив переменных $oncontrol для множества контролов, потомучто в примере работаю только с одним лейблом, а хочится иметь универсальную функцию :).

amel27
10-08-2009, 03:30
универсальную функцию »
смотри CreatOR's GUICtrlSetOnHover_UDF (http://www.autoitscript.com/forum/index.php?showtopic=55120) с примером :)

crashtuak
10-08-2009, 07:34
amel27, конешно спасибо, но я вот уже доделал свое. Там для нескончаемого (в разумных пределах :)) количества контролов.

crashtuak
10-08-2009, 07:47
amel27, Я в шоке, моя бедненькая функция по сравнению с CreatOR's GUICtrlSetOnHover_UDF выглядит как 2+2:)




© OSzone.net 2001-2012