Что нового

Прозрачный GUICtrlCreateInput

saraconor

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

pvnn

Осваивающий
Сообщения
279
Репутация
29
Например так (проверял на 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

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

saraconor

Чайник
Сообщения
337
Репутация
2
Код:
#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 499
Репутация
317
А я что то не понял. Почему 2 одинаковые по смыслу темы?
 

ZaRaki

Новичок
Сообщения
43
Репутация
17
Описание к нижнему коду.
Размеры у обоих окон 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
 
Верх