Что нового

Прозрачный GUICtrlCreateInput

saraconor

Новичок
Сообщения
404
Репутация
3
Как можно сделать прозрачное поле для ввода текста, чтобы только текст там был виден, а белой подложки не было?
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Например так (проверял на win7):
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>

$Form1 = GUICreate("Прозрачное окно ", 290, 170, -1, -1,-1,BitOR($WS_EX_LAYERED,$WS_EX_ACCEPTFILES,$WS_EX_TOPMOST) )
$Label1 = GUICtrlCreateLabel("Путь:", 8, 8, 31, 17)
$Input1 = GUICtrlCreateInput("", 44, 6, 193, 21)
GUICtrlSetBkColor(-1, 0xABCDEF) ; Фон, который будет заменен на прозрачный
$ButOK = GUICtrlCreateButton("ОК", 47, 120, 75, 25)
$ButCan = GUICtrlCreateButton("Отмена", 135, 120, 75, 25)
GUISetState(@SW_SHOW)


_WINAPI_SetLayeredWindowAttributes($Form1, 0xABCDEF,255) ; 255 - регулирует прозрачность

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE,$ButCan
			Exit
	EndSwitch
WEnd

А зачем вам такое нужно?
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Не совсем то, имелся ввиду фон GUICtrlSetBkColor поменять на прозрачный, с $GUI_BKCOLOR_TRANSPARENT не получается.
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Код:
#include <WinAPIEx.au3>
#include <StaticConstants.au3>
#include <GuiConstants.au3>
$Form1 = GUICreate('Memento', 300, 100, 500, 500, $WS_EX_CONTROLPARENT)
$PicBack1 = GUICtrlCreatePic('', 0, 0, 660, 280)
GUICtrlSetImage(-1, "C:\Windows\winsxs\amd64_microsoft-windows-usertiles_31bf3856ad364e35_6.1.7600.16385_none_f385bacaa98d1e8b\usertile16.bmp", -1)
$Input1 = GUICtrlCreateInput("", 44, 6, 193, 21)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)    ;по идее фон должен стать прозрачным
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Как можно убрать вообще фон под Input элементом, чтобы только буквы были видны, и сразу за ними фон?
$GUI_BKCOLOR_TRANSPARENT не работает
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А я что то не понял. Почему 2 одинаковые по смыслу темы?
 

ZaRaki

Знающий
Сообщения
48
Репутация
19
Описание к нижнему коду.
Размеры у обоих окон gui должны быть одинаковыми.
Размеры и координаты у $Input1 и у $PicBack2 должны быть одинаковыми.
Суть такая. Input становится настолько прозрачным, что даже событие "клика" пропадает, поэтому создаётся фантомное дочернее окно, на котором фантомный любой объект (я выбрал GUICtrlCreatePic так как он самый простой объект на который можно повешать событие клика)
И естественно это событие просто перевести фокус на input
Для упрощения копировании кода, подставил твой адрес пути для фонового изображения
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>

$Form2 = GUICreate('Прозрачное окно', 400, 300, -1, -1, $WS_EX_CONTROLPARENT)
GUISetState(@SW_SHOW)
$PicBack2 = GUICtrlCreatePic('', 44, 6, 193, 21)
$PicBack1 = GUICtrlCreatePic('', 0, 0, 660, 280)
GUICtrlSetImage(-1,"C:\Windows\winsxs\amd64_microsoft-windows-usertiles_31bf3856ad364e35_6.1.7600.16385_none_f385bacaa98d1e8b\usertile16.bmp", -1)

$Form1 = GUICreate("Прозрачное окно", 400, 300, -1, -1,$WS_POPUP,BitOR($WS_EX_LAYERED,$WS_EX_MDICHILD),$Form2)
GUISetBkColor(0x000001) ; Фон, который будет заменен на прозрачный
$Input1 = GUICtrlCreateInput("", 44, 6, 193, 21)
GUICtrlSetBkColor(-1, 0x000001) ; Фон, который будет заменен на прозрачный
$ButCan = GUICtrlCreateButton("Отмена", 135, 120, 75, 25)
GUISetState(@SW_SHOW)


_WINAPI_SetLayeredWindowAttributes($Form1, 0x000001,255) ; 255 - регулирует прозрачность

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE,$ButCan
            Exit
         Case $PicBack2
            guictrlsetstate($Input1,$GUI_FOCUS)
    EndSwitch
WEnd
 
Верх