Что нового

Прозрачная картинка вместо кнопки

GreyWerewolf

То тут, то там...
Сообщения
23
Репутация
0
Пробовал делать так, но кнопка не прозрачная, вокруг неё есть границы, видимо из-за перевода в битмап. Есть другие варианты? Видел вариант создания картинки и потом обработки сообщений с помощью библиотеки GUICtrlSetOnHover, но она не подходит, т.к. вместе с GUICtrlSetOnEvent не работает, да и сама по себе у меня глючила :(

Мой вариант кода, но кнопка не прозрачная:

Код:
Global $StartButton = GUICtrlCreateButton("-", 225, 35, 60,23);Запуск
GUICtrlSetOnEvent($StartButton, "StartButton");
$hImage_list=_GUIImageList_Create(63, 24)
_GDIPlus_Startup()
for $i=0 to 6
if $i=0 or $i>2 then $h_Image = _GDIPlus_BitmapCreateFromFile(@ScriptDir&"\datafiles\buttons\Go\button.png")
if $i=1 then $h_Image = _GDIPlus_BitmapCreateFromFile(@ScriptDir & '\datafiles\buttons\Go\button_hower.png')
if $i=2 then $h_Image = _GDIPlus_BitmapCreateFromFile(@ScriptDir & '\datafiles\buttons\Go\button_down.png')
$h_Bitmap =_GDIPlus_BitmapCreateHBITMAPFromBitmap($h_Image)
_GUIImageList_Add($hImage_list, $h_Bitmap)
_GDIPlus_ImageDispose($h_Image)
_WinAPI_DeleteObject($h_Bitmap)
Next
_GDIPlus_Shutdown()
_GUICtrlButton_SetImageList($StartButton,$hImage_list,0,-3,1)
 
Автор
GreyWerewolf

GreyWerewolf

То тут, то там...
Сообщения
23
Репутация
0
madmasles сказал(а):

Спасибо за ссылку, встречал её, но что то там у меня не ладилось - сегодня еще раз попробую с ней и отпишу.

Да, проблема в том, что действия, при нажатии на кнопку, не выполняются. Даже в примере.
Кроме того, но это уже конкретно у меня в коде, кнопка почему то кликается только двойным нажатием мыши :suicide:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Не работает из-за брутальных изменений в 3.3.14.x. Либо используйте 3.3.12.x., либо скачайте обновленную версию.
 
Автор
GreyWerewolf

GreyWerewolf

То тут, то там...
Сообщения
23
Репутация
0
Yashied сказал(а):
Не работает из-за брутальных изменений в 3.3.14.x. Либо используйте 3.3.12.x., либо скачайте обновленную версию.
Даже любопытно, что за изменения такие)

Спасибо, проблема с действиями разрешилась :beer:
Но проблема с двойным кликом мышью осталась :tv_horror:

И сразу вопрос: можно ли будет в дальнейшем скрыть кнопки с интерфейса типа $GUI_HIDE, или только удаление->создание либо смена картинок на пустые?


PS. Было бы не плохо запилить обновленную версию Skin.au3 на офф сайт ;)


Нашел в чем проблема с двойным нажатием! У окна стоял стиль - $WS_EX_CONTROLPARENT! Проблема решена, всем сяп! :tv_happy:
 
Автор
GreyWerewolf

GreyWerewolf

То тут, то там...
Сообщения
23
Репутация
0
GreyWerewolf сказал(а):
И сразу вопрос: можно ли будет в дальнейшем скрыть кнопки с интерфейса типа $GUI_HIDE, или только удаление->создание либо смена картинок на пустые?

И сам же отвечу. Ввиду кучи глюков с перекрытием label(и активных, и скрытых, и неактивных) и наоборот, исчезанием при пересоздании кнопок, а так же исчезанием прозрачности, советую единственный безглючный(вроде как) вариант:

Код:
GUICtrlSetPos($Button[1],2250, 1400, 66, 25);скрываем интерфейс


