Что нового

Работа с кнопками из <Skin.au3>

avtoIT

Новичок
Сообщения
94
Репутация
0
Возник такой вопрос, как мне установить текст на кнопки (при поддержке разных языков) или это можно сделать только изменив соответствующие картинки? (пытался поставить текст как label, но поверх кнопки он виден только пока не наводишься на кнопку (при установке атрибута $GUI_ONTOP))

А еще заметил, что при флаге на окне перетаскивания ($WS_EX_CONTROLPARENT) кнопка начинает работать только при двойном клике, как это исправить, если все же перемещение окна нужно?

И вопрос по Opt("GUIOnEventMode", 1), если я установлю его, то анимация кнопок будет утеряна, верно?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Если нужна надпись, то создаете еще одно изображение. Перетаскивание подложки обсуждалось у нас на форуме уже 100500 раз. Ищите. Если возникают какие-нибудь глюки, двойные клики и т.д., то выкладывайте рабочий пример. Какой режим GUI вы поставите не важно, главное обеспечить постоянный вызов _Skin_Helper(). Можете ее засунуть в AdlibRegister(), например.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Skin.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <WinAPIMisc.au3>

$Form1 = GUICreate("Form1", 300, 180, -1, -1, $WS_BORDER + $WS_POPUP, $WS_EX_CONTROLPARENT)
GUICtrlCreatePic (@ScriptDir & '\bck.bmp.png', 0, 0, 300, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button1 = _Skin_AddButton(90, 90, 120, 42, '1.png', '2.png', '3.png', '3.png', '3.png', 1)

$Combo1 = GUICtrlCreateCombo('English', 80, 55, 140, 25, $CBS_DROPDOWNLIST + $WS_VSCROLL)
GUICtrlSetData (-1, 'Русский')
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
_Skin_EnableFocus(1)
GUISetState(@SW_SHOW)

While 1
	_Skin_Helper($Form1)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			;SoundPlay ("zvyuk.wav")
			;_WinAPI_PlaySound ("zvvv.wav", $SND_ASYNC + $SND_NOWAIT)
			MsgBox (0, 0, GUICtrlRead($Combo1))
	EndSwitch
WEnd


Можно еще заметить, что при раскрытии комбобокса и при наведениее курсора на нижний вариант (русский), и при дальнейшем клике, кнопка реагирует как при нажатии на нее

Приложил псевдо кнопки + изображения
 

Вложения

  • 1.png
    1.png
    474 байт · Просмотры: 148
  • 2.png
    2.png
    440 байт · Просмотры: 145
  • 3.png
    3.png
    439 байт · Просмотры: 145
  • bck.bmp.png
    69.8 КБ · Просмотры: 17

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Расположите Combo и Button раздельно или отключайте кнопку на время показа списка.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
А от двойного нажатия на кнопку поможете избавиться? (раскомментировал флаг перетаскивания)

Текст на кнопку нужен был в основном для того, чтобы поддерживать разные языки, получается, что нельзя будет использовать простой .ini файл с фразами?
 

Yashied

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

Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Skin.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <WinAPIMisc.au3>

Global $Form1, $Button1, $Skin = True

$Form1 = GUICreate("Form1", 300, 180, -1, -1, $WS_BORDER + $WS_POPUP, 0);, $WS_EX_CONTROLPARENT)
GUICtrlCreatePic (@ScriptDir & '\bck.bmp.png', 0, 0, 300, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button1 = _Skin_AddButton(90, 90, 120, 42, '1.png', '2.png', '3.png', '3.png', '3.png', 1)

$Combo1 = GUICtrlCreateCombo('English', 80, 55, 140, 25, $CBS_DROPDOWNLIST + $WS_VSCROLL)
GUICtrlSetData (-1, 'Русский')
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
;_Skin_EnableFocus(1)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState(@SW_SHOW)

While 1
	If $Skin Then
		_Skin_Helper($Form1)
	EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            ;SoundPlay ("zvyuk.wav")
            ;_WinAPI_PlaySound ("zvvv.wav", $SND_ASYNC + $SND_NOWAIT)
            MsgBox (0, 0, GUICtrlRead($Combo1))
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)

	Local $Msg = BitShift($wParam, 16)

	Switch $hWnd
		Case $Form1
			Switch BitAND($wParam, 0xFFFF)
				Case $Combo1
					Switch $Msg
						Case $CBN_CLOSEUP
							$Skin = 1
						Case $CBN_DROPDOWN
							$Skin = 0
						Case Else

					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $Form1
            If $skData[0][3] > 0 Then
                Return $GUI_RUNDEFMSG
            EndIf
            Local $Info = GUIGetCursorInfo($Form1)
            If Not @Error Then
                Switch $Info[4]
                    Case $Button1
                        ; Nothing
                    Case Else
						Return $HTCAPTION
                EndSwitch
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST


avtoIT сказал(а):
Текст на кнопку нужен был в основном для того, чтобы поддерживать разные языки, получается, что нельзя будет использовать простой .ini файл с фразами?
Почему? Берите текст из .ini и рисуйте его на пустой кнопке с помощью GDI или GDI+. Затем обновляйте изображения кнопок.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
Ого, спасибо, сейчас буду разбираться с GDI+
 
Верх