#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $textDef="Введите данные"
$Form1 = GUICreate("Form1", 313, 140)
$Input1 = GUICtrlCreateInput($textDef, 0, 16, 249, 21)
GUICtrlSetFont(-1, 9, 400, 2, "MS Sans Serif")
GUICtrlSetColor(-1, 0xC0C0C0)
Global $hIn=GUICtrlGetHandle($Input1)
$b=GUICtrlCreateButton("",0,40,100,21)
GUICtrlSetState(-1,$gui_focus)
GUIRegisterMsg($wm_command,"__EditInput")
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func __EditInput($hWnd,$Msg,$wPar,$lPar)
If $hWnd=$Form1 Then
Local $hW=ControlGetHandle("[active]",'',''),$rI=GUICtrlRead($Input1)
If $hW=$hIn Then
If $rI=$textDef Then GUICtrlSetData($Input1,"")
GUICtrlSetFont($Input1,9)
GUICtrlSetColor($Input1,0x060606)
Else
If $rI="" Then
GUICtrlSetData($Input1,$textDef)
GUICtrlSetFont($Input1,9,400,2,"MS Sans Serif")
GUICtrlSetColor($Input1,0xC0C0C0)
EndIf
EndIf
EndIf
EndFunc
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Test", 405, 139, 293, 288)
$Input1 = GUICtrlCreateInput("", 8, 8, 121, 21)
$Input2 = GUICtrlCreateInput("", 8, 32, 121, 21)
$Input3 = GUICtrlCreateInput("", 8, 56, 121, 21)
$Input4 = GUICtrlCreateInput("", 8, 80, 121, 21)
$Button1 = GUICtrlCreateButton("", 8, 104, 123, 25)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState(@SW_SHOW)
Global $aDefaultData[4][2] = [ _
[$Input1, 'Имя пользователя'], _
[$Input2, 'Пароль пользователя'], _
[$Input3, 'Site login'], _
[$Input4, 'Site Password'] _
]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
__set_defalt()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Switch $nNotifyCode
Case $EN_SETFOCUS
If GUICtrlRead($nID) = __get_default($nID) Then
GUICtrlSetColor($nID, Default)
GUICtrlSetData($nID, '')
EndIf
Case $EN_KILLFOCUS
If Not GUICtrlRead($nID) Then
GUICtrlSetColor($nID, 0xff0010)
GUICtrlSetData($nID, __get_default($nID))
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func __set_defalt($nID = $aDefaultData)
If IsArray($nID) Then
For $i = 0 To UBound($aDefaultData) - 1
__set_defalt($aDefaultData[$i][0])
Next
Else
GUICtrlSetColor($nID, 0xff0010)
GUICtrlSetData($nID, __get_default($nID))
EndIf
EndFunc ;==>__set_defalt
Func __get_default($nID)
For $i = 0 To UBound($aDefaultData) - 1
If $aDefaultData[$i][0] = $nID Then Return SetError(0, 0, $aDefaultData[$i][1])
Next
Return SetError(1, 0, '')
EndFunc ;==>__get_default
#include <GuiEdit.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global $oInput, $iCount = 5, $sDef = 'Введите что-нибудь'
$oInput = ObjCreate('Scripting.Dictionary')
$hGui = GUICreate('Fone text input', 250, 160)
For $i = 0 To $iCount - 1
$oInput.Add(GUICtrlCreateInput($sDef, 10, 10 + 30 * $i, 230, 20), 0)
GUICtrlSetFont(-1, 11, 400, 2)
GUICtrlSetColor(-1, 0xC0C0C0)
Next
GUICtrlCreateLabel('', 0, 0, 0, 0)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _WM_COMMAND($h_Wnd, $i_Msg, $i_wParam, $i_lParam)
Local $i_ID = BitAND($i_wParam, 0xFFFF), $i_Code = BitShift($i_wParam, 16), $s_Read
If $oInput.Exists($i_ID) Then
$s_Read = GUICtrlRead($i_ID)
Switch $i_Code
Case $EN_SETFOCUS
If $s_Read = $sDef Then
GUICtrlSetData($i_ID, '')
GUICtrlSetFont($i_ID, 10)
GUICtrlSetColor($i_ID, 0x000000)
EndIf
Case $EN_KILLFOCUS
If Not $s_Read Then
GUICtrlSetData($i_ID, $sDef)
GUICtrlSetFont($i_ID, 11, 400, 2)
GUICtrlSetColor($i_ID, 0xC0C0C0)
EndIf
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_COMMAND
#include <array.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Test", 405, 139, 324, 303)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
$Input2 = GUICtrlCreateInput("Input2", 8, 32, 121, 21)
$Input3 = GUICtrlCreateInput("Input3", 8, 56, 121, 21)
$Input4 = GUICtrlCreateInput("Input4", 8, 80, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 8, 104, 123, 25)
GUISetState(@SW_SHOW)
Global Enum $iName,$iSave,$iData,$iDefault,$iUBOUND
Global $aData[GUICtrlCreateDummy()][$iUBOUND]
;Теперь можно обращаться к элементам массива по "именам" контролов
$aData[$Input1][$iName] = 'Input'
$aData[$Input1][$iSave] = 'ini_login'
$aData[$Input1][$iData] = '0'
$aData[$Input1][$iDefault] = 'Введите пароль'
_ArrayDisplay($aData)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Test", 405, 139, 324, 303)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
$Input2 = GUICtrlCreateInput("Input2", 8, 32, 121, 21)
$Input3 = GUICtrlCreateInput("Input3", 8, 56, 121, 21)
$Input4 = GUICtrlCreateInput("Input4", 8, 80, 121, 21)
$Button1 = GUICtrlCreateButton("Выход", 8, 104, 123, 25)
GUICtrlSetState($Button1, $GUI_FOCUS)
GUISetState(@SW_SHOW)
Global Const $FILE_CONFIG = @ScriptDir & '\config.ini'
Global Const $DEFAULT_COLOR = 0xff0010
Global Enum $iDefault, $iData, $iConfig,$iDefColor, $iUBOUND
Global $aConfig[GUICtrlCreateDummy()][$iUBOUND]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$aConfig[$Input1][$iDefault] = 'Имя пользователя'
$aConfig[$Input1][$iConfig] = 'win_unm'
$aConfig[$Input1][$iDefColor] = 0x00ff00 ;Для этого контрола цвет отличается от по умолчанию
$aConfig[$Input2][$iDefault] = 'Пароль пользователя'
$aConfig[$Input2][$iConfig] = 'win_pss'
$aConfig[$Input3][$iDefault] = 'Логин сайта'
$aConfig[$Input3][$iConfig] = 'site_log'
$aConfig[$Input4][$iDefault] = 'Пароль сайта'
$aConfig[$Input4][$iConfig] = 'site_pss'
__read_config()
Do
Until GUIGetMsg() = $Button1
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Switch $nNotifyCode
Case $EN_SETFOCUS
If GUICtrlRead($nID) = $aConfig[$nID][$iDefault] Then
GUICtrlSetColor($nID, Default)
GUICtrlSetData($nID, '')
EndIf
Case $EN_KILLFOCUS
If Not GUICtrlRead($nID) Then
GUICtrlSetColor($nID, $aConfig[$nID][$iDefColor]?$aConfig[$nID][$iDefColor]:$DEFAULT_COLOR)
GUICtrlSetData($nID, $aConfig[$nID][$iDefault])
EndIf
If $aConfig[$nID][$iData] <> GUICtrlRead($nID) Then
$aConfig[$nID][$iData] = GUICtrlRead($nID)
__save_config($nID)
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func __read_config()
For $nID = 0 To UBound($aConfig) - 1
$aConfig[$nID][$iData] = IniRead($FILE_CONFIG, 'main', $aConfig[$nID][$iConfig], $aConfig[$nID][$iDefault])
If $aConfig[$nID][$iData] And $aConfig[$nID][$iData] = $aConfig[$nID][$iDefault] Then
GUICtrlSetColor($nID, $aConfig[$nID][$iDefColor]?$aConfig[$nID][$iDefColor]:$DEFAULT_COLOR)
GUICtrlSetData($nID, $aConfig[$nID][$iDefault])
ElseIf $aConfig[$nID][$iData] Then
GUICtrlSetData($nID, $aConfig[$nID][$iData])
EndIf
Next
EndFunc ;==>__read_config
Func __save_config($nID)
If $aConfig[$nID][$iConfig] Then IniWrite($FILE_CONFIG, 'main', $aConfig[$nID][$iConfig], $aConfig[$nID][$iData])
EndFunc ;==>__save_config
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
$LngTitle = 'Моя программа'
$LngEnPs = 'Пиши сюда'
$LngOut = 'Результат'
$LenDef = StringLen($LngEnPs)
$Gui = GUICreate($LngTitle, 250, 90)
$key = GUICtrlCreateInput($LngEnPs, 10, 5, 230, 22)
GUICtrlSetFont(-1, -1, -1, 2)
GUICtrlSetColor(-1, 0x999999)
$out = GUICtrlCreateInput($LngOut, 10, 30, 230, 22)
GUICtrlSetFont(-1, -1, -1, 2)
GUICtrlSetColor(-1, 0x999999)
GUISetState()
Send('{home}')
GUIRegisterMsg(0x0111, "WM_COMMAND")
Do
Until GUIGetMsg() = -3
Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
Local $nNotifyCode, $nID, $key0
$nNotifyCode = BitShift($iwParam, 16)
$nID = BitAND($iwParam, 0xFFFF)
Switch $nID
Case $key
Switch $nNotifyCode
Case $EN_CHANGE
$key0 = GUICtrlRead($key, 1)
Switch $key0
Case $LngEnPs
GUICtrlSetFont($nID, -1, -1, 2)
GUICtrlSetData($out, $LngOut)
GUICtrlSetFont($out, -1, -1, 2)
Case ''
GUICtrlSetData($nID, $LngEnPs)
GUICtrlSetFont($nID, -1, -1, 2)
GUICtrlSetColor($nID, 0x999999)
GUICtrlSetData($out, $LngOut)
GUICtrlSetFont($out, -1, -1, 2)
GUICtrlSetColor($out, 0x999999)
Send('{home}')
Case Else
If StringRight($key0, $LenDef) = $LngEnPs Then
$key0 = StringTrimRight($key0, $LenDef)
GUICtrlSetData($key, $key0)
EndIf
If StringLeft($key0, $LenDef) = $LngEnPs Then
$key0 = StringTrimLeft($key0, $LenDef)
GUICtrlSetData($key, $key0)
EndIf
GUICtrlSetColor($nID, Default)
GUICtrlSetColor($out, Default)
GUICtrlSetFont($nID, -1, -1, 0)
GUICtrlSetFont($out, -1, -1, 0)
GUICtrlSetData($out, $key0)
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
#include <GUIEdit.au3>
#include <GUIConstantsEx.au3>
Example()
Func Example()
Local $iPassword, $iUsername
$hGUI = GUICreate('Example', 300, 150)
GUISetFont(9, 400, 0, 'Segoe UI')
$iUsername = GUICtrlCreateInput('', 10, 10, 125, 25)
_GUICtrlEdit_SetCueBanner($iUsername, "Search folder")
$iPassword = GUICtrlCreateInput('', 10, 40, 125, 25)
_GUICtrlEdit_SetCueBanner($iPassword, "Search...")
$iClose = GUICtrlCreateButton("Close", 210, 120, 85, 25)
ControlFocus($hGUI, "", $iClose)
GUISetState(@SW_SHOW)
MsgBox(4096, "", _GUICtrlEdit_GetCueBanner($iPassword))
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $iClose
ExitLoop
EndSwitch
WEnd
GUIDelete($hGUI)
EndFunc
Func _GUICtrlEdit_GetCueBanner($hWnd)
If $Debug_Ed Then __UDF_ValidateClassName($hWnd, $__EDITCONSTANT_ClassName)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $tText = DllStructCreate("wchar[4096]")
If _SendMessage($hWnd, $EM_GETCUEBANNER, $tText, 4096, 0, "struct*") <> 1 Then Return SetError(-1, 0, "")
Return _WinAPI_WideCharToMultiByte($tText)
EndFunc
Func _GUICtrlEdit_SetCueBanner($hWnd, $sText)
If $Debug_Ed Then __UDF_ValidateClassName($hWnd, $__EDITCONSTANT_ClassName)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $tText = _WinAPI_MultiByteToWideChar(String($sText))
Return _SendMessage($hWnd, $EM_SETCUEBANNER, False, $tText, 0, "wparam", "struct*") = 1
EndFunc
;...
Func _GUICtrlEdit_GetCueBanner($i_ID)
Local $t_Text = DllStructCreate("wchar[4096]")
If GUICtrlSendMsg($i_ID, $EM_GETCUEBANNER, DllStructGetPtr($t_Text), 4096) <> 1 Then Return SetError(-1, 0, "")
Return _WinAPI_WideCharToMultiByte($t_Text)
EndFunc ;==>_GUICtrlEdit_GetCueBanner
Func _GUICtrlEdit_SetCueBanner($i_ID, $s_Text)
Local $t_Text = _WinAPI_MultiByteToWideChar($s_Text)
Return GUICtrlSendMsg($i_ID, $EM_SETCUEBANNER, 0, DllStructGetPtr($t_Text)) = 1
EndFunc ;==>_GUICtrlEdit_SetCueBanner
Для этого не нужно переделывать функцию, у меня в примере оно принимает как ID, так и hWnd.Для ID тоже работает
Так не вылетает (у меня).Есть баг, если передавать в _GUICtrlEdit_GetCueBanner не строку, а например число, то autoit вылетает.
#include <GUIConstantsEx.au3>
Example()
Func Example()
Local $iPassword, $iUsername
$hGUI = GUICreate('Example', 300, 150)
GUISetFont(9, 400, 0, 'Segoe UI')
$iUsername = GUICtrlCreateInput('', 10, 10, 125, 25)
ConsoleWrite(__GUICtrlEdit_SetCueBanner($iUsername, 5) & @LF)
$iPassword = GUICtrlCreateInput('', 10, 40, 125, 25)
ConsoleWrite(__GUICtrlEdit_SetCueBanner($iPassword, 'Русский текст') & @LF)
$iClose = GUICtrlCreateButton('Close', 210, 120, 85, 25)
ControlFocus($hGUI, '', $iClose)
GUISetState()
MsgBox(4096, '', __GUICtrlEdit_GetCueBanner($iPassword))
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $iClose
ExitLoop
EndSwitch
WEnd
GUIDelete($hGUI)
EndFunc ;==>Example
Func __GUICtrlEdit_GetCueBanner($i_ID)
Local Const $__EM_GETCUEBANNER = 0x1502
Local $t_Text = DllStructCreate('wchar[4096]')
If GUICtrlSendMsg($i_ID, $__EM_GETCUEBANNER, DllStructGetPtr($t_Text), 4096) <> 1 Then Return SetError(-1, 0, '')
Return DllStructGetData($t_Text, 1)
EndFunc ;==>__GUICtrlEdit_GetCueBanner
Func __GUICtrlEdit_SetCueBanner($i_ID, $s_Text)
Local Const $__EM_SETCUEBANNER = 0x1501
Return GUICtrlSendMsg($i_ID, $__EM_SETCUEBANNER, 0, String($s_Text))
EndFunc ;==>__GUICtrlEdit_SetCueBanner
...
Local $tText = _WinAPI_MultiByteToWideChar(String($sText))
...
Нет! Это как раз таки работа с ассоциативными массивами.почти такой же
Все таки очень не хватает ассоциативных массивов
Так, а кто мешает в Scripting.Dictionary поместить другую информацию! ;)Мне нужен был2-мерный массив, т.к еще нужно хранить другую информацию об input.
Там другой формат. Описание Scripting.Dictionary есть в справке.$aControls['input_login']['default_color'] с Scripting.Dictionary
как получить например такие данные
$oAssocArray = ObjCreate("Scripting.Dictionary")
If Not IsObj($oAssocArray) Then
MsgBox('', @ScriptName, 'Объект не найден!')
Exit
EndIf
$oAssocArray.Add('input_login', 'default_color')
For $vKey In $oAssocArray
ConsoleWrite($vKey &' --> '& $oAssocArray.Item($vKey) & @CRLF)
Next
Exit
Например, так можно прочитать ини-файл в Scripting.Dictionary.Я не очень представляю, как получить например такие данные
Global $sIni = @ScriptDir & '\test.ini', $aData[5] = ['Default', 'Num', 'Count', 'Some', 'Other'], $iRand = Random(10, 20, 1), $aSect, $aTmp
If FileExists($sIni) Then FileDelete($sIni)
ConsoleWrite('$iRand: ' & $iRand & @LF)
For $i = 1 To $iRand
For $j = 0 To 4
IniWrite($sIni, $i, $aData[$j], Random(100, 1000, 1))
Next
Next
$oDict = ObjCreate('Scripting.Dictionary')
$aSect = IniReadSectionNames($sIni)
For $i = 1 To $aSect[0]
$aTmp = IniReadSection($sIni, $aSect[$i])
$aSect[$i] = Number($aSect[$i])
$oDict.add($aSect[$i], ObjCreate('Scripting.Dictionary'))
For $j = 1 To $aTmp[0][0]
$oDict.item($aSect[$i]).add($aTmp[$j][0], $aTmp[$j][1])
Next
$aTmp = 0
Next
For $i = 1 To 10
$iTmp = Random(1, $iRand, 1)
$iTmp_1 = Random(0, 4, 1)
MsgBox(64, $i & ' (10)', 'Dict: Section [' & $iTmp & '] ' & 'Key ' & $aData[$iTmp_1] & ' = ' & $oDict.item($iTmp).item($aData[$iTmp_1]) & @LF & _
'IniRead: Section [' & $iTmp & '] ' & 'Key ' & $aData[$iTmp_1] & ' = ' & IniRead($sIni, $iTmp, $aData[$iTmp_1], 'Error'))
Next