MasonMill Posted April 5, 2014 Posted April 5, 2014 Hey guys, Im posting a new thread out of a necro post as per Melba. I edited a .gif picture to make a transparent background (with photoshop). When I try to add this picutre into my gui, it makes the background of my picture white. I dont want any background on my picture. I just want the image alone alone with nothing around it. Using a previous post I was able to do so using the code below. #include <GUIConstants.au3> HotKeySet("{END}", "Terminate") $gui=GUICreate("test transparentpic", 47, 45) $pic=GUICreate("", 47, 45, 0, 0,$WS_POPUP,BitOr($WS_EX_LAYERED,$WS_EX_MDICHILD,$WS_EX_TRANSPARENT),$gui) GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif", 0,0,47, 45) WinSetTrans ( $pic, "", 50 ) GUISetState(@SW_SHOW,$pic) Sleep(1e9) GUISetState(@SW_SHOW,$gui) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case Else EndSelect WEnd Exit Func Terminate() exit(0) EndFunc My problem is that I also want to make it transparent as well. When I use $WS_EX_TRANSPARENT and WinSetTrans ( $pic, "", 50 ), it appears transparent but the background comes back white. UEZ suggested this code below using GDIPlus: #include <GUIConstants.au3> #include <GDIPlus.au3> Global Const $STM_SETIMAGE = 0x0172 _GDIPlus_Startup() $himg=_GDIPlus_ImageLoadFromFile("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif") $hbmp=_GDIPlus_BitmapCreateHBITMAPFromBitmap($himg) _GDIPlus_ImageDispose($himg) $gui=GUICreate("test transparentpic", 200, 250) $pic=GUICtrlCreatePic("",60,85,68,71) _WinAPI_DeleteObject(GUICtrlSendMsg($pic,$STM_SETIMAGE,$IMAGE_BITMAP,$hbmp)) GUISetState(@SW_SHOW,$gui) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hbmp) _GDIPlus_Shutdown() ExitLoop EndSelect WEnd Exit I ran this above to see what happens and it brought the image up with white background and no transparency (which is what I thought it was going to do). Then I augmented as below: #include <GUIConstants.au3> #include <GDIPlus.au3> HotKeySet("{END}", "Terminate") Global Const $STM_SETIMAGE = 0x0172 _GDIPlus_Startup() $himg=_GDIPlus_ImageLoadFromFile("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif") $hbmp=_GDIPlus_BitmapCreateHBITMAPFromBitmap($himg) _GDIPlus_ImageDispose($himg) $gui=GUICreate("test transparentpic", 200, 250) $gui=GUICreate("", 200, 250,0,0,$WS_POPUP,BitOr($WS_EX_LAYERED,$WS_EX_MDICHILD,$WS_EX_TRANSPARENT),$gui) $pic=GUICtrlCreatePic("",60,85,68,71) WinSetTrans ( $pic, "", 50 ) _WinAPI_DeleteObject(GUICtrlSendMsg($pic,$STM_SETIMAGE,$IMAGE_BITMAP,$hbmp)) GUISetState(@SW_SHOW,$gui) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hbmp) _GDIPlus_Shutdown() ExitLoop EndSelect WEnd Func Terminate() exit(0) EndFunc trying to make it no background with transparency, but it still doesnt. I dont understand why. Any thoughts from anyone? Thank you for your time guys, Mason
Solution PhoenixXL Posted April 5, 2014 Solution Posted April 5, 2014 (edited) The following would work. Note that Child Windows can't have WS_EX_LAYERED till windows 7, ==> the problem in your first example Note: windows 8 supports WS_EX_LAYERED with child windows. Also WS_EX_TRANSPARENT doesn't allow a window to be transparent, it only allows click through, ie the underlying window would be receiving mouse input but an overlay of the given window would be shown. You can set the transparency of WS_EX_LAYERED windows using functions(check example) Example expandcollapse popup#include-once #include <GUIConstants.au3> #include <GDIPlus.au3> #include <WinAPISys.au3> HotKeySet("{END}", "Terminate") $GUI = GUICreate("", 147, 145, -1, -1, $WS_POPUP, $WS_EX_LAYERED) $pic = GUICtrlCreatePic("", 0,0,147, 145) Local Const $STM_SETIMAGE = 0x0172 _GDIPlus_Startup() $himg=_GDIPlus_ImageLoadFromFile("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif") $hbmp=_GDIPlus_BitmapCreateHBITMAPFromBitmap($himg) _GDIPlus_ImageDispose($himg) _WinAPI_DeleteObject(GUICtrlSendMsg($pic,$STM_SETIMAGE,$IMAGE_BITMAP,$hbmp)) GUISetState() Local Const $iTransparency = 50 GUISetBkColor(0xABCDEF) ;this background color should be same as the trans color used in above function _WinAPI_SetLayeredWindowAttributes($GUI,0xABCDEF, $iTransparency) ;~ GUISetState(@SW_SHOW,$gui) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case Else EndSelect WEnd Exit Func Terminate() exit(0) EndFunc Regards Phoenix XL Edited April 5, 2014 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
MasonMill Posted April 5, 2014 Author Posted April 5, 2014 Awesome, thank you very much! Why use the GDIPlus stuff as opposed to not? What advantages does it have?
PhoenixXL Posted April 6, 2014 Posted April 6, 2014 (edited) In your case GDIPlus isn't required. The following would also do the same. #include-once #include <GUIConstants.au3> #include <GDIPlus.au3> #include <WinAPISys.au3> HotKeySet("{END}", "Terminate") $GUI = GUICreate("", 147, 145, -1, -1, $WS_POPUP, $WS_EX_LAYERED) $pic = GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif", 0,0,147, 145) GUISetState() Local Const $iTransparency = 50 GUISetBkColor(0xABCDEF) ;this background color should be same as the trans color used in above function _WinAPI_SetLayeredWindowAttributes($GUI,0xABCDEF, $iTransparency) ;~ GUISetState(@SW_SHOW,$gui) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case Else EndSelect WEnd Exit Func Terminate() exit(0) EndFunc Awesome, thank you very much! Why use the GDIPlus stuff as opposed to not? What advantages does it have? The precise comparison, can only be given by an expert. I'm still very amateur in it. Regards Phoenix XL Edited April 6, 2014 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
mesale0077 Posted April 6, 2014 Posted April 6, 2014 os : w7 ,w8 How to make transparent background animated gif
PhoenixXL Posted April 7, 2014 Posted April 7, 2014 Don't know exactly but, The >UDF by trancexx will surely make you start My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now