Что нового

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

bulldog5293

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

snoitaleR

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

kaster

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

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

bulldog5293

Новичок
Сообщения
172
Репутация
9
Знал бы я как это делать то не спрашивал,мне бы хотя бы что ни будь под вид такого

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

Yashied

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

bulldog5293

Новичок
Сообщения
172
Репутация
9
Yashied там нет примера :(
 

kaster

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

bulldog5293

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

kaster

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

bulldog5293

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

Yashied

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

Код:
#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
Репутация
9
Это не то, но всё равно спс, буду сам думать как GUI щкно изменить тогда
 

CreatoR

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

bulldog5293

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 159
Репутация
2 329
bulldog5293
Если это для скинов затеевалось, то есть для этого и другие методы. Например: Convert your normal scripts into EzSkin.
 
Автор
B

bulldog5293

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

CreatoR

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

Переношу...
 

SECTOR

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