Что нового

[Элементы GUI] изменение bg у Label при наведении мыши на этот элемент.

Poma_007

Новичок
Сообщения
24
Репутация
0
Собственно вот и вопрос, как изменить фон у GUICtrlCreateLabel, когда наводишь на него мышью? Искал что-то как с помощью стандартных функций изменить - не нашел.
 

running-frag

why me?
Сообщения
441
Репутация
60
ну ты красава
я пока писал ответ, он топик переименовал и содержание переписал :mad:
 
Автор
Poma_007

Poma_007

Новичок
Сообщения
24
Репутация
0
ну ты красава
я пока писал ответ, он топик переименовал и содержание переписал
Извиняюсь. Просто поиском не нашел, но когда создал топик, ниже увидел тему, в которой собственно и узнал: BitOR($SS_LEFT, $SS_CENTERIMAGE)

После этого появился другой вопрос, на который ответа не нашел.
 

Zaramot

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

 GUICreate("Form1", 245, 140, -1, -1, -1, $WS_EX_COMPOSITED)
$Label1 = GUICtrlCreateLabel("Hover me !!!!!!!!!!!!", 72, 48, 89, 17)
GUISetState()

Do
    If _ControlOnHover($Label1) = True Then
        GUICtrlSetBkColor($Label1, 0xFF0000)
    Else
        GUICtrlSetBkColor($Label1, 0xF4F4F4)
    EndIf
Until GUIGetMsg() = -3

Func _ControlOnHover($CtrlID)
	$CtrlHWnd = ControlGetHandle('[ACTIVE]', '', $CtrlID)
	Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
	If Not IsArray($aRet) Then Return SetError(1, 0, 0)

	If HWnd($aRet[0]) = $CtrlHWnd Then
		Return True
	Else
		Return False
	EndIf
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Код:
#include <GUIConstantsEx.au3>
#include <GUICtrlOnHover.au3>

$hForm = GUICreate("Hover Label", 250, 150)
$Label = GUICtrlCreateLabel("Hover me!", 70, 40, -1, 17)
_GUICtrl_OnHoverRegister(-1, "_Change_BG", "_UnChange_BG")

GUISetState()

While 1
	$nMsg = GUIGetMsg()

	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _Change_BG()
	GUICtrlSetBkColor($Label, 0xFF0000)
EndFunc

Func _UnChange_BG()
	GUICtrlSetBkColor($Label, -1)
EndFunc


GUICtrlOnHover - Обработка событии при наведении мышки
 

madmasles

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

Global $aLabel[6][2] = [[5]], $fLabel

$hGui = GUICreate('Test', 200, 200)
$nButton = GUICtrlCreateButton('Click me, please', 10, 10, 180, 30)
GUICtrlSetFont(-1, 14, 400)
For $i = 1 To $aLabel[0][0]
	$aLabel[$i][0] = GUICtrlCreateLabel('Test Label Num #' & $i, 10, 50 + 30 * ($i - 1), 180, 20, $SS_CENTER)
	GUICtrlSetBkColor(-1, 0x000000)
	GUICtrlSetColor(-1, 0xFFFFFF)
	GUICtrlSetFont(-1, 12, 400, 2)
Next
GUISetState()

While 1
	If $fLabel Then
		$aCursor = GUIGetCursorInfo()
		If Not @error Then
			For $i = 1 To $aLabel[0][0]
				If $aLabel[$i][0] = $aCursor[4] Then
					If Not $aLabel[$i][1] Then
						GUICtrlSetBkColor($aLabel[$i][0], 0xFFFFFF)
						GUICtrlSetColor($aLabel[$i][0], 0x000000)
						GUICtrlSetFont($aLabel[$i][0], 14, 600, 0)
						$aLabel[$i][1] = 1
					EndIf
				Else
					If $aLabel[$i][1] Then
						GUICtrlSetBkColor($aLabel[$i][0], 0x000000)
						GUICtrlSetColor($aLabel[$i][0], 0xFFFFFF)
						GUICtrlSetFont($aLabel[$i][0], 12, 400, 2)
						$aLabel[$i][1] = 0
					EndIf
				EndIf
			Next
		EndIf
	EndIf
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			$fLabel = Not $fLabel
			If $fLabel Then
				GUICtrlSetFont($nButton, 14, 600)
			Else
				GUICtrlSetFont($nButton, 14, 400)
			EndIf
	EndSwitch
WEnd

Zaramot,
Кликните в любом месте вне Вашего окна.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
OffTopic:
CreatoR [?]
Зачем так сложно?
Сижу, пиво пью. :beer:

У Вас закралась опечатка:не GUICtrlInHover.au3, а GUICtrlOnHover.au3.
Насчет сложности, ИМХО, мой код гораздо проще, чем GUICtrlOnHover.au3. :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
madmasles [?]
мой код гораздо проще, чем GUICtrlOnHover.au3
Да, но в конечном результате проще использовать её (библиотеку), нежели код в теле скрипта.
С таким же успехом, мы не должны использовать и другие библиотеки, которые сложнее чем сиюминутная реализация.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
CreatoR [?]
Да, но в конечном результате проще использовать её (библиотеку), нежели код в теле скрипта.
Конечно проще, тем более, что Ваша библиотека дает гораздо больше возможностей, спасибо Вам за классную UDF.
С таким же успехом, мы не должны использовать и другие библиотеки, которые сложнее чем сиюминутная реализация.
Вы, наверное, про пиво не прочитали. :smile:
Обязательно должны использовать и пользуемся, просто сейчас мне было интересно реализовать конкретную задачу штатными функциями, вроде получилось.
 
Автор
Poma_007

Poma_007

Новичок
Сообщения
24
Репутация
0
Всем спасибо.
 
Верх