Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Событие при наведении курсора на обьект, и наоборот (http://forum.oszone.net/showthread.php?t=147511)

crashtuak 09-08-2009 17:40 1189472

Событие при наведении курсора на обьект, и наоборот
 
Ну хотел реализовать событие про наведении курсора на объект, и событие при снятии курсора с объекта. Вот код:
Код:

#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 1189487

Плин, сам сделал, не думал что у меня хватит мозгов :):
Код:

#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 1189549

А решенной задачу Пушкин будет делать ?

crashtuak 09-08-2009 21:25 1189626

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

amel27 10-08-2009 03:30 1189813

Цитата:

Цитата crashtuak
универсальную функцию »

смотри CreatOR's GUICtrlSetOnHover_UDF с примером :)

crashtuak 10-08-2009 07:34 1189859

Вложений: 1
amel27, конешно спасибо, но я вот уже доделал свое. Там для нескончаемого (в разумных пределах :)) количества контролов.

crashtuak 10-08-2009 07:47 1189864

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


Время: 13:28.

Время: 13:28.
© OSzone.net 2001-