Что нового

[Элементы GUI] Изменение цвета рамки GUI.

HORRIBLE

Знающий
Сообщения
22
Репутация
10
На прикрепленной картинке показана область с рамкой красного цвета, прозрачная.

Как это сделать? прозрачность понятно с помощью WinSetTrans задается, а как быть с цветом рамки?

Возможно это сделать при помощи GUICtrlCreateGraphic, если да как?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
Re: [Элементы GUI] Прозрачная область с помощью GUI...Graphic или тоже самое с помощью GUICreate

HORRIBLE сказал(а):
как это сделать используя GUICtrlCreateGraphic?
Никак.

HORRIBLE сказал(а):
как это же сделать если создавать GUICreate?
Код:
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>

$hForm = GUICreate('', 400, 300, -1, -1, $WS_POPUP)

GUICtrlCreateGraphic(0, 0, 400, 300)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xFF0000, 0xFF7A7A)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, 400, 300)

WinSetTrans($hForm, '', 127)

GUISetState()

Do
Until GUIGetMsg() = -3
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt('GUIOnEventMode', 1)
Global $sIND = 'Stop'
Global $Pause
Global $sTitle = 'Main Title'
$hParent = GUICreate($sTitle, 200, 200, -1, -1, $WS_POPUP, BitOR($GUI_WS_EX_PARENTDRAG, $WS_EX_TOPMOST))
GUISetState()

$hLabel = GUICtrlCreateLabel('', 2, 2, 196, 196)
GUICtrlSetFont(-1, 20, 1000)
GUICtrlSetColor(-1, 0xc03d3a)
GUICtrlSetBkColor(-1, 0xff0000)
WinSetTrans($sTitle, '', 50)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_Move')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_Move')
GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_Move')

While 1
    Sleep(100)
WEnd
Func _Exit()
    Exit
EndFunc

Func _Move()
    Switch @GUI_CtrlID
        Case $GUI_EVENT_PRIMARYDOWN
            Global $aWCoord_B = WinGetPos('')
            Global $aMCoord_B = MouseGetPos()
            Global $ixWCoord_B = $aWCoord_B[0]
            Global $iyWCoord_B = $aWCoord_B[1]
            Global $ixMCoord_B = $aMCoord_B[0]
            Global $iyMCoord_B = $aMCoord_B[1]
            Global $ixDelta = $ixMCoord_B - $ixWCoord_B
            Global $iyDelta = $iyMCoord_B - $iyWCoord_B
            If ($ixDelta <= 200 AND $iyDelta <= 200) Then $sIND = 'Move'
        Case $GUI_EVENT_MOUSEMOVE
            If $sIND = 'Move' Then
                $aMCoord = MouseGetPos()
                $ixMCoord = $aMCoord[0]
                $iyMCoord = $aMCoord[1]
                $ixWCoord = $ixMCoord - $ixDelta
                $iyWCoord = $iyMCoord - $iyDelta
                WinMove($sTitle, '', $ixWCoord, $iyWCoord)
            EndIf
        Case $GUI_EVENT_PRIMARYUP
            $sIND = 'Stop'
    EndSwitch
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
Yashied
Хороший пример, но в нём и рамка прозрачная :whistle:.

Kaster
Тоже самое можно сделать и без дополнительных сообщении:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt('GUIOnEventMode', 1)

Global $sTitle = 'Main Title'

$hParent = GUICreate($sTitle, 200, 200, -1, -1, $WS_POPUP, BitOR($WS_EX_CONTROLPARENT, $WS_EX_TOPMOST))
GUISetBkColor(0xff0000)
WinSetTrans($sTitle, '', 20)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')

GUISetState()

While 1
    Sleep(100)
WEnd

Func _Exit()
    Exit
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
OffTopic:
CreatoR
я не проверял, из загашника. писалось давно, когда еще многих вещей не знал :whistle:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
CreatoR сказал(а):
Хороший пример, но в нём и рамка прозрачная...
Я хотел как проще, но можно и по другому (даже размеры теперь можно менять)...

:smile:

Код:
#Include <GUIConstantsEx.au3>
#Include <GDIPlus.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>

_GDIPlus_Startup()

Global $hForm, $hPic, $Msg

$hForm = GUICreate('', 200, 200, -1, -1, BitOR($WS_POPUPWINDOW, $WS_SIZEBOX), $WS_EX_LAYERED)
$hPic = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\red.png')
GUIRegisterMsg($WM_SIZING, 'WM_SIZING')
_SetBitmap($hForm, 200, 200)
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_EVENT_PRIMARYDOWN
			_SendMessage($hForm, $WM_SYSCOMMAND, 0xF012, 0) ; $SC_DRAGMOVE = 0xF012
	EndSwitch
WEnd

_GDIPlus_Shutdown()

Func _SetBitmap($hWnd, $iWidth, $iHeight)

	Local $hBitmap, $hImage, $hGraphic, $hPen

	$hImage = DllCall($ghGDIPDll, 'int', 'GdipGetImageThumbnail', 'ptr', $hPic, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)
	$hImage = $hImage[4]
	$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
	$hPen = _GDIPlus_PenCreate(0xFFFF0000)
	_GDIPlus_GraphicsDrawRect($hGraphic, 0, 0, $iWidth - 1, $iHeight - 1, $hPen)
	_GDIPlus_PenDispose($hPen)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_GDIPlus_GraphicsDispose($hGraphic)
	_GDIPlus_ImageDispose($hImage)
	_WinAPI_UpdateLayeredWindowEx($hWnd, $hBitmap, 255, 1)
EndFunc   ;==>_SetBitmap

Func WM_SIZING($hWnd, $iMsg, $wParam, $lParam)

	Local $tRect

	Switch $hWnd
		Case $hForm
			$tRect = DllStructCreate($tagRECT, $lParam)
			_SetBitmap($hWnd, DllStructGetData($tRect, 3) - DllStructGetData($tRect, 1), DllStructGetData($tRect, 4) - DllStructGetData($tRect, 2))
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZING


WinAPIEx.au3
 
Автор
H

HORRIBLE

Знающий
Сообщения
22
Репутация
10
Ух, последнее вообще в точку!
Спасибо всем ответившим большое.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
OffTopic:
Kaster [?]
я не проверял, из загашника. писалось давно, когда еще многих вещей не знал
А если скрипт оказался бы не рабочим? именно поэтому прежде чем что то кому то советовать, нужно проверять свои “советы” (примеры).
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
OffTopic:
CreatoR
скрипт рабочий. имелось в виду, что не вполне оптимальный. "загашник" подразумевал под собой рабочие скрипты
 
Верх