Jump to content
Sign in to follow this  
Pedro Pinheiro

Gui transparentes e bmp, gifs sem fundo

Recommended Posts

Olá pessoal. Estou com uma duvida sobre transparência de gui e de imagens na GUI sem fundo.

 

 

Eu estava fazendo um programa que esta joysticks no windows e tive um problema com a parte visual. Foi o seguinte... Eu queria botar uma imagem como background na gui. E essa imagem tem os cantos arredondados. Eu usei o "WinSetTrans($gui,"",170)" para deixar os cantos transparente..só que tudo que era branco na gui seguiu a transparência. Eu só queria deixar o background da GUI transparente e o fundo da Bmp ou Gif sem fundo.

 

ihfjS3I.png

 

EDITADO:

 

Deu um trabalinho aqui, mas consegui. O problema era na hora de editar a imagem. Eu tinha que salvar a imagem como .gif e depois abrir a imagem em formato .gif e remover o fundo. Se editar como .png e salvar como gif não vai funcionar.

 

 

ua8ABPh.png

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites

Olá.

 

Certa vez precisei de uma janela transparente e acabei desenvolvendo um pequeno programa para testar a possibilidade.

Não chega nem perto do excelente trabalho do Pedro, mas dá para ter uma idéia da possibilidade de fazer uma janela com fundo transparente.

Utiliza uma função que encontrei na época no fórum gringo.

#NoTrayIcon
Opt("TrayMenuMode", 3) ; Default tray menu items (Script Paused/Exit) will not be shown.
Opt("TrayAutoPause", 0) ; Script will not be paused when clicking the tray icon.

#include <FontConstants.au3>
#include <TrayConstants.au3>
#include <ColorConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Local $Msg, $Tempo, $Inicio = 0, $ItemSaida = TrayCreateItem("Encerra programa")
Local $Janela = GUICreate("", 220, 40, @DesktopWidth-220, @DesktopHeight-80, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_TRANSPARENT))
GUICtrlSetDefColor($COLOR_RED)
;~ GUICtrlSetDefColor($COLOR_YELLOW)
GUISetFont(30, $FW_DONTCARE, $GUI_FONTITALIC, "Arial Black")
GUICtrlCreateLabel("NumLock", -1, -9, -1, -1, -1, $GUI_WS_EX_PARENTDRAG)
GUISetBkColor(0x010101)
_API_SetLayeredWindowAttributes($Janela, 0x010101, 200) ; o 3o parametro indica o qto de fade (0 = invisivel, 255 = opaco)
TraySetIcon(@SystemDir & '\pifmgr.dll', -13)
TraySetToolTip("Clique para abrir o menu")
TraySetState($TRAY_ICONSTATE_SHOW)
While True
   $Msg = TrayGetMsg()
   If $Msg == $ItemSaida Then ExitLoop
   $Tempo = TimerDiff($Inicio)
   If $Tempo > 100 Then
      If _GETNUMLOCK() == 0 Then
         GUISetState(@SW_HIDE)
      Else
         GUISetState(@SW_SHOW)
      EndIf
      $Inicio = TimerInit()
   EndIf
WEnd

Func _GETNUMLOCK()
	Local $ret = DllCall("user32.dll", "short", "GetKeyState", "short", 0x90)
	Return $ret[0]
EndFunc   ;==>_GETNUMLOCK

;~ Func _GETSCROLLLOCK()
;~ 	Local $ret = DllCall("user32.dll", "short", "GetKeyState", "short", 0x91)
;~ 	Return $ret[0]
;~ EndFunc   ;==>_GETSCROLLLOCK

;~ Func _GETCAPSLOCK()
;~ 	Local $ret = DllCall("user32.dll", "short", "GetKeyState", "short", 0x14)
;~ 	Return $ret[0]
;~ EndFunc   ;==>_GETCAPSLOCK

;===============================================================================
; Function Name:   _API_SetLayeredWindowAttributes
; Description::    Sets Layered Window Attributes:) See MSDN for more informaion
; Parameter(s):    $hwnd - Handle of GUI to work on
;                  $i_transcolor - Transparent color
;                  $Transparency - Set Transparancy of GUI
;                  $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
; Requirement(s):  Layered Windows
; Return Value(s): Success: 1
;                  Error: 0
;                   @error: 1 to 3 - Error from DllCall
;                   @error: 4 - Function did not succeed - use
;                               _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
; Author(s):       Prog@ndy
;===============================================================================
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
   Local Const $AC_SRC_ALPHA = 1
   Local Const $ULW_ALPHA = 2
   Local Const $LWA_ALPHA = 0x2
   Local Const $LWA_COLORKEY = 0x1
   If Not $isColorRef Then
      $i_transcolor = Hex(String($i_transcolor), 6)
      $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
   EndIf
   Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
   Select
      Case @error
         Return SetError(@error,0,0)
      Case $ret[0] = 0
         Return SetError(4,0,0)
      Case Else
         Return 1
   EndSelect
EndFunc   ;==>_API_SetLayeredWindowAttributes

Share this post


Link to post
Share on other sites

Eu tive problemas em deixar as imagens transparente. Fiquei por horas mexendo e editando os .gif em um editor de imagem até que consegui manter a transparência das imagens e transparência das bordas do background da GUI.

 

@Luigi

 

 

Oia! @Pedro Pinheiro!

Que trabalho legal!

Compartilha o código com a gente! ^^

 

O código eu não posso, mas basicamente eu fiz isso aq \/

;Gui com WinSetTrans para transparência

$font="Arial"
$brgui=GUICreate("Configuração", 739,414, -1, -1,$WS_POPUP)
WinSetTrans($brgui,"",170)
GUISetBkColor(0xffffff, $brgui) ;troca a cor de fundo da janela
GUISetFont (14, 400, -1, $font)


;Uma imagem como background
GUICtrlCreatePic($imagem_background_gui,0,0,739,414)
GUICtrlSetState (-1, $GUI_DISABLE)


;Aqui é um elemento com "$GUI_BKCOLOR_TRANSPARENT" 
GUICtrlCreateLabel("WArcades© Tel: (21) 2443-6499",10,25,300,20)
GUICtrlSetFont(-1,13)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1,0xF0F0E1)

GUISetState ()
Edited by Pedro Pinheiro
  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×