Почему-то не подгружаются изображения в кнопку - кнопка в интерфейсе не видна. (использую последнюю версию Skin.au)
Кнопка появляется только если пути прямо прописать, а нужно обязательно чтобы изображения были в файле.
Странно, учитывая что остальные детали интерфейса нормально вставились.
А если путь прописать к файлу, то при наведении на кнопку она почемуто на долю секунды мерцает белым (в прошлой версии Skin.au такого не было) как от этого можно избавиться?
И пожалуйста приведите пример как можно сделать так чтобы изображение кнопки после нажатия и череды изменений (middle, down, up) изменилось на эту:
Дескать кнопка "зажата"
И еще момент, в приведенном примере (во вложении) прозрачный интерфейс почему-то пропадает через 5-7 секунд после запуска:
Кнопка появляется только если пути прямо прописать, а нужно обязательно чтобы изображения были в файле.
Странно, учитывая что остальные детали интерфейса нормально вставились.
А если путь прописать к файлу, то при наведении на кнопку она почемуто на долю секунды мерцает белым (в прошлой версии Skin.au такого не было) как от этого можно избавиться?
И пожалуйста приведите пример как можно сделать так чтобы изображение кнопки после нажатия и череды изменений (middle, down, up) изменилось на эту:
Код:
#Region Resources
#AutoIt3Wrapper_Res_File_Add=0.bmp, 2, 0
#AutoIt3Wrapper_Res_File_Add=1.bmp, 2, 1
#AutoIt3Wrapper_Res_File_Add=2.bmp, 2, 2
#AutoIt3Wrapper_Res_File_Add=3.bmp, 2, 3
#AutoIt3Wrapper_Res_File_Add=Form.png, PNG, FORM
#EndRegion Resources
#Include <APIConstants.au3>
#Include <GDIPlus.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
#Include <Skin.au3>
_GDIPlus_Startup()
$hPng = _LoadPNG('FORM')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hParent = GUICreate('', 178, 79, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hParent, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()
$hForm = GUICreate('', 443, 188, 45, 19, $WS_POPUP, $WS_EX_MDICHILD, $hParent)
GUICtrlCreatePic('', 0, 0, 160, 61)
GUICtrlSendMsg(-1, 0x0172, $IMAGE_BITMAP, _LoadBitmap(0))
GUICtrlSetState(-1, $GUI_DISABLE)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
$Button1 = _Skin_AddButton(5, 2, 30, 12,_LoadBitmap(1), _LoadBitmap(2), _LoadBitmap(3)) ;так не работает
;$Button1 = _Skin_AddButton(5, 2, 30, 12, '1.bmp', '2.bmp', '3.bmp') ;так работает
GUISetState(@SW_SHOW, $hParent)
GUISetState(@SW_SHOW, $hForm)
While 1
_Skin_Helper($hForm)
Switch GUIGetMsg()
Case $Button1
sleep(500)
exit
EndSwitch
WEnd
Func _LoadBitmap($iResource)
If Not @Compiled Then
Return _WinAPI_LoadImage(0, @ScriptDir & '\' & $iResource & '.bmp', 0, 0, 0, 0x0010)
Else
Return _WinAPI_LoadBitmap(_WinAPI_GetModuleHandle(0), $iResource)
EndIf
EndFunc ;==>_LoadBitmap
Func _LoadPNG($sResource)
If Not @Compiled Then
Return _GDIPlus_ImageLoadFromFile(@ScriptDir & '\' & $sResource & '.png')
Else
Return _LoadResImage(0, 'PNG', $sResource)
EndIf
EndFunc ;==>_LoadPNG
Func _LoadResImage($hInstance, $sType, $sName, $iLanguage = 0)
Local $hInfo, $hData, $pData, $iSize, $hMem, $pMem, $pStream, $hImage
If Not $hInstance Then
$hInstance = _WinAPI_GetModuleHandle('')
EndIf
If $iLanguage Then
$hInfo = _WinAPI_FindResourceEx($hInstance, $sType, $sName, $iLanguage)
Else
$hInfo = _WinAPI_FindResource($hInstance, $sType, $sName)
EndIf
$hData = _WinAPI_LoadResource($hInstance, $hInfo)
$iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
$pData = _WinAPI_LockResource($hData)
If @Error Then
Return SetError(1, 0, 0)
EndIf
$hMem = DllCall('kernel32.dll', 'ptr', 'GlobalAlloc', 'uint', 2, 'ulong_ptr', $iSize)
If @Error Then
Return SetError(2, 0, 0)
EndIf
Do
$pMem = DllCall('kernel32.dll', 'ptr', 'GlobalLock', 'ptr', $hMem[0])
If @Error Then
ExitLoop
EndIf
If Not _WinAPI_MoveMemory($pMem[0], $pData, $iSize) Then
ExitLoop
EndIf
DllCall('kernel32.dll', 'int', 'GlobalUnlock', 'ptr', $hMem[0])
$pStream = _WinAPI_CreateStreamOnHGlobal($hMem[0])
If @Error Then
EndIf
Until 1
If @Error Then
DllCall('kernel32.dll', 'ptr', 'GlobalFree', 'ptr', $hMem[0])
Return SetError(2, 0, 0)
EndIf
;~ _GDIPlus_Startup()
$hImage = DllCall($ghGDIPDll, 'uint', 'GdipCreateBitmapFromStream', 'ptr', $pStream, 'ptr*', 0)
If (Not @Error) And (Not $hImage[0]) Then
$hImage = $hImage[2]
Else
$hImage = 0
EndIf
;~ _GDIPlus_Shutdown()
_WinAPI_ReleaseStream($pStream)
If Not $hImage Then
Return SetError(3, 0, 0)
EndIf
Return $hImage
EndFunc ;==>_LoadResImage
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hForm
Local $Info = GUIGetCursorInfo($hForm)
If Not @Error Then
Switch $Info[4]
Case $Button1 ;кнопки: $Button1,$Button2,$Button3...
; Nothing
Case Else
_SendMessage($hParent, $WM_SYSCOMMAND, 0xF012, 0)
EndSwitch
EndIf
Case $hParent
Return $HTCAPTION
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NCHITTEST
И еще момент, в приведенном примере (во вложении) прозрачный интерфейс почему-то пропадает через 5-7 секунд после запуска: