Что нового

[Данные, строки] Помогите сделать автозаполнение строк по определенным правилам.

HaeMHuK

Новичок
Сообщения
43
Репутация
0
нужно ввести только 1 и 2 поле, остальніе генерируются по ним
Поле1_Имя (пример Jack)
Поле2_Фамилия (пример Walters)

Поле3=имя.фамилия (пример jack.walters)
Поле4= (пример JWalters-xx)

Поле5=имеющийся текст+значение_поля3
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
HaeMHuK
Можно так попробовать:
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 320, 220, -1, -1)
$Input1 = GUICtrlCreateInput("", 10, 10, 300, 20)
$Input2 = GUICtrlCreateInput("", 10, 40, 300, 20)
$Input3 = GUICtrlCreateInput("", 10, 70, 300, 20, $ES_READONLY)
$Input4 = GUICtrlCreateInput("", 10, 100, 300, 20, $ES_READONLY)
$Input5 = GUICtrlCreateInput("", 10, 130, 300, 20, $ES_READONLY)
$Button1 = GUICtrlCreateButton("Go", 110, 170, 100, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$sFromInput1 = GUICtrlRead($Input1)
			$sFromInput2 = GUICtrlRead($Input2)
			If $sFromInput1 And $sFromInput2 Then
				$sToInput3 = $sFromInput1 & '.' & $sFromInput2
				$sToInput4 = $sToInput3 & '-' & Random(1, 1000, 1)
				$sToInput5 = 'My Text ' & $sToInput3
				GUICtrlSetData($Input3, $sToInput3)
				GUICtrlSetData($Input4, $sToInput4)
				GUICtrlSetData($Input5, $sToInput5)
			Else
				MsgBox(16, 'Error', 'Вы заполнили не все поля')
			EndIf
	EndSwitch
WEnd
Или так:
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$iRandom = Random(1, 1000, 1)
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 320, 160, -1, -1)
$Input1 = GUICtrlCreateInput("", 10, 10, 300, 20)
$hInput1 = GUICtrlGetHandle($Input1)
$Input2 = GUICtrlCreateInput("", 10, 40, 300, 20)
$hInput2 = GUICtrlGetHandle($Input2)
$Input3 = GUICtrlCreateInput("", 10, 70, 300, 20, $ES_READONLY)
$Input4 = GUICtrlCreateInput("", 10, 100, 300, 20, $ES_READONLY)
$Input5 = GUICtrlCreateInput("", 10, 130, 300, 20, $ES_READONLY)

GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID, $sFromInput1, $sFromInput2, $sToInput3, $sToInput4, $sToInput3

	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0x0000FFFF)
	If $nNotifyCode = $EN_CHANGE Then
		If $ilParam = $hInput1 Or $ilParam = $hInput2 Then
			$sFromInput1 = GUICtrlRead($Input1)
			$sFromInput2 = GUICtrlRead($Input2)
			$sToInput3 = $sFromInput1 & '.' & $sFromInput2
			$sToInput4 = $sToInput3 & '-' & $iRandom
			$sToInput5 = 'My Text ' & $sToInput3
			GUICtrlSetData($Input3, $sToInput3)
			GUICtrlSetData($Input4, $sToInput4)
			GUICtrlSetData($Input5, $sToInput5)
		EndIf
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
H

HaeMHuK

Новичок
Сообщения
43
Репутация
0
Второй вариант то что мне нужно, спасибо.
Есть только 2 момента.
1)поле4 должно генерировать не поле1.поле2-рандом, а 1я буква 1гополя+значение 2го поля-рандом
пример
ааа
ббб
аббб-рандом
2) и если можно, то чтобы 1 и 2 поля при любом вводе конвертились в формат (Абвгд), первая буква большая, остальные маленькие.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
HaeMHuK
Так?
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$iRandom = Random(1, 1000, 1)
$sMyText = 'My Text '
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 320, 220, -1, -1)
$Input1 = GUICtrlCreateInput("", 10, 10, 300, 20)
$hInput1 = GUICtrlGetHandle($Input1)
$Input2 = GUICtrlCreateInput("", 10, 40, 300, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$hInput2 = GUICtrlGetHandle($Input2)
$Input3 = GUICtrlCreateInput("", 10, 70, 300, 20, $ES_READONLY)
$Input4 = GUICtrlCreateInput("", 10, 100, 300, 20, $ES_READONLY)
$Input5 = GUICtrlCreateInput("", 10, 130, 300, 20, $ES_READONLY)
$Button1 = GUICtrlCreateButton("Сброс", 110, 170, 100, 25)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			GUICtrlSetData($Input1, '')
			GUICtrlSetData($Input2, '')
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID, $sFromInput1, $sFromInput2, $sToInput3, $sToInput4, $sToInput3

	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0x0000FFFF)
	If $nNotifyCode = $EN_CHANGE Then
		If $ilParam = $hInput1 Or $ilParam = $hInput2 Then
			$sFromInput1 = GUICtrlRead($Input1)
			If $sFromInput1 Then
				GUICtrlSetState($Input2, $GUI_ENABLE)
				$sFromInput2 = GUICtrlRead($Input2)
				$sFromInput1 = StringRegExpReplace($sFromInput1, '[0-9]', '')
				$sFromInput1 = StringUpper(StringLeft($sFromInput1, 1)) & StringLower(StringTrimLeft($sFromInput1, 1))
				GUICtrlSetData($Input1, $sFromInput1)
				$sFromInput2 = StringRegExpReplace($sFromInput2, '[0-9]', '')
				$sFromInput2 = StringUpper(StringLeft($sFromInput2, 1)) & StringLower(StringTrimLeft($sFromInput2, 1))
				GUICtrlSetData($Input2, $sFromInput2)
				$sToInput3 = $sFromInput1 & '.' & $sFromInput2
				GUICtrlSetData($Input3, $sToInput3)
				$sToInput4 = StringLeft($sFromInput1, 1) & $sFromInput2 & '-' & $iRandom
				GUICtrlSetData($Input4, $sToInput4)
				$sToInput5 = $sMyText & $sToInput3
				GUICtrlSetData($Input5, $sToInput5)
			Else
				GUICtrlSetState($Input2, $GUI_DISABLE)
				GUICtrlSetData($Input3, '')
				GUICtrlSetData($Input4, '')
				GUICtrlSetData($Input5, '')
			EndIf
		EndIf
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
H

