Что нового

помогите изучить простейшее окно GUI

saraconor

Новичок
Сообщения
404
Репутация
3
Код:
#include <GUIConstantsEx.au3>

Local $Wind1, $butn1, $msg

$Wind1 = GUICreate("",190,130) ; Создаёт окно в центре экрана

$butn1 = GUICtrlCreateButton("вариант А",10,10,170,50) ;как поменять шрифт? (размер, толщину, цвет)
$butn2 = GUICtrlCreateButton("вариант Б",10,70,170,50)
GUICtrlSetState($butn1, $GUI_FOCUS) ;выделение кнопки
GUISetState(@SW_SHOW,$Wind1) ;показать окно

Do 
$msg = GUIGetMsg()
if ;вот тут надо как-то дать понять что нажата кнопка $butn1 или $butn2
Until $msg = $GUI_EVENT_CLOSE

и кнопки "свернуть, развернуть, закрыть" в заголовке надо убрать как-то, а в идеале вообще заголовок убрать, чтобы верхняя рамочка не отличалась от остальных
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: GUI (с кнопками)

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"GUI (с кнопками)" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Наверное лучше :
Создание окна GUI без системных кнопок
А по теме так :
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
Global $Btn1=0
$h_Form = GUICreate("Demo GUI ", 600, 400)
GUISetBkColor(0xECE9D8)
GUISetState(@SW_SHOW, $h_Form)
$h_Window=GUICreate("Window", 100, 200, -1, -1, $WS_CAPTION)
$_ButTest=GUICtrlCreateButton( "Test", 40, 175, 60, 25)

GUISetState(@SW_SHOW, $h_Window)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $_ButTest
			GUIDelete($h_Window)
			$Btn1=1
			 MsgBox(48, "", "$Btn1=" & $Btn1)
	EndSwitch
WEnd
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
saraconor [?]
вот тут надо как-то дать понять что нажата кнопка $butn1 или $butn2
Разве это соответствует тому, что было сказано вначале ???
Так ?
Код:
#include <GUIConstantsEx.au3>

;Local $Wind1, $butn1, $msg;  Вы не можете задать в основном теле скрипта локальную переменную, она все равно будет глобальной.

$Wind1 = GUICreate("",190,130) ; Создаёт окно в центре экрана

$butn1 = GUICtrlCreateButton("вариант А",10,10,170,50)
$butn2 = GUICtrlCreateButton("вариант Б",10,70,170,50)
GUICtrlSetState($butn1, $GUI_FOCUS) ;выделение кнопки
GUISetState(@SW_SHOW,$Wind1) ;показать окно

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $butn1,$butn2
			MsgBox(48, "", "Нажата кнопка :" & $nMsg)

	EndSwitch
WEnd
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
saraconor
Делайте лучше как написал gregaz могу даже прокомментировать строчки
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>

Global $Btn1 = 0 ;просто объявляем переменную

$h_Window = GUICreate("Window", 100, 200, 100,200) ;создаем окно
$_ButTest = GUICtrlCreateButton( "Test", 40, 70, 60, 25) ;создаем кнопку
GUISetState(@SW_SHOW, $h_Window) ;показываем форму

While 1       ;создаем бесконечный цикл для опроса программы (что бы она не закрылась)
    $nMsg = GUIGetMsg() ; проверяем есть ли у нас сообщения от формы, что какая либо кнопка была нажата
    Switch $nMsg   ;если таковые есть, то проверяем что это была за кнопка
        Case $GUI_EVENT_CLOSE     ;кнопка "Закрыть"
            Exit
        Case $_ButTest  ;Наша кнопка
            $Btn1 = 1    
             MsgBox(48, "", "$Btn1=" & $Btn1)
    EndSwitch
WEnd



P.S. И не нужно пожалуйста, удалять тест сообщений. Если Вы ошиблись в чем либо - ну и пусть.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может наглядней так :
Код:
;MsgBox(48, "", "Нажата кнопка :" & $nMsg)
MsgBox(48, "", "Нажата кнопка :" & GuiCtrlRead($nMsg))



Добавлено:
Сообщение автоматически объединено:

saraconor [?]
и кнопки "свернуть, развернуть, закрыть" в заголовке надо убрать как-то

