Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Редактирование txt в GUI (http://forum.oszone.net/showthread.php?t=210543)

koc9kaca 05-07-2011 14:49 1707457

Редактирование txt в GUI
 
Доброго времени суток, уважаемые форумчане!
Есть txt файлик, в котором хранится большое количество [Variables] для основного ini файла.
Пример txt:
читать дальше »
[Variables]
BGdock=bgdock.png
BGmenu=bgmenu.png
mark=mark.png
Icon1=Icon1.png
Icon2=Icon2.png
Icon3=drawer.png
...


Вот примерный GUI приложения:


Надо, чтобы в список выводились наименования строк из txt (BGdock= 'Фон', BGmenu= 'Фон меню', Mark= 'Выделение иконки' и т.д.), в поле ввода при выделении каждого из пунктов в списке по умолчанию выводилась инфа, которая стоит после знака '=' в соответствующей строчке (для 1 строчки 'bgdock.png', для 2 - 'bgmenu' и т.д.). При изменении данных в поле ввода и нажатии кнопки Set они должны подставляться после знака '=', перезаписывая при этом старое значение.
Можете посодействовать в реализации этой примочки?

Creat0R 05-07-2011 16:02 1707514

Не уверен что правильно понял, но вот что получилось:

Код:

#include <GUIConstantsEx.au3>
#include <ListBoxConstants.au3>

OnAutoItExitRegister("_OnExitProc")

Global $sConfig_File = @ScriptDir & "\Config.ini"
Global $aIniData = IniReadSection($sConfig_File, "Variables")

$hGUI = GUICreate("Test Script", 300, 200)

$nList = GUICtrlCreateList("", 20, 20, 260, 120, BitXOR($GUI_SS_DEFAULT_LIST, $LBS_SORT))
$nInput = GUICtrlCreateInput("", 20, 150, 200, 20)
$nSet_Button = GUICtrlCreateButton("Set", 225, 150, 55, 20)

For $i = 1 To UBound($aIniData)-1
    GUICtrlSetData($nList, $aIniData[$i][0])
Next

GUISetState(@SW_SHOW, $hGUI)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nList
            $sItem = GUICtrlRead($nList)

            For $i = 1 To UBound($aIniData)-1
                If $aIniData[$i][0] = $sItem Then
                    GUICtrlSetData($nInput, $aIniData[$i][1])
                    ExitLoop
                EndIf
            Next
        Case $nSet_Button
            $sItem = GUICtrlRead($nList)

            If $sItem = "" Then
                MsgBox(48, 'Attention', 'No selected item.', 0, $hGUI)
                ContinueLoop
            EndIf

            For $i = 1 To UBound($aIniData)-1
                If $aIniData[$i][0] = $sItem Then
                    $aIniData[$i][1] = GUICtrlRead($nInput)
                    ExitLoop
                EndIf
            Next
    EndSwitch
WEnd

Func _OnExitProc()
    IniWriteSection($sConfig_File, "Variables", $aIniData)
EndFunc


koc9kaca 05-07-2011 17:33 1707597

Creat0R ,
Спасибо огромнейшее!!! Практически то, что нужно!
Пара недочётов - сохраняет после закрытия (может быть так и надо), т.е. не "на лету" непосредственно после нажатия кнопки Set; ну и ещё один - инфу хватает только из ini фалов, у меня же переменные хранятся в txt в соседней директории.
Ну да не беда - допилю, Ваш пример очень поможет в изучении AutoIT (открыл его для себя только 21 час назад =))

Creat0R 05-07-2011 22:53 1707836

Цитата:

Цитата koc9kaca
Пара недочётов »

Это не недочёты...

Цитата:

Цитата koc9kaca
сохраняет после закрытия (может быть так и надо), т.е. не "на лету" непосредственно после нажатия кнопки Set »

Нигде об этом небыло указано, тут главное что скрипт запоминает это, и да, сохраняет всё на выходе, так правильнее (хотя зависит конечно от предназначения программы, и насколько критично обновление данных).

Цитата:

Цитата koc9kaca
инфу хватает только из ini фалов, у меня же переменные хранятся в txt в соседней директории. »

Инфу “хватает” из указанного файла в переменной $sConfig_File, я предположил что ini-структура должна хранится именно в нём. В любом случае, имя файла и его расширение можно указать любое, это никак не повлияет на работу скрипта.


Время: 23:25.

Время: 23:25.
© OSzone.net 2001-