Что нового

Как задать действие кнопки при наведение на неё курсора

Black_Night

Новичок
Сообщения
67
Репутация
1
Как задать действие Label при наведение на неё курсора?

Вот такой у меня вопрос хосу создать и компонента лейбел анимированую кнопку..
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Пример:
Код:
#include <WindowsConstants.au3>

$GUI = GUICreate('Test', 300, 300, -1, -1, -1, $WS_EX_COMPOSITED)
$Label1 = GUICtrlCreateLabel('Hello world !!!', 50, 50)
GUISetState()

While 1
	$CurInfo = GUIGetCursorInfo()
	If IsArray($CurInfo) Then
		If $CurInfo[4] = $Label1 Then
			GUICtrlSetColor($Label1, Floor(Random()*0x1000000))
			Sleep(100)
		Else
			GUICtrlSetColor($Label1, 0x0)
		EndIf
	EndIf
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
http://autoit-script.ru/index.php/topic,149.0.html
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Black_Night,
Мой вариант.
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <StaticConstants.au3>

Global $aLabel[11][2] = [[10]], $iWl = 100, $iHl = 20, $iMl = 10

$hGui = GUICreate('Test Label', $iWl * 2, $aLabel[0][0] * ($iHl + $iMl) + $iMl)
For $i = 1 To $aLabel[0][0]
	$aLabel[$i][0] = GUICtrlCreateLabel('Label ' & $i, $iWl / 2, $iMl + ($i - 1) * ($iHl + $iMl), $iWl, $iHl, _
			BitOR($SS_CENTER, $SS_CENTERIMAGE))
	GUICtrlSetBkColor(-1, 0xFF0000)
	GUICtrlSetCursor(-1, 0)
Next
GUISetState()

While 1
	_Label($aLabel)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aLabel[1][0] To $aLabel[$aLabel[0][0]][0]
			GUICtrlSetBkColor($nMsg, 0x00FF00)
			MsgBox(64, 'Info', GUICtrlRead($nMsg), 0, $hGui)
	EndSwitch
WEnd

Func _Label(ByRef $a_Label)
	Local $a_Cur = GUIGetCursorInfo()
	If @error Then Return
	If $a_Cur[4] Then
		For $i = 1 To $a_Label[0][0]
			If $a_Cur[4] = $a_Label[$i][0] Then
				If Not $a_Label[$i][1] Then
					GUICtrlSetBkColor($a_Label[$i][0], 0x0000FF)
					$a_Label[$i][1] = 1
					_WinAPI_MessageBeep(1)
				EndIf
			Else
				If $a_Label[$i][1] Then
					GUICtrlSetBkColor($a_Label[$i][0], 0xFF0000)
					$a_Label[$i][1] = 0
				EndIf
			EndIf
		Next
	Else
		For $i = 1 To $a_Label[0][0]
			If $a_Label[$i][1] Then
				GUICtrlSetBkColor($a_Label[$i][0], 0xFF0000)
				$a_Label[$i][1] = 0
			EndIf
		Next
	EndIf
EndFunc   ;==>_Label
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Анимация размером шрифта

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Gui=GUICreate("Тест")

$btn1 = GUICtrlCreateButton("Первая", 25, 10, 90, 30)
GUICtrlSetFont(-1, 9)
$btn2 = GUICtrlCreateButton("Вторая", 25, 50, 90, 30)
GUICtrlSetFont(-1, 9)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
	
	; Обработка события кнопок
	Local Const $BCN_HOTITEMCHANGE = -1249
	Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
	Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code"), _
			$nID = DllStructGetData($tNMBHOTITEM, "IDFrom"), _
			$hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom"), _
			$dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")

	Switch $nNotifyCode
		Case $BCN_HOTITEMCHANGE ; Win XP и выше
			If BitAND($dwFlags, 0x10) = 0x10 Then ; наведена
				GUICtrlSetFont($nID,11, 700) ; а цвет то и нельзя менять, кнопка превращается в лэйбл какой-то
			ElseIf BitAND($dwFlags, 0x20) = 0x20 Then ; оставлена
				; GUICtrlSetFont($nID, -1) ; -1 - системный размер
				GUICtrlSetFont($nID, 9, 400)
			EndIf
	EndSwitch
    
    Return $GUI_RUNDEFMSG
EndFunc
 
Верх