Что нового

Фоновая надпись на Input

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Помогите найти тему, где есть пример, как установить фоновую надпись на контроле input.
Например, серым цветом написано, введите пароль, и как только контрол получает фокус, то надпись стирается и наоборот.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
#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

Возможно так, я в процессе тестинга понапихал там наверное кое чего не нужного :smile:
Цвет оптимальней подберете, подточите и все=)


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

inververs
вы хоть скажите это то что нужно было то или нет :smile:
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
MnM
Да, это то что нужно!


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

Небольшая демонстрация
Код:
#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
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs,
Мой вариант (почти такой же как Ваш :smile:)
Код:
#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
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Да вижу, вы использовали словарь. Мне нужен был2-мерный массив, т.к еще нужно хранить другую информацию об input.
Все таки очень не хватает ассоциативных массивов.. все время приходится искать в массиве нужные данные. :'(



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

Хотя, знаете madmasles, я тут придумал интересную вещь.
Можно же сразу создать массив, индексы которого будут ID наших контролов. И для этого много не понадобиться. Всего лишь нужно знать послдений добавленный номер контрола и прибавить +1 или же создать пустой dummy, этим самым мы получим верхнюю границу массива.
Вот например, я сделал форму, и хочу к каждому контролу привязать какие то данные: имя, key в ini файле, текущее значение, значение по умолчанию... тут можно продолжать как угодно, например хранить шрифт, цвет итд.

Так вот что из этого получилось:
Код:
#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


Это уже очень близко к ассоциативным массивам!


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

Кстати, вот практический пример.
Чтение и запись настроек input на лету:
:
Требуется бета с поддержкой тройных (Ternary) операторов а?b:c сделал для простоты одного участка кода


Код:
#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
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#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
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#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
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR,
Для ID тоже работает. :smile:
Код:
;...
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
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
:ok: класс! Оказывается для этого есть специальное сообщение EM_SETCUEBANNER
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Для ID тоже работает
Для этого не нужно переделывать функцию, у меня в примере оно принимает как ID, так и hWnd.
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Есть баг, если передавать в _GUICtrlEdit_GetCueBanner не строку, а например число, то autoit вылетает.
Код:
_GUICtrlEdit_GetCueBanner($iUsername,5)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
Есть баг, если передавать в _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
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
madmasles
Или можно было явно преобразовывать в строку здесь
Код:
...
Local $tText = _WinAPI_MultiByteToWideChar(String($sText))
...



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

Но ваш вариант больше нравится, т.к не нужно еще тянуть библиотеку API
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles [?]
Нет! Это как раз таки работа с ассоциативными массивами.
inververs [?]
Все таки очень не хватает ассоциативных массивов
:smile:

Мне нужен был2-мерный массив, т.к еще нужно хранить другую информацию об input.
Так, а кто мешает в Scripting.Dictionary поместить другую информацию! ;)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Garrett [?]
Так, а кто мешает в Scripting.Dictionary поместить другую информацию!
Я не очень представляю, как получить например такие данные
$aControls['input_login']['default_color'] с Scripting.Dictionary
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
inververs [?]
как получить например такие данные
Код:
$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



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

*link 1*
*link 2*
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
Я не очень представляю, как получить например такие данные
Например, так можно прочитать ини-файл в 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
 
Верх