Для того чтобы показать кнопку - возвращаем её на место создания.

OffTopic:
CreatoR сказал(а):

Я имел ввиду конкретно брутальные изменения, а не все :D Таки не все на библиотеку Yashied'a повлияли :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Основное изменение, которое повлияло на мою библиотеку - в 3.3.14.x. GUI не реагирует на сообщения от выключенных (GUI_DISABLE) элементов. Раньше можно было принудительно послать в окно, например, WM_COMMAND от выключенной кнопки, и обработчик по запросу GUIGetMsg() выдал бы ID этой кнопки, теперь обработчик проигнорирует это сообщение.
 

belbix

Новичок
Сообщения
9
Репутация
0
У меня последняя версия AutoIT и были проблемы (не распознавало нажатие), в обновленной версии первое нажатие распознает, а при установке _Skin_DisableButton($Button, 0) перестает слать сигнал нажатия на нее.
Мб я не так что то делаю? Как можно поставить неактивный скин на кнопку без исключения ее из GUI?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Выкладывайте пример кода, т.к. в прилагаемом примере все прекрасно работает при моделировании вашей ситуации.
 

belbix

Новичок
Сообщения
9
Репутация
0
Пожалуйста :smile: Вроде ничего не забыл.



Код:
Func _InitInterface1()
	$win_x = 380
	$win_y = $res_max_y - 100
	Global $MainWindowNew = GUICreate("Окно", $win_x, $win_y, $res_max_x + 100, 0, -1,  BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
	GUICtrlCreatePic('img/background.bmp', 0, 0, $win_x, $win_y)
	GUICtrlSetState(-1, $GUI_DISABLE)
	Global $ButtonPlay = _Skin_AddButton($win_x / 2 - 50, 20, 100, 100, 'img/play.png', 'img/play.png', 'img/play.png', 'img/pause.png', 'img/pause.png', 1)
       _Skin_SetFocusRect($ButtonPlay, 0, 0, 100, 100)
       _Skin_EnableFocus(1)
       _Skin_EnableKBInput(1)

EndFunc   ;==>_InitInterface1



Func GlobalActive()
	ConsoleWrite("Нажата кнопка запуска" & @CRLF)
	If $global_active == 0 Then
		$global_active = 1
		_Skin_DisableButton($ButtonPlay, 1)
	Else
		$global_active = 0
		_Skin_DisableButton($ButtonPlay, 0)
	EndIf
EndFunc

While 1

	_Skin_Helper($MainWindowNew)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtonPlay
			GlobalActive()
	EndSwitch
WEnd


UPD.
мне бы просто изменить отображаемое изображение на кнопке, при переменной global_active равной нулю
мб удалять ее и создавать зановго с новым изображением? я сейчас так попробую, но имхо костыли

UPD2.
с пересозданием моя задача разрешилась :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
belbix сказал(а):
Вроде ничего не забыл.
Пример не рабочий. Выложите рабочий пример с картинками, чтобы я мог его вставить в SciTE и запустить.
 

belbix

Новичок
Сообщения
9
Репутация
0
Изображение положить в папку img

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

Global $global_active = 0
_InitInterface1()
Func _InitInterface1()
	$win_x = 380
	$win_y = 760 - 100
	Global $MainWindowNew = GUICreate("Окно", $win_x, $win_y, 1366 + 100, 0, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
	GUICtrlSetState(-1, $GUI_DISABLE)
	Global $ButtonPlay = _Skin_AddButton($win_x / 2 - 50, 20, 100, 100, 'img/play.png', 'img/play.png', 'img/play.png', 'img/pause.png', 'img/pause.png', 1)
	_Skin_SetFocusRect($ButtonPlay, 0, 0, 100, 100)
	_Skin_EnableFocus(1)
	_Skin_EnableKBInput(1)
	GUISetState()
EndFunc   ;==>_InitInterface1



Func GlobalActive()
	ConsoleWrite("Нажата кнопка запуска" & @CRLF)
	If $global_active == 0 Then
		$global_active = 1
		_Skin_DisableButton($ButtonPlay, 1)
	Else
		$global_active = 0
		_Skin_DisableButton($ButtonPlay, 0)
	EndIf
EndFunc   ;==>GlobalActive

While 1
	_Skin_Helper($MainWindowNew)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtonPlay
			GlobalActive()
	EndSwitch
WEnd
 

Вложения

  • pause.png
    pause.png
    29.3 КБ · Просмотры: 159
  • play.png
    play.png
    31 КБ · Просмотры: 161
  • Skin.au3
    31.6 КБ · Просмотры: 15

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <Skin.au3>

Global $global_active = 0
_InitInterface1()
Func _InitInterface1()
	$win_x = 380
	$win_y = 760 - 100
	Global $MainWindowNew = GUICreate("Окно", $win_x, $win_y, 1366 + 100, 0, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
	GUICtrlSetState(-1, $GUI_DISABLE)
	Global $ButtonPlay = _Skin_AddButton($win_x / 2 - 50, 20, 100, 100, 'img/play.png', 'img/play.png', 'img/play.png', '', 'img/play.png', 1)
	_Skin_SetFocusRect($ButtonPlay, 0, 0, 100, 100)
	_Skin_EnableFocus(1)
	_Skin_EnableKBInput(1)
	GUISetState()
EndFunc   ;==>_InitInterface1

Func GlobalActive()
	ConsoleWrite("Нажата кнопка запуска" & @CRLF)
	If $global_active = 0 Then
		$global_active = 1
		_Skin_SetButton($ButtonPlay, 'img/pause.png', 'img/pause.png', 'img/pause.png', '', 'img/pause.png', 1)
	Else
		$global_active = 0
		_Skin_SetButton($ButtonPlay, 'img/play.png', 'img/play.png', 'img/play.png', '', 'img/play.png', 1)
	EndIf
EndFunc   ;==>GlobalActive

While 1
	_Skin_Helper($MainWindowNew)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtonPlay
			GlobalActive()
	EndSwitch
WEnd
 

belbix

Новичок
Сообщения
9
Репутация
0
Я вот еще одну проблему не могу решить второй день - изображение при перерисовке мигает.
То есть если наводишь на кнопку оно постоянно в бликах белых.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
belbix сказал(а):
Я вот еще одну проблему не могу решить второй день - изображение при перерисовке мигает.
То есть если наводишь на кнопку оно постоянно в бликах белых.
Эта версия библиотеки написана под Aero. Если Aero отключен, то да, будет мигать. Вы можете использовать Skin v0.1, она основана на битмапах (v0.2 на иконках) и не будет мигать.


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

А вообще странно все это. Если программа использует скиновые элементы, какой-то дизайн и т.д., то какой смысл беспокоиться о том, как оно будет выглядеть вне Aero? Что не делай, а все равно вид будет отвратительный. И уж тем более все это выглядит как минимум странно, когда кто-то делает скин вне Aero.
 

belbix

Новичок
Сообщения
9
Репутация
0
Да у меня просто одна кнопочка большая, никаких наворотов :smile:
Надо просто чтоб она была одна когда прога активна, и другая когда не активна. Все очень скромно :smile:)
Сейчас попробуем 0.1

а вообще я не знаю, аэро у меня или нет, первый раз решил прогу красивой сделать, а тут столько проблем оказывается)
вот скрин как она у меня выглядит, окошки у меня не прозрачные
где то я помню была какая то настройка, мол убирает блики, а где - напрочь забыл, но там для текста вроде


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

Нашел! :IL_AutoIt_1: :beer:
GUICreate - exStyle - $WS_EX_COMPOSITED
вроде блики исчезли!


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

но при фоне показывает только фон :stars:
 

Вложения

  • _test.jpg
    _test.jpg
    25.7 КБ · Просмотры: 18
Верх