Что нового

Кнопка с битмапом и текстом

saraconor

Новичок
Сообщения
404
Репутация
3
Битмап заслоняет надпись на кнопке, как вытащить надпись поверх битмапа, чтобы текст без фона был над картинкой?
Код:
$BTN_1 = GUICtrlCreateButton('TEST', 155, 41, 259, 33, $BS_BITMAP)

Ответ найден тут https://www.autoitscript.com/forum/topic/79428-button-with-bmp-and-text/
Но может кто-нибудь приведет пример проще скажем с элементами стиля? А то непонятно как такое использовать через ресурсы Wrapper.
Или как сделать так чтобы обычный текст (GUICtrlCreateLabel) лежал НАД кнопкой с битмапом, чтобы она его не загораживала?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
самодельная кнопка. то есть, снизу картинка, сверху прозрачная строка. забудь про обычные кнопки. все можно сделать одними картинками
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
joiner сказал(а):
самодельная кнопка. то есть, снизу картинка, сверху прозрачная строка. забудь про обычные кнопки. все можно сделать одними картинками
Не получается сделать текст без фона
Код:
$VAR_1 = GUICtrlCreateLabel("ТЕСТ", 155, 41, '' , '' , $ES_CENTER, $WS_EX_TRANSPARENT)

а нет, все впорядке $GUI_BKCOLOR_TRANSPARENT
Теперь возникает вопрос, как заставить срипт реагировать на картинку как на кнопку (изменение картинки при наведении и клике мышки) ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
можно через опрос событий guimsg, можно через wm_command . можно через wm_setcursor, эта функция отслеживает скольжение по окно и выдает id элементов. а также, регистрирует нажатие и отпуск клавиш мыши.

картинку нужно отключить. а строку сделать по размеру картинки. и будет регистрироваться клик по строке


Добавлено:
Сообщение автоматически объединено:

пример

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

$Form1 = GUICreate("Form1", 248, 153, 192, 124)
$Label1 = GUICtrlCreateLabel("Label1", 24, 24, 36, 17)
$Label2 = GUICtrlCreateLabel("Label2", 32, 88, 36, 17)
Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 128, 16, 97, 17)
Global $Radio1 = GUICtrlCreateRadio("Radio1", 136, 48, 81, 17)
GUISetState()


GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
	Switch GUIGetMsg()
		Case -3
			Exit

	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $ilParam
	Local $id = _WinAPI_LoWord($iwParam)
	Switch $id
		Case $Checkbox1, $Radio1
			ConsoleWrite(GUICtrlRead($id, 1) & ' - ' & 'клик по кнопке' & @LF)
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
	#forceref $hWnd, $Msg, $lParam

	Switch _WinAPI_HiWord($lParam)
		Case 514;регистрирует клики по статическим элементам pic, label
			ConsoleWrite(_WinAPI_GetDlgCtrlID($wParam) & ' - ' & 'клик по строке' & @LF)
		Case 512;регистрирует скольжение мыши(на какой элемент наведена)
			ConsoleWrite(_WinAPI_GetDlgCtrlID($wParam) & @LF)
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SETCURSOR
в итоге, можно даже без строк обойтись. картинки с надписями
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
joiner сказал(а):
можно через опрос событий guimsg, можно через wm_command . можно через wm_setcursor, эта функция отслеживает скольжение по окно и выдает id элементов. а также, регистрирует нажатие и отпуск клавиш мыши.

картинку нужно отключить. а строку сделать по размеру картинки. и будет регистрироваться клик по строке


Добавлено:
Сообщение автоматически объединено:

пример

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

$Form1 = GUICreate("Form1", 248, 153, 192, 124)
$Label1 = GUICtrlCreateLabel("Label1", 24, 24, 36, 17)
$Label2 = GUICtrlCreateLabel("Label2", 32, 88, 36, 17)
Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 128, 16, 97, 17)
Global $Radio1 = GUICtrlCreateRadio("Radio1", 136, 48, 81, 17)
GUISetState()


GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
	Switch GUIGetMsg()
		Case -3
			Exit

	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $ilParam
	Local $id = _WinAPI_LoWord($iwParam)
	Switch $id
		Case $Checkbox1, $Radio1
			ConsoleWrite(GUICtrlRead($id, 1) & ' - ' & 'клик по кнопке' & @LF)
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
	#forceref $hWnd, $Msg, $lParam

	Switch _WinAPI_HiWord($lParam)
		Case 514;регистрирует клики по статическим элементам pic, label
			ConsoleWrite(_WinAPI_GetDlgCtrlID($wParam) & ' - ' & 'клик по строке' & @LF)
		Case 512;регистрирует скольжение мыши(на какой элемент наведена)
			ConsoleWrite(_WinAPI_GetDlgCtrlID($wParam) & @LF)
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SETCURSOR
в итоге, можно даже без строк обойтись. картинки с надписями




Спасибо, все понятно.
 
Верх