№ Название Время
1 Z-4567 12:38
2 x-a1 13:01
....................................
$N $M $T
[record1]
$N1=1
$M1=Z-4567
$T1=12:38
[record2]
$N2=2
$M2=x-a1
$T2=13:01
........................
record"n"]
$N"n"=$N"n"
$M"n"=$M"n""
$T"n"=$T"n"
Я лично не стал бы заморачиваться с xml, для меня ini понятнее и удобнее, хотя многие считают что это забытая/древняя форма хранения данныхцелесообразно ли использовать для таких целей, .ini или лучше использовать xml?
#include <GUIConstantsEx.au3>
$sConfig = @ScriptDir & "\Config.ini"
$hGUI = GUICreate("Test Script", 300, 220)
$nListView = GUICtrlCreateListView("№|Название|Время", 20, 20, 260, 160)
_BuildListFromConfig()
$nButton = GUICtrlCreateButton("Выполнить", 20, 190, 70, 20)
GUICtrlSetState($nButton, $GUI_DISABLE)
GUISetState(@SW_SHOW, $hGUI)
AdlibRegister('_EnableButton', 100)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $nButton
ConsoleWrite('Выполнение...' & @LF)
EndSwitch
WEnd
Func _EnableButton()
Local $nState = $GUI_ENABLE
If GUICtrlRead($nListView) = "" Then $nState = $GUI_DISABLE
If Not BitAND(GUICtrlGetState($nButton), $nState) Then
GUICtrlSetState($nButton, $nState)
EndIf
EndFunc
Func _BuildListFromConfig()
Local $aSectNames = IniReadSectionNames($sConfig)
Local $sItem
For $i = 1 To UBound($aSectNames)-1
$sItem = _
IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")
GUICtrlCreateListViewItem($sItem, $nListView)
Next
EndFunc
дело не в старости, а в несоответствии современным требованиям. несколько недостатков ini-форматазабытая/древняя форма хранения данных
При большом желании можно в значение ключа добавлять ещё уровнитолько два уровня вложенности – секция-ключ.
Ну, для кодинга на AutoIt это не помеха :D.не портируемость
cobra2029 сказал(а):...
Ваш ответ мне очень помог, но при применение его к моему конкретному случаю, перестали активироваться кнопки.
Не могли бы Вы подсказать мне где я ошибся?
Код:#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> Global $sConfig, $nListView $sConfig = @ScriptDir & "\Config.ini" ; Interface $Form1 = GUICreate("Dialog manager", 427, 329, 313, 215) $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256) $TabSheet1 = GUICtrlCreateTabItem("Прибытие") $nListView1 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216) _BuildListFromConfig1() $TabSheet2 = GUICtrlCreateTabItem("Отбытие") $nListView2 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216) _BuildListFromConfig2() $TabSheet3 = GUICtrlCreateTabItem("Безопасность") $nListView3 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216) _BuildListFromConfig3() $TabSheet4 = GUICtrlCreateTabItem("Другие") $nListView4 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216) _BuildListFromConfig4() GUICtrlSetState(-1,$GUI_SHOW) GUICtrlCreateTabItem("") $Play = GUICtrlCreateButton("Воспроизвести", 310, 272, 91, 25) $Button2 = GUICtrlCreateButton("Выход", 86, 272, 75, 25) $Button3 = GUICtrlCreateButton("&Help", 8, 272, 75, 25) $Read = GUICtrlCreateButton("Прочитать", 232, 272, 75, 25) GUICtrlSetState($Play, $GUI_DISABLE) GUICtrlSetState($Read, $GUI_DISABLE) GUISetState(@SW_SHOW, $Form1) AdlibRegister('_EnableButton', 50) ; end interface While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Play ConsoleWrite('Воспроизведение...' & @LF) Case $Button2 Exit Case $Read ConsoleWrite('Чтение...' & @LF) EndSwitch WEnd Func _EnableButton() Local $nState = $GUI_ENABLE If GUICtrlRead($nListView1) = "" Then $nState = $GUI_DISABLE If GUICtrlRead($nListView2) = "" Then $nState = $GUI_DISABLE If GUICtrlRead($nListView3) = "" Then $nState = $GUI_DISABLE If GUICtrlRead($nListView4) = "" Then $nState = $GUI_DISABLE If Not BitAND(GUICtrlGetState($Play), $nState) Then GUICtrlSetState($Play, $nState) EndIf If Not BitAND(GUICtrlGetState($Read), $nState) Then GUICtrlSetState($Read, $nState) EndIf EndFunc ;"Прибытие" Func _BuildListFromConfig1() Local $aSectNames = IniReadSectionNames($sConfig) Local $sItem For $i = 1 To UBound($aSectNames)-1 $class =IniRead($sConfig, $aSectNames[$i], "$C" & $i, "") If $class="Прибытие" Then $sItem = _ IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$T" & $i, "") GUICtrlCreateListViewItem($sItem, $nListView1) EndIf Next EndFunc Func _BuildListFromConfig2() Local $aSectNames = IniReadSectionNames($sConfig) Local $sItem For $i = 1 To UBound($aSectNames)-1 $sItem = _ IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$T" & $i, "") GUICtrlCreateListViewItem($sItem, $nListView2) Next EndFunc Func _BuildListFromConfig3() Local $aSectNames = IniReadSectionNames($sConfig) Local $sItem For $i = 1 To UBound($aSectNames)-1 $sItem = _ IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$T" & $i, "") GUICtrlCreateListViewItem($sItem, $nListView3) Next EndFunc Func _BuildListFromConfig4() Local $aSectNames = IniReadSectionNames($sConfig) Local $sItem For $i = 1 To UBound($aSectNames)-1 $sItem = _ IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _ IniRead($sConfig, $aSectNames[$i], "$T" & $i, "") GUICtrlCreateListViewItem($sItem, $nListView4) Next EndFunc
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
Global $sConfig = @ScriptDir & "\Config.ini"
Global $iActive_ListView
#Region Interface
$hForm = GUICreate("Dialog manager", 427, 329, 313, 215)
$iPageControl = GUICtrlCreateTab(8, 8, 396, 256)
$iTabSheet1 = GUICtrlCreateTabItem("Прибытие")
$iListView1 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView1, "Прибытие")
$iTabSheet2 = GUICtrlCreateTabItem("Отбытие")
$iListView2 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView2)
$iTabSheet3 = GUICtrlCreateTabItem("Безопасность")
$iListView3 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView3)
$iTabSheet4 = GUICtrlCreateTabItem("Другие")
$iListView4 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView4)
GUICtrlSetState(-1, $GUI_SHOW)
GUICtrlCreateTabItem("")
$iPlay_Bttn = GUICtrlCreateButton("Воспроизвести", 310, 272, 91, 25)
$iExit_Bttn = GUICtrlCreateButton("Выход", 86, 272, 75, 25)
$iHelp_Bttn = GUICtrlCreateButton("&Help", 8, 272, 75, 25)
$iRead_Bttn = GUICtrlCreateButton("Прочитать", 232, 272, 75, 25)
GUICtrlSetState($iPlay_Bttn, $GUI_DISABLE)
GUICtrlSetState($iRead_Bttn, $GUI_DISABLE)
$iActive_ListView = $iListView1
GUISetState(@SW_SHOW, $hForm)
AdlibRegister('_EnableButton', 50)
#EndRegion Interface
While 1
$iMsg = GUIGetMsg()
Switch $iMsg
Case $GUI_EVENT_CLOSE, $iExit_Bttn
Exit
Case $iPageControl
$iPage = GUICtrlRead($iPageControl) + 1
$iActive_ListView = Eval("iListView" & $iPage)
Case $iPlay_Bttn
ConsoleWrite('Воспроизведение...' & @LF)
Case $iRead_Bttn
ConsoleWrite('Чтение...' & @LF)
EndSwitch
WEnd
Func _EnableButton()
Local $iState = $GUI_ENABLE
If GUICtrlRead($iActive_ListView) = "" Then $iState = $GUI_DISABLE
If Not BitAND(GUICtrlGetState($iPlay_Bttn), $iState) Then
GUICtrlSetState($iPlay_Bttn, $iState)
EndIf
If Not BitAND(GUICtrlGetState($iRead_Bttn), $iState) Then
GUICtrlSetState($iRead_Bttn, $iState)
EndIf
EndFunc
Func _BuildListFromConfig($iLV, $sCheckClass = '')
Local $aSectNames = IniReadSectionNames($sConfig)
Local $sItem
For $i = 1 To UBound($aSectNames)-1
If $sCheckClass = '' Or ($sCheckClass <> '' And IniRead($sConfig, $aSectNames[$i], "$C" & $i, "") = $sCheckClass) Then ;Правда так и не понял зачем это
$sItem = _
IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")
GUICtrlCreateListViewItem($sItem, $iLV)
EndIf
Next
EndFunc
это для разграничения по классам: ini переменная в которой написан класс сообщения, и в зависимости от класcа в каждом из tab выводится список только тех записей которые ему соответствуют, код сообщения которое был отправлен Вам в лс, был первой попыткой, по этому там только начало, позднее это получилось сделать.