Это достигается установкой стиля окна
Код:
$Wind1=GUICreate("Window", 100, 200, -1, -1, $WS_CAPTION)




Добавлено:
Сообщение автоматически объединено:

saraconor [?]
а в идеале вообще заголовок убрать, чтобы верхняя рамочка не отличалась от остальных
Может так :
Код:
$Wind1 = GUICreate("",190,130, -1, -1,$WS_POPUP, $WS_EX_CLIENTEDGE )


Только надо добавлять в начале:
Код:
#include <WindowsConstants.au3>
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
saraconor
А справка у вас есть? Там же примеры есть.

а в идеале вообще заголовок убрать
Код:
#include <WindowsConstants.au3>

GUICreate('пример', 300, 220, -1, -1, BitOr($WS_BORDER, $WS_POPUP, $WS_SYSMENU), $WS_EX_CONTROLPARENT)
$iButton = GUICtrlCreateButton('X', 270, 10, 22, 22)
GUISetState()
While 1
	Switch GUIGetMsg()
		Case $iButton
			Exit
		Case -3
			Exit
	EndSwitch
WEnd
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Спасибо уважаемому gregaz, разобралась, может код немного корявый, но работает как и задумано)
И Medic84, ваши комментарии тоже очень полезны оказались.

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

Local $Wind1, $butn1, $msg

$pos = MouseGetPos()
$pos[0] = $pos[0] - 100
$pos[1] = $pos[1] - 60
$Wind1 = GUICreate("",190,130,$pos[0],$pos[1],$WS_POPUP, $WS_EX_CLIENTEDGE) ; Создаёт окно в центре экрана

$butn1 = GUICtrlCreateButton("Вариант"&@CR&"А",10,10,170,50)
$butn2 = GUICtrlCreateButton("вариант Б",10,70,170,50)
GUICtrlSetState($butn1, $GUI_FOCUS) ;выделение кнопки
GUISetState(@SW_SHOW,$Wind1) ;показать окно

Do 
$msg = GUIGetMsg()
if $msg = 3 then
ToolTip("вариант А")
sleep(500)	
Exit
EndIf

if $msg = 4 then
ToolTip("вариант Б")
sleep(500)
Exit
EndIf
Until $msg = $GUI_EVENT_CLOSE


Как поменять шрифт (толщину, размер, стиль) на кнопке, и почему @CR не работает как должно там? (т.е. не переносит строку ниже)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
saraconor [?]
Как поменять шрифт (толщину, размер, стиль) на кнопке

GUICtrlSetFont
saraconor [?]
почему @CR не работает как должно там? (т.е. не переносит строку ниже)

Надо добавить стиль многострочия:
Код:
#include <ButtonConstants.au3> 
$butn1 = GUICtrlCreateButton("Вариант"&@CR&"А",10,10,170,50,$BS_MULTILINE )
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
saraconor [?]
Как поменять шрифт (толщину, размер, стиль) на кнопке, и почему @CR не работает как должно там? (т.е. не переносит строку ниже)
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.



Читайте справку, там все это есть.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот еще интересный вариант, гуи без заголовков и бордюров + одна кнопка
Код:
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>

Global Const $SC_DRAGMOVE = 0xF012

Example()

Func Example()
    Local $iHeight = 250, $iWidth = 400

    Local $hGUI = GUICreate('', $iWidth, $iHeight, Default, Default, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
    GUICtrlCreateGroup('', 0, -5, $iWidth, $iHeight + 5, $WS_THICKFRAME)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    Local $iClose = GUICtrlCreateButton('Close', $iWidth - 100, $iHeight - 40, 85, 25)

    GUISetState(@SW_SHOW, $hGUI)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $iClose
                ExitLoop

            Case $GUI_EVENT_PRIMARYDOWN
                _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)

        EndSwitch
    WEnd

    GUIDelete($hGUI)
EndFunc   ;==>Example
 

osminog

Новичок
Сообщения
1
Репутация
0
inververs хороший пример окна, а как сделать:
1 - данное окно на весь экран?
2 - кнопка "Close" исчезала и появлялась при движении курсора мышки?
Спасибо!
 
Верх