Что нового

Прозрачный текстовый блок в окне GUI

saraconor

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

думаю тут надо использовать GUICtrlCreateEdit, но в нем по бокам ползунки есть, как ползунки убрать?

GUICtrlCreateEdit ('',50,50,160,50,'',$WS_EX_TRANSPARENT) не помогает, все равно поле белое

(вопрос с назначением переменной решен, осталось понять как прозрачный блок сделать)
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
как ползунки убрать?
Код:
#include <EditConstants.au3>

$Form1 = GUICreate("Form1", 624, 444)
GUISetBkColor(0xFF00FF)
$Edit1 = GUICtrlCreateEdit("", 72, 64, 473, 313, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN), 0)
GUICtrlSetBkColor(-1, 0xFF00FF)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3 ;$GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
S

saraconor

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

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Вот IE-объект, картинку нужно указать в коде HTML

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
_IEErrorHandlerRegister()
$oIE = _IECreateEmbedded()
GUICreate("Тут можно писать", 770, 520, -1, -1, _
	$WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS, $WS_EX_COMPOSITED)
$GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 770, 520)
GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
GUISetState()

$html= _
'<html>' & @CRLF & _
'  <head>' & @CRLF & _
'	<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">' & @CRLF & _
'	<meta http-equiv="Content-Language" content="ru">' & @CRLF & _
'	<LINK REL=STYLESHEET TYPE="text/css" HREF="style.css" title="style">' & @CRLF & _
'  </head>' & @CRLF & _
'  <style>' & @CRLF & _
'BODY' & @CRLF & _
' {' & @CRLF & _
'	border: none;' & @CRLF & _
'	overflow: hidden;' & @CRLF & _
'    FONT-FAMILY: Arial Cyr, Geneva;' & @CRLF & _
'    FONT-SIZE: 10pt;' & @CRLF & _
'    TEXT-ALIGN: justify;' & @CRLF & _
'    BACKGROUND: #6CA6AE;' & @CRLF & _
'	SCROLLBAR-BASE-COLOR: #0E4E5F;	' & @CRLF & _
'	SCROLLBAR-FACE-COLOR: #ADCBCD; ' & @CRLF & _
'	SCROLLBAR-HIGHLIGHT-COLOR: #c7e4e6; ' & @CRLF & _
'	SCROLLBAR-SHADOW-COLOR: #7ca2ac; ' & @CRLF & _
'	SCROLLBAR-3DLIGHT-COLOR: #7ca2ac; ' & @CRLF & _
'	SCROLLBAR-ARROW-COLOR: #0E4E5F; ' & @CRLF & _
'	SCROLLBAR-TRACK-COLOR: #0E4E5F; ' & @CRLF & _
'	SCROLLBAR-DARKSHADOW-COLOR: #c7e4e6; ' & @CRLF & _
'  }' & @CRLF & _
'  </style>' & @CRLF & _
'  <body>	  ' & @CRLF & _
'		' & @CRLF & _
'  </body>' & @CRLF & _
'</html>'

 _IENavigate($oIE,'about:blank')
 _IEDocWriteHTML($oIE, $html)
_IEPropertySet ($oIE, "contenteditable", True) ; Разрешить редактирование
GUICtrlSetState($GUIActiveX, $GUI_FOCUS)
Do
Until GUIGetMsg() = -3
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Вот урезал немного. Рядом в папку ложишь picture.gif и он заполняет фон объекта. Если с помощью FileInstall добавишь файл, то лучше его извлекать в %Temp%, соответственно и путь к картинке указать туда.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
_IEErrorHandlerRegister()
$oIE = _IECreateEmbedded()
GUICreate("Тут можно писать", 570, 320, -1, -1, _
		$WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS, $WS_EX_COMPOSITED)
$GUIActiveX = GUICtrlCreateObj($oIE, 30, 20, 470, 220)
GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)

$html = _
'<html><head>' & @CR & _
'<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">' & @CR & _
'<meta http-equiv="Content-Language" content="ru"></head><style>' & @CR & _
'BODY{' & @CR & _
'border: none;' & @CR & _
'overflow: hidden;' & @CR & _
'FONT-FAMILY: "Arial Cyr", Geneva;' & @CR & _
'FONT-SIZE: 10pt;' & @CR & _
'BACKGROUND: #6CA6AE url(' & @ScriptDir & '\picture.gif) 0px 0px repeat;' & @CR & _
'}</style><body></body></html>'

_IENavigate($oIE, 'about:blank')
_IEDocWriteHTML($oIE, $html)
_IEPropertySet($oIE, "contenteditable", True) ; Разрешить редактирование
GUISetState()
Do
Until GUIGetMsg() = -3
 
Автор
S

saraconor

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

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
saraconor
Все зависит от того, что понимать под "проще"...
На основе http://www.autoitscript.com/forum/topic/85440-edit-transparency/page__hl__transparency
Код:
#include <GUIConstants.au3>
#include <Windowsconstants.au3>
#include <EditConstants.au3>

#region - GUI Create
Global $Topx = 300, $Topy = 400, $extMsg
Global $Plusx = 15, $Plusy = 70
Global $gui1 = GUICreate('Parent GUI', 500, 500, $Topx, $Topy)
GUISetFont(6)
GUICtrlCreatePic(@ScriptDir & '\1.bmp', 0, 0, 500, 500) ; картинка

GUISetState()
;create layered window so we can have a transparent colour which will be applied to edit background as well as the window
Global $gui2 = GUICreate('child', 400, 450, $Topx + 15, $Topy + 70, $WS_POPUP, BitOR(0x2000000, $WS_EX_LAYERED, $WS_EX_TOPMOST));$WS_EX_COMPOSITED = 0x2000000
$Edit1=GUICtrlCreateEdit('', 0, 0, 400, 450, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN), 0)
GUICtrlSetBkColor(-1, 0xABCDEF);set background to a special colour
$text = FileRead(@ScriptFullPath)
GUICtrlSetData(-1, $text)

_API_SetLayeredWindowAttributes($gui2, 0xABCDEF, 255);set special colour fully transparent
GUISetState()
GUIRegisterMsg($WM_MOVE, 'Follow')
#endregion - GUI Create

#region - GUI SelectLoop
While 1
	$extMsg = GUIGetMsg(1)
	$msg = $extMsg[0]
	Switch $extMsg[1]
		Case $gui1
			Select
				Case $msg = $GUI_EVENT_CLOSE
					Exit
					
			EndSelect
			
	EndSwitch
WEnd
#endregion - GUI SelectLoop


;===============================================================================
;
; 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

Func Follow($hwnd)
	Local $wp = WinGetPos($gui1)
	If $hwnd = $gui1 Then WinMove($gui2, '', $wp[0] + $Plusx, $wp[1] + $Plusy)
EndFunc   ;==>Follow
 
Верх