Что нового

[Элементы GUI] Работа со значениями элементов

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
создал окно с элементами ввода данных.
есть элемент GUICtrlCreateEdit для ввода сообщения и три элемента GUICtrlCreateCombo.
в них выбирается размер шрифта, жирность, и сам шрифт. как сделать чтобы при выборе определенного значения в GUICtrlCreateCombo это значение присваилось соответствующему значению в GUICtrlSetFont. то есть изначально пишешь
Код:
GUICtrlSetFont(-1, $SIZE,$FATF, 0, $FONT)

а значения переменных берутся из выбранных значений в GUICtrlCreateCombo и применяются..
и еще вопрос: как одним кликом по GUICtrlCreateButton копировать значение из GUICtrlCreateInput и вставить в GUICtrlCreateEdit
перед тем как спросить сильно курил справку... но видимо от курения в мозгу замкнуло. :smile:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Я пока направлю на путь истинный ;)

1.Создать цикл проверки значений 3-х элементов GUICtrlCreateCombo. Если значение было изменено, то устанавливать новое.
2.По второму вопросу: Используй
Код:
GUICtrlRead()

Код:
GuiCtrlSetData()
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
так и было с путем истинным. сначала я использовал эти функции, а когда не получилось, то написал здесь. ;)
с чтением из строк ввода я знаком. и уже знаком с назначением значения (каламбур)
но нет результата. я так понял что при запуске скрипт берет первое значение а потом не может обновить значение , когда я выбираю другое. вот в чем вопрос.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Александр сказал(а):
я так понял что при запуске скрипт берет первое значение а потом не может обновить значение , когда я выбираю другое. вот в чем вопрос.
Приведи пример проблемного скрипта
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот этот скрипт
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$GO_MESSAGE = GUICreate("ОТПРАВКА СООБЩЕНИЙ", 943, 579, -1, -1)
$LOGIN = GUICtrlCreateInput("Логин", 64, 24, 121, 21)
GUICtrlSetColor(-1, 0x000080)
$PASSWORD = GUICtrlCreateInput("Пароль", 64, 80, 121, 21)
GUICtrlSetColor(-1, 0x000080)
$ADRESS = GUICtrlCreateCombo("http//:", 1, 200, 361, 25)
$Label3 = GUICtrlCreateLabel("ССЫЛКА НА ТЕМУ", 8, 176, 102, 17)
GUICtrlSetColor(-1, 0x000080)
$Label5 = GUICtrlCreateLabel("ПАРОЛЬ", 8, 88, 49, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label4 = GUICtrlCreateLabel("ЛОГИН", 8, 32, 50, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label1 = GUICtrlCreateLabel("СООБЩЕНИЕ", 16, 232, 74, 17)
GUICtrlSetColor(-1, 0x000080)
$GO = GUICtrlCreateButton("ОТВЕТИТЬ", 784, 544, 107, 25, $WS_GROUP)
$NEW_ADRES_TEMA = GUICtrlCreateInput("http//:", 368, 200, 409, 21)
$Label2 = GUICtrlCreateLabel("ДОБАВИТЬ ТЕМУ", 376, 176, 106, 17)
GUICtrlSetColor(-1, 0x004E98)
$INSERT_NEW_TEMA = GUICtrlCreateButton("ДОБАВИТЬ", 680, 168, 91, 25, $WS_GROUP)
$FONT = GUICtrlCreateCombo("Arial", 792, 360, 121, 25)
GUICtrlSetData(-1,"Arial Bold|MS Sans Serif|Arial Bold Italic|Arial Italic|Courier|Courier New|Courier New Bold Italic|Lucida Console|MS Sans Serif|Tahoma|Times New Roman|Times New Roman Bold Italic")
$Label7 = GUICtrlCreateLabel("Шрифт", 792, 336, 38, 17)
$SIZEFONT = GUICtrlCreateCombo("8.5", 792, 424, 121, 25)
GUICtrlSetData(-1, "9|10|11|12|13|14|15|16|17|18|19|20|")
$Label8 = GUICtrlCreateLabel("Размер шрифта", 792, 400, 85, 17)
$FATFONT = GUICtrlCreateCombo("400", 792, 488, 121, 25)
GUICtrlSetData(-1,"500|600|700|800|900|1000")
$Label9 = GUICtrlCreateLabel("Жирный шрифта", 792, 464, 98, 17)
$NEW_LOG = GUICtrlCreateButton("СОЗДАТЬ ЛОГ", 816, 16, 99, 25, $WS_GROUP)
$DELLOG = GUICtrlCreateButton("УДАЛИТЬ ЛОГ", 816, 72, 99, 25, $WS_GROUP)
$EDITLOG = GUICtrlCreateButton("РЕДАКТИРОВАТЬ ЛОГ", 784, 128, 131, 25, $WS_GROUP)
$ADRES_IN_MESSAGE = GUICtrlCreateInput("http//:", 1, 136, 361, 21)
$Label10 = GUICtrlCreateLabel("Добавить ссылку в сообщение", 8, 112, 163, 17)
$ADRES_INSERT_MESAGE = GUICtrlCreateButton("ДОБАВИТЬ", 272, 104, 83, 25, $WS_GROUP)
$MESSAGE = GUICtrlCreateEdit("Введи не менее 10 символов!", 1, 256, 777, 321)
GUICtrlSetFont(-1, 9,$FATF, 0, $F)


GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
				EndSwitch
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $FONT, $SIZEFONT, $FATFONT
			GUICtrlSetFont($MESSAGE, GUICtrlRead($SIZEFONT), GUICtrlRead($FATFONT), 0, GUICtrlRead($FONT))
	EndSwitch
WEnd
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
нечто подобное уже пробовал. клинит весь скрипт.. нет окна. в трее висит значок. если вовремя не отрубить, то вешает систему ( у меня ХР) .
 

Yashied

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

:Virus:

Как вешает?!? Вот твой скрипт, все работает.

Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $SIZEFONT, $FATFONT, $FONT, $url = "[URL=http://", $urlend = "]", $urlend = "[/URL]", $SF, $FATF, $F

$GO_MESSAGE = GUICreate("ОТПРАВКА СООБЩЕНИЙ", 943, 579, -1, -1)
$LOGIN = GUICtrlCreateInput("Логин", 64, 24, 121, 21)
GUICtrlSetColor(-1, 0x000080)
$PASSWORD = GUICtrlCreateInput("Пароль", 64, 80, 121, 21)
GUICtrlSetColor(-1, 0x000080)
$ADRESS = GUICtrlCreateCombo("http//:", 1, 200, 361, 25)
$Label3 = GUICtrlCreateLabel("ССЫЛКА НА ТЕМУ", 8, 176, 102, 17)
GUICtrlSetColor(-1, 0x000080)
$Label5 = GUICtrlCreateLabel("ПАРОЛЬ", 8, 88, 49, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label4 = GUICtrlCreateLabel("ЛОГИН", 8, 32, 50, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label1 = GUICtrlCreateLabel("СООБЩЕНИЕ", 16, 232, 74, 17)
GUICtrlSetColor(-1, 0x000080)
$GO = GUICtrlCreateButton("ОТВЕТИТЬ", 784, 544, 107, 25, $WS_GROUP)
$NEW_ADRES_TEMA = GUICtrlCreateInput("http//:", 368, 200, 409, 21)
$Label2 = GUICtrlCreateLabel("ДОБАВИТЬ ТЕМУ", 376, 176, 106, 17)
GUICtrlSetColor(-1, 0x004E98)
$INSERT_NEW_TEMA = GUICtrlCreateButton("ДОБАВИТЬ", 680, 168, 91, 25, $WS_GROUP)
$FONT = GUICtrlCreateCombo("Arial", 792, 360, 121, 25)
GUICtrlSetData(-1, "Arial Bold|MS Sans Serif|Arial Bold Italic|Arial Italic|Courier|Courier New|Courier New Bold Italic|Lucida Console|MS Sans Serif|Tahoma|Times New Roman|Times New Roman Bold Italic")
$Label7 = GUICtrlCreateLabel("Шрифт", 792, 336, 38, 17)
$SIZEFONT = GUICtrlCreateCombo("8.5", 792, 424, 121, 25)
GUICtrlSetData(-1, "9|10|11|12|13|14|15|16|17|18|19|20|")
$Label8 = GUICtrlCreateLabel("Размер шрифта", 792, 400, 85, 17)
$FATFONT = GUICtrlCreateCombo("400", 792, 488, 121, 25)
GUICtrlSetData(-1, "500|600|700|800|900|1000")
$Label9 = GUICtrlCreateLabel("Жирный шрифта", 792, 464, 98, 17)
$NEW_LOG = GUICtrlCreateButton("СОЗДАТЬ ЛОГ", 816, 16, 99, 25, $WS_GROUP)
$DELLOG = GUICtrlCreateButton("УДАЛИТЬ ЛОГ", 816, 72, 99, 25, $WS_GROUP)
$EDITLOG = GUICtrlCreateButton("РЕДАКТИРОВАТЬ ЛОГ", 784, 128, 131, 25, $WS_GROUP)
$ADRES_IN_MESSAGE = GUICtrlCreateInput("http//:", 1, 136, 361, 21)
$Label10 = GUICtrlCreateLabel("Добавить ссылку в сообщение", 8, 112, 163, 17)
$ADRES_INSERT_MESAGE = GUICtrlCreateButton("ДОБАВИТЬ", 272, 104, 83, 25, $WS_GROUP)
$MESSAGE = GUICtrlCreateEdit("Введи не менее 10 символов!", 1, 256, 777, 321)
;GUICtrlSetFont(-1, 9, $FATF, 0, $F)


GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $FONT, $SIZEFONT, $FATFONT
			GUICtrlSetFont($MESSAGE, GUICtrlRead($SIZEFONT), GUICtrlRead($FATFONT), 0, GUICtrlRead($FONT))
	EndSwitch
WEnd
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Yashied спасибо...
осталось еще одно :
как одним кликом по GUICtrlCreateButton копировать значение из GUICtrlCreateInput и вставить в GUICtrlCreateEdit
 

Yashied

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

Код:
#Include <GUIConstantsEx.au3>

GUICreate('MyGUI', 400, 300)
$Input = GUICtrlCreateInput('', 20, 20, 284, 21)
$Button = GUICtrlCreateButton('Вставить', 310, 19, 70, 23)
$Edit = GUICtrlCreateEdit('', 20, 60, 360, 220)
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button
			GUICtrlSetData($Edit, GUICtrlRead($Input), 1)
	EndSwitch
WEnd
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
все получилось.. делал то же самое только не правильно в скрипте располагал ... спасибо за помощь

можно ли сделать чтобы не весь шрифт менялся а только выделеный? это по размеру и прочим параметрам?
прошу прощения за наглость
 

Yashied

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

С GUICtrlCreateEdit() нельзя.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
создал окно GUICreate в нем есть элемент GUICtrlCreateEdit есть кнопка, которая вызывает еще одно окно GUICtrlCreateEdit, в которое я ввожу данные и жму ок. происходит передача данных в предыдущее окно а второе окно исчезает. вроде бы все нормально, но после этого в основном окне все элементы не работают, то есть весь функционал что на них навешан, а точнее остальные кнопки с функциями.. как сделать чтобы такого не происходило.. была передача значения , но и сохранялось функциональность первого окна..
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Александр сказал(а):
создал окно GUICreate в нем есть элемент GUICtrlCreateEdit есть кнопка, которая вызывает еще одно окно GUICtrlCreateEdit, в которое я ввожу данные и жму ок. происходит передача данных в предыдущее окно а второе окно исчезает. вроде бы все нормально, но после этого в основном окне все элементы не работают, то есть весь функционал что на них навешан, а точнее остальные кнопки с функциями.. как сделать чтобы такого не происходило.. была передача значения , но и сохранялось функциональность первого окна..

И где твой пример, который так плохо ведет себя?
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот простой пример
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


$Form = GUICreate("Form1", 633, 447, 335, 166)
$Edit = GUICtrlCreateEdit("", 40, 80, 561, 129)
GUICtrlSetData(-1, "Edit1")
$Button11 = GUICtrlCreateButton("Button1", 104, 240, 75, 25, $WS_GROUP)
$Button22 = GUICtrlCreateButton("Button2", 456, 248, 75, 25, $WS_GROUP)
$Button33 = GUICtrlCreateButton("Button3", 96, 328, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button11
_edit()
Case $Button22
	Exit
Case $Button33
	Exit
	EndSwitch
WEnd


Func _edit()
$Form1 = GUICreate("Form1", 416, 242, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 96, 40, 185, 89)
GUICtrlSetData(-1, "Edit1")
$Button1 = GUICtrlCreateButton("Button1", 128, 176, 155, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			GUICtrlSetData($Edit, GUICtrlRead($Edit1), 1)
			GUIDelete()
	EndSwitch
WEnd
EndFunc

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

можно то можно, но как? в предложенном коде можно показать реализацию?
 

Yashied

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

Код:
Func _edit()
	$Form1 = GUICreate('Form1', 416, 242, 192, 124)
	$Edit1 = GUICtrlCreateEdit('', 96, 40, 185, 89)
	GUICtrlSetData(-1, 'Edit1')
	$Button1 = GUICtrlCreateButton('Button1', 128, 176, 155, 25)
	GUISetState(@SW_SHOW)

	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $Button1
				GUICtrlSetData($Edit, GUICtrlRead($Edit1), 1)
				GUIDelete()
				Return
		EndSwitch
	WEnd
EndFunc   ;==>_edit


Но лучше делать так (сравни).

Код:
Func _edit()
	GUISetState(@SW_DISABLE, $Form)
	$Form1 = GUICreate('Form1', 416, 242, 192, 124, -1, -1, $Form)
	$Edit1 = GUICtrlCreateEdit('', 96, 40, 185, 89)
	GUICtrlSetData(-1, 'Edit1')
	$Button1 = GUICtrlCreateButton('Button1', 128, 176, 155, 25)
	GUISetState(@SW_SHOW, $Form1)

	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $Button1
				GUICtrlSetData($Edit, GUICtrlRead($Edit1), 1)
				ExitLoop
		EndSwitch
	WEnd
	DllCall('user32.dll', 'int', 'SetActiveWindow', 'hwnd', $Form)
	GUIDelete($Form1)
	GUISetState(@SW_ENABLE, $Form)
EndFunc   ;==>_edit
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
спасибо. работают оба варианта.. но почему второй лучше? только потому что вызывается функция библиотеки системы?
 

Yashied

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

Нет. Второй блокирует первое окно, и разблокирует, когда ты закрываешь второе. Я же написал сравни. Попробуй щелкни по первому окну. :smile:
 
Верх