kn007 发表于 2011-7-14 18:00:50

如何将一个ini标准文件,以树形显示出来?

如题,求解

happytc 发表于 2011-7-14 18:00:51

回复 9# netegg


    就是:
ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来,在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value

如,若一个key占多行等等就不是标准的了……

若要显示值:

#NoTrayIcon
#include <GuiConstants.au3>

Opt("GUIOnEventMode", 1)
Local $INIFile = @ScriptDir & "\zh-CN.ini"

if not FileExists($INIFile) then
        msgbox(16, "Error", "Cannot find INI file",5)
        Exit
EndIf

$Form1 = GUICreate("Example", 300, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "Event")

$TreeView = GUICtrlCreateTreeView(10, 10, 200, 450)
GUICtrlSetOnEvent(-1, "Event")

$SectionName = IniReadSectionNames($INIFile)
If IsArray($SectionName) Then
        Local $Item[$SectionName + 1]
        For $i = 1 To $SectionName
                $Item[$i] = GUICtrlCreateTreeViewItem($SectionName[$i], $TreeView)
                $IniSection = IniReadSection($INIFile, $SectionName[$i])
                if not @error Then
                        For $j = 1 To $IniSection
                                GUICtrlCreateTreeViewItem($IniSection[$j], $Item[$i])
                                GUICtrlCreateTreeViewItem($IniSection[$j], -1)
                                GUICtrlSetOnEvent(-1, "Event")
                        Next
                EndIf
        Next
EndIf

GUISetState()


While True
        Sleep(100)
WEnd


Func Event()
   Switch @GUI_CtrlId
      Case $GUI_EVENT_CLOSE
         Exit
      Case Else
         $Val = GUICtrlRead(@GUI_CtrlId,1)
               ;......
   EndSwitch
EndFunc




happytc 发表于 2011-7-14 20:07:41

老板说话,也说得不明不白的:如何个树形法?

kn007 发表于 2011-7-14 20:47:54

回复 2# happytc


    呵呵,那是你不理解,,, #include <GuiTreeView.au3>就行

happytc 发表于 2011-7-14 20:59:44

回复happytc


    呵呵,那是你不理解,,, #include 就行
kn007 发表于 2011-7-14 20:47 http://www.autoitx.com/images/common/back.gif

这个我知道了
我不理解的是你要怎么个“显示”法?

kn007 发表于 2011-7-14 21:02:21

这个我知道了
我不理解的是你要怎么个“显示”法?
happytc 发表于 2011-7-14 20:59 http://autoitx.com/images/common/back.gif


    就是list出来啊。。。。我就问怎么实现啊,还反问,我可不认为难理解。。。

happytc 发表于 2011-7-14 21:37:04

本帖最后由 happytc 于 2011-7-14 22:00 编辑

回复 5# kn007


    其实还是不大理解你的需求,如下面的例子,是这样吗?如是这样,也太简单了,不象是老板问的问题呀

#NoTrayIcon
#include <GuiConstants.au3>

Opt("GUIOnEventMode", 1)
Local $INIFile = @ScriptDir & "\zh-CN.ini"

if not FileExists($INIFile) then
        msgbox(16, "Error", "Cannot find INI file",5)
        Exit
EndIf

$Form1 = GUICreate("Example", 300, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "Event")

$TreeView = GUICtrlCreateTreeView(10, 10, 200, 450)
GUICtrlSetOnEvent(-1, "Event")

$SectionName = IniReadSectionNames($INIFile)
If IsArray($SectionName) Then
        Local $Item[$SectionName + 1]
        For $i = 1 To $SectionName
                $Item[$i] = GUICtrlCreateTreeViewItem($SectionName[$i], $TreeView)
                $IniSection = IniReadSection($INIFile, $SectionName[$i])
                if not @error Then
                        For $j = 1 To $IniSection
                                GUICtrlCreateTreeViewItem($IniSection[$j], $Item[$i])
                                GUICtrlSetOnEvent(-1, "Event")
                        Next
                EndIf
        Next
EndIf

GUISetState()


While True
        Sleep(100)
WEnd


Func Event()
   Switch @GUI_CtrlId
      Case $GUI_EVENT_CLOSE
         Exit
      Case Else
         $Val = GUICtrlRead(@GUI_CtrlId,1)
               ;......
   EndSwitch
EndFunc

其中的zh-CN.ini文件在下面下载(或者你自己随便建个INi)
http://www.autoitx.com/thread-25502-1-2.html

netegg 发表于 2011-7-14 22:07:30

本帖最后由 netegg 于 2011-7-14 22:11 编辑

回复 6# happytc

ini至少是三层树,你这个似乎有些欠妥,大概应该是
   
         |
         |
         -value
            |
            |
            -data
上面加section的话再多一层

happytc 发表于 2011-7-14 22:11:53

回复 7# netegg


    一楼说的是:标准的Ini文件

你的意思是说把设置的值也显示出来?若是这样也容易呀,再加一行就可以了
反正IniReadSection数组里已经存了“关键字”和其对应的数值.

netegg 发表于 2011-7-14 22:12:53

回复 8# happytc

标准的ini文件是什么样?请指教

kn007 发表于 2011-7-14 22:27:07

回复happytc

标准的ini文件是什么样?请指教
netegg 发表于 2011-7-14 22:12 http://autoitx.com/images/common/back.gif


    就如你刚才所说的。集合、键名、键值

kn007 发表于 2011-7-14 22:30:41

回复kn007


    其实还是不大理解你的需求,如下面的例子,是这样吗?如是这样,也太简单了,不象是 ...
happytc 发表于 2011-7-14 21:37 http://autoitx.com/images/common/back.gif


    很感谢你。可能因为你的逻辑性比较好,所以问得比较详细。但我问的一般建立在help的用语基础上。这段代码也可以帮到我,我之前弄了之后,总是因为读取到乱码而失败。从你的代码,我发现了原因了。受教了。

happytc 发表于 2011-7-14 22:31:50

如上面的文件,就是标准的Ini文件

OK=确定
Cancel=取消
.....

3mile 发表于 2011-7-14 22:51:00

很感谢你。可能因为你的逻辑性比较好,所以问得比较详细。但我问的一般建立在help的用语基础上。这段代码也可以帮到我,我之前弄了之后,总是因为读取到乱码而失败。
kn007 发表于 2011-7-14 22:30 http://www.autoitx.com/images/common/back.gif
怎么可能读取出乱码呢?
表示无法理解

kn007 发表于 2011-7-14 22:51:09

回复kn007


    其实还是不大理解你的需求,如下面的例子,是这样吗?如是这样,也太简单了,不象是 ...
happytc 发表于 2011-7-14 21:37 http://autoitx.com/images/common/back.gif


    怎么读取选定的项目?

利用Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $hWndTreeView = GUICtrlGetHandle($TreeView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
      Case $hWndTreeView
            Switch $iCode
                Case -451
                  $item = _GUICtrlTreeView_GetSelection($hWndTreeView)
                  $root = $item
                  If _GUICtrlTreeView_GetChildCount($hWndTreeView,$item) <= 0 Then
                        $txt = _GUICtrlTreeView_GetText($hWndTreeView,$item)
                        ConsoleWrite($txt&@CRLF)
                  EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc总是得到乱码,选了3样,得到如下

山楂汁冰淇淋
陘???謨?坚果冰淇淋
??兰香子冰淇淋
页: [1] 2
查看完整版本: 如何将一个ini标准文件,以树形显示出来?