Что нового

Графическая оболочка

bulldog5293

Знающий
Сообщения
172
Репутация
10
А можно ли в AutoIT создать графическую оболочку для окна GUI, не прямоугольником чистым, а с выступами? Если да, то как не подскажите с примером, если можно. . :IL_AutoIt_1:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Мне не приходилось создавать настолько сложные окна, которые нельзя было бы вручную в блокноте составить... :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
можно
пример
Код:
Opt('GUIOnEventMode', 1)
GUICreate('MyGui')
GUISetState()
GUISetOnevent(-3, '_Exit')
While 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Знал бы я как это делать то не спрашивал,мне бы хотя бы что ни будь под вид такого
PRO1.jpg

если изображение большое, то ссори, я не знаю как уменьшить
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
См. _WinAPI_CreateRoundRectRgn() в справке. Там есть пример.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
bulldog5293 сказал(а):
Знал бы я как это делать то не спрашивал,мне бы хотя бы что ни будь под вид такого
чтобы делать такое, надо для начала научиться делать простые вещи.
бери хелп, и шерсти все ссылки/команды/функции по теме GUICreate(). просто так не научишься. хелп кстати говоря в autoit самый грамотный, из виденных мной
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Что самый грамотный я знаю, но в нём не всё порусски, а с английским я хромаю
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
расслабься ;D
со словарем справишься ;)
кстати, автор хелпа (и по совместительству автор AutoIt) тоже с английским не на все 100 владеет, есть неправильные моменты. но это правда не мешает понять общую картину - так, мелочи.
вобщем, там все просто. вот что я хотел сказать :smile:
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Ну дайте мне хоть простой пример как окно можно видоизменить чтоб я знал куда идти и что искать
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это из справки (англ.).

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

; get height of window title and width of window frame - may be different when XP theme is ON/OFF
Global $htit = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
Global $frame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME)

$gui = GUICreate("Test Windows regions", 350, 210)
$btn_default = GUICtrlCreateButton("Default region", 100, 30, 150)
$btn_round = GUICtrlCreateButton("Round region", 100, 60, 150)
$btn_buble = GUICtrlCreateButton("Buble region ", 100, 90, 150)
$btn_transparent = GUICtrlCreateButton("Transparent region", 100, 120, 150)
$btn_exit = GUICtrlCreateButton("Exit", 100, 150, 150)
GUISetState(@SW_SHOW)

$pos = WinGetPos($gui) ; get whole window size (no client size defined in GUICreate)
Global $width = $pos[2]
Global $height = $pos[3]

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit
			ExitLoop

		Case $msg = $btn_default
			$rgn = _WinAPI_CreateRectRgn(0, 0, $width, $height)
			_WinAPI_SetWindowRgn($gui, $rgn)

		Case $msg = $btn_round
			$rgn = _WinAPI_CreateRoundRectRgn(0, 0, $width, $height, $width / 3, $height / 3)
			_WinAPI_SetWindowRgn($gui, $rgn)

		Case $msg = $btn_buble
			$rgn1 = _WinAPI_CreateRoundRectRgn(0, 0, $width / 2, $height / 2, $width / 2, $height / 2) ; left-top
			$rgn2 = _WinAPI_CreateRoundRectRgn($width / 2, 0, $width, $height / 2, $width / 2, $height / 2) ; right-top
			_WinAPI_CombineRgn($rgn1, $rgn1, $rgn2, $RGN_OR)
			_WinAPI_DeleteObject($rgn2)
			$rgn2 = _WinAPI_CreateRoundRectRgn(0, $height / 2, $width / 2, $height, $width / 2, $height / 2) ; left-bottom
			_WinAPI_CombineRgn($rgn1, $rgn1, $rgn2, $RGN_OR)
			_WinAPI_DeleteObject($rgn2)
			$rgn2 = _WinAPI_CreateRoundRectRgn($width / 2, $height / 2, $width, $height, $width / 2, $height / 2) ; right-bottom
			_WinAPI_CombineRgn($rgn1, $rgn1, $rgn2, $RGN_OR)
			_WinAPI_DeleteObject($rgn2)
			$rgn2 = _WinAPI_CreateRoundRectRgn(10, 10, $width - 10, $height - 10, $width, $height) ; middle
			_WinAPI_CombineRgn($rgn1, $rgn1, $rgn2, $RGN_OR)
			_WinAPI_DeleteObject($rgn2)
			_WinAPI_SetWindowRgn($gui, $rgn1)

		Case $msg = $btn_transparent
			_GuiHole($gui, 40, 40, 260, 170)

	EndSelect
WEnd

; make inner transparent area but add controls
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
	Local $outer_rgn, $inner_rgn, $combined_rgn

	$outer_rgn = _WinAPI_CreateRectRgn(0, 0, $width, $height)
	$inner_rgn = _WinAPI_CreateRectRgn($i_x, $i_y, $i_x + $i_sizew, $i_y + $i_sizeh)
	$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
	_WinAPI_CombineRgn($combined_rgn, $outer_rgn, $inner_rgn, $RGN_DIFF)
	_WinAPI_DeleteObject($outer_rgn)
	_WinAPI_DeleteObject($inner_rgn)
	_AddCtrlRegion($combined_rgn, $btn_default)
	_AddCtrlRegion($combined_rgn, $btn_round)
	_AddCtrlRegion($combined_rgn, $btn_buble)
	_AddCtrlRegion($combined_rgn, $btn_transparent)
	_AddCtrlRegion($combined_rgn, $btn_exit)
	_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc   ;==>_GuiHole

; add control's area to given region
; respecting also window title/frame sizes
Func _AddCtrlRegion($full_rgn, $ctrl_id)
	Local $ctrl_pos, $ctrl_rgn

	$ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
	$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0] + $frame, $ctrl_pos[1] + $htit + $frame, _
			$ctrl_pos[0] + $ctrl_pos[2] + $frame, $ctrl_pos[1] + $ctrl_pos[3] + $htit + $frame)
	_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
	_WinAPI_DeleteObject($ctrl_rgn)
EndFunc   ;==>_AddCtrlRegion


А это из моей WinAPIEx.au3 библиотеки.

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

Opt('MustDeclareVars', 1)

Global $hForm, $Button, $hRgn

Dim $aPoint[10][2] = [[0, 180], [190, 180], [250, 0], [308, 180], [500, 180], [344, 294], [404, 475], [250, 362], [94, 475], [154, 294]]

$hForm = GUICreate('MyGUI', 500, 475, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
$Button = GUICtrlCreateButton('Exit', 215, 255, 70, 23)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetBkColor(0xAA0000)

$hRgn = _WinAPI_CreatePolygonRgn($aPoint)
_WinAPI_SetWindowRgn($hForm, $hRgn)

GUISetState()

Do
Until GUIGetMsg() = $Button

Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
	If _WinAPI_DefWindowProc($hWnd, $Msg, $wParam, $lParam) = $HTCLIENT Then
		Return $HTCAPTION
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Это не то, но всё равно спс, буду сам думать как GUI щкно изменить тогда
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Прикрепил старый пример на эту тему - использует bmp файл-оболочку.
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
CreatoR спс, :laugh: как печёнкой чуел что ты ответ на этот вопрос точно знаеш. :IL_AutoIt_1:
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Ещё раз спс CreatoR, просто до меня дошло что нужен скин когда я спать пошёл, спс за ответ :IL_AutoIt_1: тема закрыта
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Я только сейчас заметил, что данная тема находится не в положенном ей разделе.

Переношу...
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Я не помню точно, но такая тема вроде уже была! Там про $WS_POPUP речь шла! ;)
 
Верх