Jump to content
aiter

partially transparent edit box - cannot get to work (solved)

Recommended Posts

aiter

I am trying to get an image showing through a edit box.  I am only successful in making the edit box totally transparent

#include-once
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <colorconstants.au3>


;WS_EX_TRANSPARENT
$gui = GUICreate("", 1000, 800, -1, -1, -1 , $WS_EX_LAYERED)  ; use layered to get _winapi_setlay... to work


$pic = GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif", 0,0,1000, 800)
GUICtrlSetState(-1, $GUI_DISABLE)

$edit = GUICtrlCreateEdit("First line" & @CRLF, 176, 32,200,600)
GUICtrlSetBkColor(-1,$COLOR_YELLOW)
_WinAPI_SetLayeredWindowAttributes($gui,$COLOR_YELLOW,199) ; 199 is alpha (transparency level)

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

So I am making the edit box's background yellow then using the _WINAPI_SetLayeredWIndowAttributes command to make the yellow disappear (which it does), but the alpha level is supposed to give a bit of opaqueness to it, but its not, just making it totally transparent.  The alpha level is in fact affecting the window itself and not the edit box. I only want the edit box to be partially transparent.

Help appreciated.

 

Edited by aiter
solved

Share this post


Link to post
Share on other sites
Melba23

aiter,

I would use a child GUI like this:

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

$hGUI = GUICreate("", 1000, 800)

$cPic = GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif", 0, 0, 1000, 800)
GUICtrlSetState(-1, $GUI_DISABLE)

GUISetState(@SW_SHOW, $hGUI)

; Create child GUI
$hChild = GUICreate("", 200, 600, 176, 32, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)

$cEdit = GUICtrlCreateEdit("First line" & @CRLF, 0, 0, 200, 600)
GUICtrlSetBkColor(-1, $COLOR_YELLOW)

; Set child transparency
WinSetTrans($hChild, "", 199)

GUISetState(@SW_SHOW, $hChild)

While 1
    $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
WEnd
Exit

M23

  • Thanks 1

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
jguinch

it should also work without a  child GUI, using WinSetTrans with the handle of the edit):

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

$hGUI = GUICreate("", 1000, 800)

$cPic = GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Merlin.gif", 0, 0, 1000, 800)
GUICtrlSetState(-1, $GUI_DISABLE)


$cEdit = GUICtrlCreateEdit("First line" & @CRLF, 176, 32, 200, 600)
GUICtrlSetBkColor(-1, $COLOR_YELLOW)

WinSetTrans(GUICtrlGetHandle($cEdit), "", 150)

GUISetState(@SW_SHOW, $hGUI)

While 1
    $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
WEnd
Exit

 

  • Like 1

Share this post


Link to post
Share on other sites
Melba23

jguinch,

That does not produce a transparent edit for me - it is still solid yellow.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
aiter

You have made me happy Melba23 :)  Thank you.

 

Share this post


Link to post
Share on other sites
aiter

jguinch - just tested your code on my laptop which is windows 10 64bit and your code works. Does not work on my desktop which is windows 7 64bit.

The behaviour of the input box is a bit wonky - I found it losing data sent to the control and the resize of the window to max produces wonkiness as well (strange blobs on side which disappear when the edit box is clicked on).

The window mdi_child also has problems with resize , but I can accomodate for that using a GUIRegisterMsg($WM_SIZE, "WM_SIZE") routine.  The text is also made opaque, but I can set it to be bolder.

 