HaeMHuK

Новичок
Сообщения
43
Репутация
0
есть еще один момент на поле 3, там где значение = поле1.поле2.
можно ли как-то поставить лимит на поле 3.
Пробовал GUICtrlSetLimit(-1, 20) но это работает, если вводить вручную, а если заполяется по функции, то безлимит (
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
HaeMHuK [?]
можно ли как-то поставить лимит на поле 3.
Тогда скорее надо лимит вводить на поле 1 и поле 2. А если они безлимитные, то какой длины должно быть значение в поле 3? И с какой стороны его обрезать?
 
Автор
H

HaeMHuK

Новичок
Сообщения
43
Репутация
0
я понял, тогда можно ли сделать окошко, в котором будет счетчик символов?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
HaeMHuK
Так?
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$iRandom = Random(1, 1000, 1)
$sMyText = 'My Text '
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 370, 220, -1, -1)
$Input1 = GUICtrlCreateInput("", 10, 10, 300, 20)
$Input1_1 = GUICtrlCreateInput("", 320, 10, 40, 20, $ES_READONLY)
$hInput1 = GUICtrlGetHandle($Input1)
$Input2 = GUICtrlCreateInput("", 10, 40, 300, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input2_1 = GUICtrlCreateInput("", 320, 40, 40, 20, $ES_READONLY)
$hInput2 = GUICtrlGetHandle($Input2)
$Input3 = GUICtrlCreateInput("", 10, 70, 300, 20, $ES_READONLY)
$Input3_1 = GUICtrlCreateInput("", 320, 70, 40, 20, $ES_READONLY)
$Input4 = GUICtrlCreateInput("", 10, 100, 300, 20, $ES_READONLY)
$Input4_1 = GUICtrlCreateInput("", 320, 100, 40, 20, $ES_READONLY)
$Input5 = GUICtrlCreateInput("", 10, 130, 300, 20, $ES_READONLY)
$Input5_1 = GUICtrlCreateInput("", 320, 130, 40, 20, $ES_READONLY)
$Button1 = GUICtrlCreateButton("Сброс", 135, 170, 100, 25)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			GUICtrlSetData($Input1, '')
			GUICtrlSetData($Input2, '')
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID, $sFromInput1, $sFromInput2, $sToInput3, $sToInput4, $sToInput3

	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0x0000FFFF)
	If $nNotifyCode = $EN_CHANGE Then
		If $ilParam = $hInput1 Or $ilParam = $hInput2 Then
			$sFromInput1 = GUICtrlRead($Input1)
			If $sFromInput1 Then
				GUICtrlSetState($Input2, $GUI_ENABLE)
				$sFromInput2 = GUICtrlRead($Input2)
				$sFromInput1 = StringStripWS(StringRegExpReplace($sFromInput1, _
						'[^a-zA-Zа-яА-Я]', ''), 8)
				$sFromInput1 = StringUpper(StringLeft($sFromInput1, 1)) & _
						StringLower(StringTrimLeft($sFromInput1, 1))
				GUICtrlSetData($Input1, $sFromInput1)
				$sFromInput2 = StringStripWS(StringRegExpReplace($sFromInput2, _
						'[^a-zA-Zа-яА-Я]', ''), 8)
				$sFromInput2 = StringUpper(StringLeft($sFromInput2, 1)) & _
						StringLower(StringTrimLeft($sFromInput2, 1))
				GUICtrlSetData($Input2, $sFromInput2)
				$sToInput3 = $sFromInput1 & '.' & $sFromInput2
				GUICtrlSetData($Input3, $sToInput3)
				$sToInput4 = StringLeft($sFromInput1, 1) & $sFromInput2 & '-' & $iRandom
				GUICtrlSetData($Input4, $sToInput4)
				$sToInput5 = $sMyText & $sToInput3
				GUICtrlSetData($Input5, $sToInput5)

				GUICtrlSetData($Input1_1, StringLen($sFromInput1))
				GUICtrlSetData($Input2_1, StringLen($sFromInput2))
				GUICtrlSetData($Input3_1, StringLen($sToInput3))
				GUICtrlSetData($Input4_1, StringLen($sToInput4))
				GUICtrlSetData($Input5_1, StringLen($sToInput5))
			Else
				GUICtrlSetState($Input2, $GUI_DISABLE)
				GUICtrlSetData($Input3, '')
				GUICtrlSetData($Input4, '')
				GUICtrlSetData($Input5, '')
				GUICtrlSetData($Input1_1, '')
				GUICtrlSetData($Input2_1, '')
				GUICtrlSetData($Input3_1, '')
				GUICtrlSetData($Input4_1, '')
				GUICtrlSetData($Input5_1, '')
			EndIf
		EndIf
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
H

HaeMHuK

Новичок
Сообщения
43
Репутация
0
Спасибо, то, что надо )


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

Сори, кое что забыл. Мне иногда понадобиться изменять поле3. Но при изменении не меняется поле 4. Можно это как то переделать? У меня не выходит.
 
Верх