Página 1 de 1

Todo transparente con imagen.png

Publicado: 30 Sep 2014, 17:26
por Kyan
Hola recientemente hace 3 meses empeze programacion en autoit y vi una imagen de un programa hecho con autoit que era transparente salvo por una imagen.png! Alguien sabe como hacer eso? Me sería de gran ayuda! Ante todo gracias, una gran comunidad.

Re: Todo transparente con imagen.png

Publicado: 30 Sep 2014, 21:52
por Dany
algun ejemplo de lo que quieres porque no entiendo? alguna captura?


Saludos

Re: Todo transparente con imagen.png

Publicado: 02 Oct 2014, 17:58
por PDF
Tal vez te refieres a que la ventana se vea transparente con una imagen png visible, autoit trae un par de ejemplos en la carpeta "...\AutoIt3\Examples\GUI\Advanced\..."
Ahí tienes al AlphaBlend.au3 y Clock.au3, se hacen generalmente con las funciones _GDIPlus_*
Saludos...

Re: Todo transparente con imagen.png

Publicado: 03 Oct 2014, 15:41
por Kyan
Lo que quiero es que quede asi http://www.subeimagenes.com/img/ads1acr-1112748.png el codigo lo hizo un amigo y no me.lo quiere pasar, quiero poner una imagen png y que quede de esa manera!

Re: Todo transparente con imagen.png

Publicado: 03 Oct 2014, 17:00
por PDF
Pues mira el codigo del AlphaBlend.au3, e intenta adatarlo a lo que quieres..

Código: Seleccionar todo

#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
; ==============================================================================================
; Description ...: Shows how to create an alpha blended form
; Author ........: Paul Campbell (PaulIA)
; Notes .........: The images used for this demo MUST be 32 bpp with alpha channel
; Credits .......: Thanks to lod3n for supplying links to the technical documentation that was necessar
; ==============================================================================================
; ==============================================================================================
; Global constants
; ==============================================================================================
Global Const $AC_SRC_ALPHA = 1
; ==============================================================================================
; Global variables
; ==============================================================================================
Global $hGUI1, $hGUI2, $iLabel1, $iLabel2, $iSlider, $hImage
; Create GUI
$hGUI1 = GUICreate("Alpha Blend", 400, 100)
$iLabel1 = GUICtrlCreateLabel("Adjust slider to change opacity level: (0-255)", 84, 10, 380, 20)
$iSlider = GUICtrlCreateSlider(10, 32, 380, 40)
$iLabel2 = GUICtrlCreateLabel("Drag the layered window around your desktop", 80, 74, 380, 20)
GUICtrlSetLimit($iSlider, 255, 0)
GUICtrlSetData($iSlider, 255)
GUISetState()
; Create layered child window
$hGUI2 = GUICreate("Test", 250, 250, -1, -1, -1, $WS_EX_LAYERED, $hGUI1)
; Load layered image
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Images\Button.png")
;~ $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Images\Torus.png")
SetBitMap($hGUI2, $hImage, 255)
GUISetState()
; Register notification messages
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Release resources
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
; ==============================================================================================
; Handle the WM_HSCROLL notificaton so that we can change the opacity in real time
; ==============================================================================================
Func WM_HSCROLL($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
SetBitMap($hGUI2, $hImage, GUICtrlRead($iSlider))
EndFunc ;==>WM_HSCROLL
; ==============================================================================================
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere o
; ==============================================================================================
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
If ($hWnd = $hGUI2) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc ;==>WM_NCHITTEST
; ==============================================================================================
; SetBitMap
; ==============================================================================================
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlen
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend,
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap
Es mas, solo vas a necesitar cambiar la esta linea por la ubicación de tu imagen:

Código: Seleccionar todo

$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Images\Button.png")
Y hacerle unos cuantos retoques al codigo, como eliminar la primera GUI, cambiar el tamaño de la segunda por el de la imagen a mostrar, no vas a necesitar las funciones WM_NCHITTEST y WM_HSCROLL, si solo quieres mostrar la imagen, sin cambiar la transparencia..
Te recomiendo mirar el codigo e intentar hacerlo tu mismo :smt002

Saludos..

Re: Todo transparente con imagen.png

Publicado: 04 Oct 2014, 00:05
por Kyan
Gracias veré que puedo hacer :)