Что нового

[Элементы GUI] Прозрачность картинки

Yoshiyuki

Новичок
Сообщения
40
Репутация
0
Всем Доброе время суток!
Нужно сделать форму картинкой, это я сделал, а как сделать что бы вокруг картинки было прозрачно вот вид формы http://savepic.org/1660807.png скажите как это сделать пожалуйста
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Возможно это то что нужно :smile:
http://autoit-script.ru/index.php?topic=424.msg2877#msg2877
 

madmasles

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

HotKeySet('{Esc}', '_Exit')

$hParent = GUICreate('', 0, 0, 0, 0, 0, $WS_EX_TOOLWINDOW)
$hMain = GUICreate("Transparent", 586, 285, -1, -1, $WS_POPUP, $WS_EX_LAYERED, $hParent)
GUISetBkColor(0x000080)
$nPic = GUICtrlCreatePic('', 0, 0, 586, 285)
GUICtrlSetState(-1, $GUI_DISABLE)
_SetImage($nPic, @ScriptDir & '\1660807.png')
GUISetState(@SW_SHOW, $hMain)
_WinAPI_SetLayeredWindowAttributes($hMain, 0x000080, 0, $LWA_COLORKEY)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
While 1
	Sleep(50)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func WM_NCHITTEST($hWnd, $msg, $wParam, $lParam)
	Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', _
			$msg, 'wparam', $wParam, 'lparam', $lParam)
	If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST
Библиотеки в подписи.

Поменял код, чтобы окно мышкой таскать можно было.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
madmasles
Доли секунды вижу прямоугольник и все. :scratch:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Угу... картинку не положил вместе со скриптом... :smile:

Хм... ещё бы избавиться от синего контура и жирного куска пикселей слева... :scratch:
 

Yashied

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


_GDIPlus_Startup()
$hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1660807.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hForm = GUICreate('', _GDIPlus_ImageGetWidth($hPng), _GDIPlus_ImageGetHeight($hPng), -1, -1, $WS_POPUPWINDOW, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hForm, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()

GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
	Switch $hWnd
		Case $hForm
			Return $HTCAPTION
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Yashied
Как всегда, безупречно. :thanks: :thumbs_up:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Выглядит круто :thumbs_up:, ещё бы пример, как к этой "форме" прикрутить кнопку и т.д. :whistle:
 

Yashied

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

Код:
#Include <ComboConstants.au3>
#Include <GDIPlus.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Global Const $SC_DRAGMOVE = 0xF012

_GDIPlus_Startup()
$hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1660807.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hParent = GUICreate('', 579, 293, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hParent, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()

$hForm = GUICreate('', 563, 180, -1, -1, $WS_POPUP, -1, $hParent)
GUISetBkColor(0x314B89)
GUICtrlCreatePic(@ScriptDir & '\1660807.bmp', 0, 0, 563, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateCombo('Option1', 270, 8, 285, 140, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, 'Option2|Option3|Option4', 'Option1')
$Label = GUICtrlCreateLabel('Loading...', 10, 74, 60, 14)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$Button = GUICtrlCreateButton('Exit', 476, 150, 80, 23)

GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
WM_MOVE($hParent, $WM_MOVE, 0, 0)
GUISetState(@SW_SHOW, $hParent)
GUISetState(@SW_SHOW, $hForm)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button
			Exit
		Case $Label
			_SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
	EndSwitch
WEnd

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hParent

			Local $Pos = WinGetPos($hParent)

			If IsArray($Pos) Then
				WinMove($hForm, '', $Pos[0] + 13, $Pos[1] + 100)
			EndIf
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hForm
			_SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
		Case $hParent
			Return $HTCAPTION
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST


Картинки в архиве.
 
Автор
Y

Yoshiyuki

Новичок
Сообщения
40
Репутация
0
Всем спасибо за помощь, воспользовался скриптом Yashied так как он больше подошел)
 

yudined

Новичок
Сообщения
1
Репутация
0
Я прошу прощения, если я всё-таки повторяюсь.
Но не смог найти через поиск. А сам я новичок и пока больше занимаюсь компиляцией кодов, чем сам что-то делаю. ;) Задача такая. Есть картинка с моделью и с фоном одного цвета. Не могу понять, как убрать этот фон в транспарент, чтобы осталась одна модель. Вывод в PNG. Я буду признателен за любой скрипт или подсказку (например, ссылку), где искать. :smile:
 

Arei

Скриптер
Сообщения
938
Репутация
115
Yashied дело с том, что Input не работает в таких Gui/Можете это посмотреть?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
		Case $hForm

			Local $Info = GUIGetCursorInfo($hForm)

			If (IsArray($Info)) And ($Info[2]) Then
				_SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
			EndIf
        Case $hParent
            Return $HTCAPTION
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST
 

Arei

Скриптер
Сообщения
938
Репутация
115
Спасибо по пробую разобраться.
 

MiXa

Новичок
Сообщения
8
Репутация
0
Yashied

Код:
#Include <ComboConstants.au3>
#Include <GDIPlus.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Global Const $SC_DRAGMOVE = 0xF012

_GDIPlus_Startup()
$hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1660807.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hParent = GUICreate('', 579, 293, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hParent, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()

$hForm = GUICreate('', 563, 180, -1, -1, $WS_POPUP, -1, $hParent)
GUISetBkColor(0x314B89)
GUICtrlCreatePic(@ScriptDir & '\1660807.bmp', 0, 0, 563, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateCombo('Option1', 270, 8, 285, 140, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, 'Option2|Option3|Option4', 'Option1')
$Label = GUICtrlCreateLabel('Loading...', 10, 74, 60, 14)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$Button = GUICtrlCreateButton('Exit', 476, 150, 80, 23)

GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
WM_MOVE($hParent, $WM_MOVE, 0, 0)
GUISetState(@SW_SHOW, $hParent)
GUISetState(@SW_SHOW, $hForm)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button
            Exit
        Case $Label
            _SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndSwitch
WEnd

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hParent

            Local $Pos = WinGetPos($hParent)

            If IsArray($Pos) Then
                WinMove($hForm, '', $Pos[0] + 13, $Pos[1] + 100)
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            _SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
        Case $hParent
            Return $HTCAPTION
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST


Yashied мне выдает ошибку



Версия программы 3.6_3361

Что я не так делаю?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
MiXa,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.





Zaramot,
Я предупреждал.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
miXa,
Добавь это:
Код:
#include <WindowsConstants.au3>
 
Верх