Edited by aiter
add

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

  • Similar Content

    • ISI360
      By ISI360
      Hi!
      I am searching for a way to display a transparent image (or Icon) over an Button. And the image should always stay on top.

      Here is what i have so far:
      At script start the picture is over the button..but if you move the mouse over the button it overlaps the image.
      And if i add $GUI_ONTOP to the picture, the transparency is gone

      Maybe someone has an idea..

      Thanks in advance!
       
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WinAPIIcons.au3> #include <WinAPIShellEx.au3> GUICreate("GUI", 300, 300) $hbutton = GUICtrlCreateButton("This is a button", 20, 40, 150, 30,$WS_CLIPSIBLINGS) $hpic = GUICtrlCreatePic("", 10, 10, 128, 128) _SetIconAlpha($hpic,"shell32.dll", 12,128,128) GUICtrlSetState(-1, $GUI_DISABLE) ;~ GUICtrlSetState(-1,$GUI_ONTOP) ;If you uncomment this..the picture is on top...but the transparency is gone :( GUISetState() While 1 $Msg = GUIGetMsg() If $Msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd Func _SetIconAlpha($hWnd, $sIcon, $iIndex, $iWidth, $iHeight) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) If $hWnd = 0 Then Return SetError(1, 0, 0) EndIf EndIf If $iIndex <> 0 Then $iIndex = $iIndex - 1 Local $hIcon = _WinAPI_ShellExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) If $hIcon = 0 Then Return SetError(1, 0, 0) EndIf Local $hBitmap, $hObj, $hDC, $hMem, $hSv $hDC = _WinAPI_GetDC($hWnd) $hMem = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight) $hSv = _WinAPI_SelectObject($hMem, $hBitmap) _WinAPI_DrawIconEx($hMem, 0, 0, $hIcon, $iWidth, $iHeight, 0, 0, 2) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_SelectObject($hMem, $hSv) _WinAPI_DeleteDC($hMem) _WinAPI_DestroyIcon($hIcon) _WinAPI_DeleteObject(_SendMessage($hWnd, 0x0172, 0, 0)) _SendMessage($hWnd, 0x0172, 0, $hBitmap) $hObj = _SendMessage($hWnd, 0x0173) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf Return 1 EndFunc ;==>_SetIconAlpha  
    • Skeletor
      By Skeletor
      Hi All,
      I know many newbies search for this feature.
      I decided to share this piece of code with everyone.
      Basically its a "splash screen" that has a transparent image.
      In a nutshell - Gui with a transparent gif.
      Enjoy...
      Download attachment....
       
      Splash Screen GUI.zip
    • hcI
      By hcI
      Hello everyone !
      I'm making a little password generator with save function.
      And i would like to set a line limit at 25.
      For my script, the user have to enter a name in "$input1" and click on the button "$btn_save" to display it in the editbox "$edit1".
      The user can't edit himself because the edit box have $ES_READONLY
      If someone know how, Thanks you !
       
      PS: I've already looked in the help and didn't find anything..
    • olmanRvr
      By olmanRvr
      I want to show or hide a edit control depending if a radio button is checked or not.The following Autoit code appears semantically ok but not working.Can anyone please help?
      thanks
      olmar
      While 1 $nMsg = GUIGetMsg() $isradioChk=GUICtrlRead($radio_AbsP);checked=1,not checked=4 Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $isradioChk If $isradioChk<==1 Then GUICtrlSetState($edit_AbsP,$GUI_SHOW) GUICtrlSetState($edit_RelP,$GUI_HIDE) Else GUICtrlSetState($edit_AbsP,$GUI_HIDE) GUICtrlSetState($edit_RelP,$GUI_SHOW) EndIf Case $usrPrefs EndSwitch WEnd  
    • Chimp
      By Chimp
      Hi
      Is it possible to draw using a semitransparent paint?
      In short, I would like to paint on a Label control that contains text, and at the same time be able to see through the paint, so to see the text behind.
      Something like using an highlighter.
      Only to show the effect that I would achieve, here are two listings. The first, using transparency on the whole gui, allows to draw an ellipse into the gui's body showing at the same time what's beneath the ellipse's border. (the inner of the ellipse should be totally transparent.) Click on the GUI and drag to draw the ellipse.
      #include <Misc.au3> ; for _IsPressed (01 Left mouse button) #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> #include <WinAPIGdi.au3> Opt("MouseCoordMode", 0) Global $hUser32dll = DllOpen("user32.dll") ; for _IsPressed Local $aPos ; -- Create the GUI ------------------------------- Global $hGUI = GUICreate("Preview of an ellipse (click and drag to draw)", 400, 400, 100, 100, -1, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) Local $iTransparent = 0x0FF0FF ; tansparent color ; This sets which color to be transparent and opacity of the whole window _WinAPI_SetLayeredWindowAttributes($hGUI, $iTransparent, 127) ; last param opacity intensity: 0 totally transp, 255 NOT transp GUISetBkColor($iTransparent, $hGUI) ; background becomes transparent GUISetState(@SW_SHOW) ; MAIN LOOP While 1 $aPos = MouseGetPos() $aMsg = GUIGetMsg($GUI_EVENT_ARRAY) ; $GUI_EVENT_ARRAY -> returns an array containing the event and extended information Select Case $aMsg[0] = $GUI_EVENT_CLOSE ConsoleWrite("Bye" & @LF) Exit ; End() EndSelect If _IsPressed("01", $hUser32dll) Then ; draw the ellipse following mouse position. ; returns only when left mouse button is released _Preview_Ellipse($hGUI, $aPos[0], $aPos[1], 24) EndIf WEnd Func _Preview_Ellipse($hGUIx, $iX, $iY, $iPenSize = 9, $iColor = 0xFF0000, $iFill = 0x0FF0FF) ; Creates $tagRECT structure with the coordinates of the specified rectangle Local $tRECT = _WinAPI_CreateRect($iX, $iY, $iX, $iY) Local $hDC = _WinAPI_GetWindowDC($hGUIx) Local $hPen = _WinAPI_CreatePen($PS_SOLID, $iPenSize, $iColor) ; border size and color Local $hBrush = _WinAPI_CreateBrushIndirect($BS_SOLID, $iFill) ; fill color Local $hObj1 = _WinAPI_SelectObject($hDC, $hBrush) Local $hObj2 = _WinAPI_SelectObject($hDC, $hPen) Local $aPreviousPos[2], $aPos[2] While _IsPressed("01", $hUser32dll) ; stay here till left mouse button is released ; get the mouse coordinates: ; $aPos[0] = X coord (horizontal), $aPos[1] = Y coord (vertical) $aPos = MouseGetPos() ; if mouse has mooved then redraw the ellipse accordingly If $aPreviousPos[0] <> $aPos[0] Or $aPreviousPos[1] <> $aPos[1] Then ; mouse has mooved ; take track of new mouse position $aPreviousPos[0] = $aPos[0] $aPreviousPos[1] = $aPos[1] ; DllStructSetData($tRECT, 1, $iX) ; initial point is fixed ; DllStructSetData($tRECT, 2, $iY) DllStructSetData($tRECT, 3, $aPos[0]) ; new mouse position DllStructSetData($tRECT, 4, $aPos[1]) ; erase content of the gui (erase the previous ellipse) _WinAPI_RedrawWindow($hGUIx, 0, 0, BitOR($RDW_INVALIDATE, $RDW_ERASE, $RDW_UPDATENOW)) ; Draws the new ellipse (based on new mouse position) _WinAPI_Ellipse($hDC, $tRECT) EndIf ; WEnd ; if left button is released then exit ; free resources _WinAPI_SelectObject($hDC, $hObj1) _WinAPI_SelectObject($hDC, $hObj2) _WinAPI_DeleteObject($hPen) _WinAPI_DeleteObject($hBrush) _WinAPI_ReleaseDC($hGUIx, $hDC) _WinAPI_RedrawWindow($hGUIx, 0, 0, BitOR($RDW_INVALIDATE, $RDW_ERASE, $RDW_UPDATENOW)) ; erase content of the gui EndFunc ;==>_Preview_Ellipse  
      This second listing is a botched attempt to achieve the same effect on a Label control located on a normal window (not transparent).
      #include <Misc.au3> ; for _IsPressed (01 Left mouse button) #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> #include <WinAPIGdi.au3> Opt("MouseCoordMode", 0) Global $hUser32dll = DllOpen("user32.dll") ; for _IsPressed Local $aPos ; -- Create the GUI ------------------------------- Global $hGUI = GUICreate("Preview of an ellipse (click and drag to draw)", 400, 400, 100, 100) ; , -1, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) ; Label Local $s = StringReplace(StringFormat('%22s', ""), " ", "the quick brown fox jumps over the lazy dog ") Local $hLabel = GUICtrlGetHandle(GUICtrlCreateLabel($s, 10, 10, 250, 250)) GUICtrlSetBkColor(-1, 0xAAAA00) ; Local $iTransparent = 0x0FF0FF ; tansparent color ; This sets which color to be transparent and opacity of the whole window ; _WinAPI_SetLayeredWindowAttributes($hGUI, $iTransparent, 127) ; last param opacity intensity: 0 totally transp, 255 NOT transp ; GUISetBkColor($iTransparent, $hGUI) ; background becomes transparent GUISetState(@SW_SHOW) ; MAIN LOOP While 1 $aPos = MouseGetPos() $aMsg = GUIGetMsg($GUI_EVENT_ARRAY) ; $GUI_EVENT_ARRAY -> returns an array containing the event and extended information Select Case $aMsg[0] = $GUI_EVENT_CLOSE ConsoleWrite("Bye" & @LF) Exit ; End() EndSelect If _IsPressed("01", $hUser32dll) Then ; draw the ellipse following mouse position. ; returns only when left mouse button is released _Preview_Ellipse($hLabel, $aPos[0], $aPos[1], 24) EndIf WEnd Func _Preview_Ellipse($hGUIx, $iX, $iY, $iPenSize = 9, $iColor = 0xFF0000, $iFill = 0x0FF0FF) ; Creates $tagRECT structure with the coordinates of the specified rectangle Local $tRECT = _WinAPI_CreateRect($iX, $iY, $iX, $iY) Local $hDC = _WinAPI_GetWindowDC($hGUIx) Local $hPen = _WinAPI_CreatePen($PS_SOLID, $iPenSize, $iColor) ; border size and color Local $hBrush = _WinAPI_CreateBrushIndirect($BS_SOLID, $iFill) ; fill color Local $hObj1 = _WinAPI_SelectObject($hDC, $hBrush) Local $hObj2 = _WinAPI_SelectObject($hDC, $hPen) Local $aPreviousPos[2], $aPos[2] While _IsPressed("01", $hUser32dll) ; stay here till left mouse button is released ; get the mouse coordinates: ; $aPos[0] = X coord (horizontal), $aPos[1] = Y coord (vertical) $aPos = MouseGetPos() ; if mouse has mooved then redraw the ellipse accordingly If $aPreviousPos[0] <> $aPos[0] Or $aPreviousPos[1] <> $aPos[1] Then ; mouse has mooved ; take track of new mouse position $aPreviousPos[0] = $aPos[0] $aPreviousPos[1] = $aPos[1] ; DllStructSetData($tRECT, 1, $iX) ; initial point is fixed ; DllStructSetData($tRECT, 2, $iY) DllStructSetData($tRECT, 3, $aPos[0]) ; new mouse position DllStructSetData($tRECT, 4, $aPos[1]) ; erase content of the gui (erase the previous ellipse) _WinAPI_RedrawWindow($hGUIx, $tRECT, 0, BitOR($RDW_INVALIDATE, $RDW_ERASE, $RDW_UPDATENOW)) ; Draws the new ellipse (based on new mouse position) _WinAPI_Ellipse($hDC, $tRECT) EndIf ; WEnd ; if left button is released then exit ; free resources _WinAPI_SelectObject($hDC, $hObj1) _WinAPI_SelectObject($hDC, $hObj2) _WinAPI_DeleteObject($hPen) _WinAPI_DeleteObject($hBrush) _WinAPI_ReleaseDC($hGUIx, $hDC) _WinAPI_RedrawWindow($hGUIx, 0, 0, BitOR($RDW_INVALIDATE, $RDW_ERASE, $RDW_UPDATENOW)) ; erase content of the gui EndFunc ;==>_Preview_Ellipse I'm sure to be on the wrong way (I admit my knowledge on graphics is close to zero)
      How can I achieve that effect?
      Thanks on advance for any help.
×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.