cashiba 发表于 2017-5-21 18:11:17

如何根据ini文件生成树图

本帖最后由 cashiba 于 2017-5-21 18:20 编辑

ini文件:Tvassigns.ini
8=|公用样式
9=|专用样式

10=公用样式|库文件
11=公用样式|一般样式
12=公用样式|扩展样式
13=专用样式|复选框(Checkbox)
14=专用样式|按钮(Button)
15=专用样式|下拉组框(ComboBox)
16=专用样式|列表框(Listbox)
17=专用样式|编辑框(Edit)/输入框(Input)
18=专用样式|进度条(Progress Bar)
19=专用样式|上下箭头(Up-down)
20=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)
21=专用样式|选项卡(Tab)
22=专用样式|Avi剪辑
23=专用样式|日历(Date)
24=专用样式|月历(MonthCal)
25=专用样式|树视图(TreeView)
26=专用样式|滑动器(Slider)
27=专用样式|列表视图(ListView)

28=公用样式|一般样式|默认值/强制值
29=公用样式|一般样式|$WS_BORDER
30=公用样式|一般样式|$WS_POPUP
31=公用样式|一般样式|$WS_CAPTION
32=公用样式|一般样式|$WS_CLIPCHILDREN
33=公用样式|一般样式|$WS_CLIPSIBLINGS
34=公用样式|一般样式|$WS_DISABLED
35=公用样式|一般样式|$WS_DLGFRAME
36=公用样式|一般样式|$WS_HSCROLL
37=公用样式|一般样式|$WS_MAXIMIZE
38=公用样式|一般样式|$WS_MAXIMIZEBOX
39=公用样式|一般样式|$WS_MINIMIZE
40=公用样式|一般样式|$WS_MINIMIZEBOX
41=公用样式|一般样式|$WS_OVERLAPPED
42=公用样式|一般样式|$WS_OVERLAPPEDWINDOW
43=公用样式|一般样式|$WS_POPUPWINDOW
44=公用样式|一般样式|$WS_SIZEBOX
45=公用样式|一般样式|$WS_SYSMENU
46=公用样式|一般样式|$WS_THICKFRAME
47=公用样式|一般样式|$WS_VSCROLL
48=公用样式|一般样式|$WS_VISIBLE
49=公用样式|一般样式|$WS_CHILD
50=公用样式|一般样式|$WS_GROUP
51=公用样式|一般样式|$WS_TABSTOP
52=公用样式|一般样式|$DS_MODALFRAME
53=公用样式|一般样式|$DS_SETFOREGROUND
54=公用样式|一般样式|$DS_CONTEXTHELP
55=公用样式|扩展样式|库文件
56=公用样式|扩展样式|$WS_EX_ACCEPTFILES
57=公用样式|扩展样式|$WS_EX_APPWINDOW
58=公用样式|扩展样式|$WS_EX_COMPOSITED
59=公用样式|扩展样式|$WS_EX_CLIENTEDGE
60=公用样式|扩展样式|$WS_EX_CONTEXTHELP
61=公用样式|扩展样式|$WS_EX_DLGMODALFRAME
62=公用样式|扩展样式|$WS_EX_LAYOUTRTL
63=公用样式|扩展样式|$WS_EX_MDICHILD
64=公用样式|扩展样式|$WS_EX_OVERLAPPEDWINDOW
65=公用样式|扩展样式|$WS_EX_STATICEDGE
66=公用样式|扩展样式|$WS_EX_TOPMOST
67=公用样式|扩展样式|$WS_EX_TRANSPARENT
68=公用样式|扩展样式|$WS_EX_TOOLWINDOW
69=公用样式|扩展样式|$WS_EX_WINDOWEDGE
70=公用样式|扩展样式|$WS_EX_LAYERED
71=公用样式|扩展样式|$GUI_WS_EX_PARENTDRAG
72=专用样式|复选框(Checkbox)|库文件
73=专用样式|复选框(Checkbox)|默认值/强制值
74=专用样式|复选框(Checkbox)|$BS_3STATE
75=专用样式|复选框(Checkbox)|$BS_AUTO3STATE
76=专用样式|复选框(Checkbox)|$BS_AUTOCHECKBOX
77=专用样式|复选框(Checkbox)|$BS_CHECKBOX
78=专用样式|复选框(Checkbox)|$BS_LEFT
79=专用样式|复选框(Checkbox)|$BS_PUSHLIKE
80=专用样式|复选框(Checkbox)|$BS_RIGHT
81=专用样式|复选框(Checkbox)|$BS_RIGHTBUTTON
82=专用样式|复选框(Checkbox)|$BS_GROUPBOX
83=专用样式|复选框(Checkbox)|$BS_AUTORADIOBUTTON
84=专用样式|按钮(Button)|库文件
85=专用样式|按钮(Button)|默认值/强制值
86=专用样式|按钮(Button)|$BS_BOTTOM
87=专用样式|按钮(Button)|$BS_CENTER
88=专用样式|按钮(Button)|$BS_DEFPUSHBUTTON
89=专用样式|按钮(Button)|$BS_MULTILINE
90=专用样式|按钮(Button)|$BS_TOP
91=专用样式|按钮(Button)|$BS_VCENTER
92=专用样式|按钮(Button)|$BS_ICON
93=专用样式|按钮(Button)|$BS_BITMAP
94=专用样式|按钮(Button)|$BS_FLAT
95=专用样式|按钮(Button)|$BS_NOTIFY
96=专用样式|下拉组框(ComboBox)|库文件
97=专用样式|下拉组框(ComboBox)|默认值/强制值
98=专用样式|下拉组框(ComboBox)|$CBS_AUTOHSCROLL
99=专用样式|下拉组框(ComboBox)|$CBS_DISABLENOSCROLL
100=专用样式|下拉组框(ComboBox)|$CBS_DROPDOWN
101=专用样式|下拉组框(ComboBox)|$CBS_DROPDOWNLIST
102=专用样式|下拉组框(ComboBox)|$CBS_LOWERCASE
103=专用样式|下拉组框(ComboBox)|$CBS_NOINTEGRALHEIGHT
104=专用样式|下拉组框(ComboBox)|$CBS_OEMCONVERT
105=专用样式|下拉组框(ComboBox)|$CBS_SIMPLE
106=专用样式|下拉组框(ComboBox)|$CBS_SORT
107=专用样式|下拉组框(ComboBox)|$CBS_UPPERCASE
108=专用样式|列表框(Listbox)|库文件
109=专用样式|列表框(Listbox)|默认值/强制值
110=专用样式|列表框(Listbox)|$LBS_DISABLENOSCROLL
111=专用样式|列表框(Listbox)|$LBS_NOINTEGRALHEIGHT
112=专用样式|列表框(Listbox)|$LBS_NOSEL
113=专用样式|列表框(Listbox)|$LBS_NOTIFY
114=专用样式|列表框(Listbox)|$LBS_SORT
115=专用样式|列表框(Listbox)|$LBS_STANDARD
116=专用样式|列表框(Listbox)|$LBS_USETABSTOPS
117=专用样式|编辑框(Edit)/输入框(Input)|库文件
118=专用样式|编辑框(Edit)/输入框(Input)|默认值/强制值
119=专用样式|编辑框(Edit)/输入框(Input)|$ES_AUTOHSCROLL
120=专用样式|编辑框(Edit)/输入框(Input)|$ES_AUTOVSCROLL
121=专用样式|编辑框(Edit)/输入框(Input)|$ES_CENTER
122=专用样式|编辑框(Edit)/输入框(Input)|$ES_LOWERCASE
123=专用样式|编辑框(Edit)/输入框(Input)|$ES_NOHIDESEL
124=专用样式|编辑框(Edit)/输入框(Input)|$ES_NUMBER
125=专用样式|编辑框(Edit)/输入框(Input)|$ES_OEMCONVERT
126=专用样式|编辑框(Edit)/输入框(Input)|$ES_MULTILINE
127=专用样式|编辑框(Edit)/输入框(Input)|$ES_PASSWORD
128=专用样式|编辑框(Edit)/输入框(Input)|$ES_READONLY
129=专用样式|编辑框(Edit)/输入框(Input)|$ES_RIGHT
130=专用样式|编辑框(Edit)/输入框(Input)|$ES_UPPERCASE
131=专用样式|编辑框(Edit)/输入框(Input)|$ES_WANTRETURN
132=专用样式|进度条(Progress Bar)|库文件
133=专用样式|进度条(Progress Bar)|$PBS_MARQUEE
134=专用样式|进度条(Progress Bar)|$PBS_SMOOTH
135=专用样式|进度条(Progress Bar)|$PBS_SMOOTHREVERSE
136=专用样式|进度条(Progress Bar)|$PBS_VERTICAL
137=专用样式|上下箭头(Up-down)|库文件
138=专用样式|上下箭头(Up-down)|默认值/强制值
139=专用样式|上下箭头(Up-down)|$UDS_ALIGNLEFT
140=专用样式|上下箭头(Up-down)|$UDS_ALIGNRIGHT
141=专用样式|上下箭头(Up-down)|$UDS_ARROWKEYS
142=专用样式|上下箭头(Up-down)|$UDS_HORZ
143=专用样式|上下箭头(Up-down)|$UDS_NOTHOUSANDS
144=专用样式|上下箭头(Up-down)|$UDS_WRAP
145=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|库文件
146=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|默认值/强制值
147=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_BLACKFRAME
148=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_BLACKRECT
149=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_CENTER
150=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_CENTERIMAGE
151=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_ETCHEDFRAME
152=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_ETCHEDHORZ
153=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_ETCHEDVERT
154=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_GRAYFRAME
155=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_GRAYRECT
156=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_LEFT
157=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_LEFTNOWORDWRAP
158=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_NOPREFIX
159=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_NOTIFY
160=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_RIGHT
161=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_RIGHTJUST
162=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_SIMPLE
163=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_SUNKEN
164=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_WHITEFRAME
165=专用样式|静态标签(Label)/图标(Icon)/图形(Graphic)|$SS_WHITERECT
166=专用样式|选项卡(Tab)|库文件
167=专用样式|选项卡(Tab)|默认值/强制值
168=专用样式|选项卡(Tab)|$TCS_SCROLLOPPOSITE
169=专用样式|选项卡(Tab)|$TCS_BOTTOM
170=专用样式|选项卡(Tab)|$TCS_RIGHT
171=专用样式|选项卡(Tab)|$TCS_MULTISELECT
172=专用样式|选项卡(Tab)|$TCS_FLATBUTTONS
173=专用样式|选项卡(Tab)|$TCS_FORCEICONLEFT
174=专用样式|选项卡(Tab)|$TCS_FORCELABELLEFT
175=专用样式|选项卡(Tab)|$TCS_HOTTRACK
176=专用样式|选项卡(Tab)|$TCS_VERTICAL
177=专用样式|选项卡(Tab)|$TCS_TABS
178=专用样式|选项卡(Tab)|$TCS_BUTTONS
179=专用样式|选项卡(Tab)|$TCS_SINGLELINE
180=专用样式|选项卡(Tab)|$TCS_MULTILINE
181=专用样式|选项卡(Tab)|$TCS_RIGHTJUSTIFY
182=专用样式|选项卡(Tab)|$TCS_FIXEDWIDTH
183=专用样式|选项卡(Tab)|$TCS_RAGGEDRIGHT
184=专用样式|选项卡(Tab)|$TCS_FOCUSONBUTTONDOWN
185=专用样式|选项卡(Tab)|$TCS_OWNERDRAWFIXED
186=专用样式|选项卡(Tab)|$TCS_TOOLTIPS
187=专用样式|选项卡(Tab)|$TCS_FOCUSNEVER
188=专用样式|Avi剪辑|库文件
189=专用样式|Avi剪辑|默认值/强制值
190=专用样式|Avi剪辑|$ACS_AUTOPLAY
191=专用样式|Avi剪辑|$ACS_CENTER
192=专用样式|Avi剪辑|$ACS_TRANSPARENT
193=专用样式|Avi剪辑|$ACS_NONTRANSPARENT
194=专用样式|日历(Date)|库文件
195=专用样式|日历(Date)|默认值/强制值
196=专用样式|日历(Date)|$DTS_UPDOWN
197=专用样式|日历(Date)|$DTS_SHOWNONE
198=专用样式|日历(Date)|$DTS_LONGDATEFORMAT
199=专用样式|日历(Date)|$DTS_TIMEFORMAT
200=专用样式|日历(Date)|$DTS_RIGHTALIGN
201=专用样式|日历(Date)|$DTS_SHORTDATEFORMAT
202=专用样式|月历(MonthCal)|库文件
203=专用样式|月历(MonthCal)|默认值/强制值
204=专用样式|月历(MonthCal)|$MCS_NOTODAY
205=专用样式|月历(MonthCal)|$MCS_NOTODAYCIRCLE
206=专用样式|月历(MonthCal)|$MCS_WEEKNUMBERS
207=专用样式|树视图(TreeView)|库文件
208=专用样式|树视图(TreeView)|默认值/强制值
209=专用样式|树视图(TreeView)|$TVS_HASBUTTONS
210=专用样式|树视图(TreeView)|$TVS_HASLINES
211=专用样式|树视图(TreeView)|$TVS_LINESATROOT
212=专用样式|树视图(TreeView)|$TVS_DISABLEDRAGDROP
213=专用样式|树视图(TreeView)|$TVS_SHOWSELALWAYS
214=专用样式|树视图(TreeView)|$TVS_RTLREADING
215=专用样式|树视图(TreeView)|$TVS_NOTOOLTIPS
216=专用样式|树视图(TreeView)|$TVS_CHECKBOXES
217=专用样式|树视图(TreeView)|$TVS_TRACKSELECT
218=专用样式|树视图(TreeView)|$TVS_SINGLEEXPAND
219=专用样式|树视图(TreeView)|$TVS_FULLROWSELECT
220=专用样式|树视图(TreeView)|$TVS_NOSCROLL
221=专用样式|树视图(TreeView)|$TVS_NONEVENHEIGHT
222=专用样式|滑动器(Slider)|库文件
223=专用样式|滑动器(Slider)|默认值/强制值
224=专用样式|滑动器(Slider)|$TBS_AUTOTICKS
225=专用样式|滑动器(Slider)|$TBS_BOTH
226=专用样式|滑动器(Slider)|$TBS_BOTTOM
227=专用样式|滑动器(Slider)|$TBS_HORZ
228=专用样式|滑动器(Slider)|$TBS_VERT
229=专用样式|滑动器(Slider)|$TBS_NOTHUMB
230=专用样式|滑动器(Slider)|$TBS_NOTICKS
231=专用样式|滑动器(Slider)|$TBS_LEFT
232=专用样式|滑动器(Slider)|$TBS_RIGHT
233=专用样式|滑动器(Slider)|$TBS_TOP
234=专用样式|列表视图(ListView)|列表视图(ListView)一般样式
235=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式

236=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|库文件
237=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|默认值/强制值
238=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_ICON
239=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_REPORT
240=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_SMALLICON
241=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_LIST
242=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_EDITLABELS
243=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_NOCOLUMNHEADER
244=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_NOSORTHEADER
245=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_SINGLESEL
246=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_SHOWSELALWAYS
247=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_SORTASCENDING
248=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_SORTDESCENDING
249=专用样式|列表视图(ListView)|列表视图(ListView)一般样式|$LVS_NOLABELWRAP
250=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|库文件
251=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_FULLROWSELECT
252=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_GRIDLINES
253=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_HEADERDRAGDROP
254=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_TRACKSELECT
255=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_CHECKBOXES
256=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_BORDERSELECT
257=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_DOUBLEBUFFER
258=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_FLATSB
259=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_MULTIWORKAREAS
260=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_SNAPTOGRID
261=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_SUBITEMIMAGES
262=专用样式|列表视图(ListView)|列表视图(ListView)扩展样式|$LVS_EX_INFOTIP把GUI样式整理成了ini文件,如上图
进一步依据上述ini文件生成树图,循环套循环的,晕菜,不知道怎么写
GUICTRLSETDATA($id,"|分隔的字符串","")好像只适用于listview,不适用于Treeview
对GUI 树图的自定义函数不熟,似乎需要用_GUICtrlTreeView_AddChild、_GUICtrlTreeView_AddChild循环进行,参照帮助文件的示例写成下面的样子,后面的不知道咋写了
{:face (245):}#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <GuiTreeView.au3>
#include <String.au3>

Local $ofile = @ScriptDir & "\Tvassigns.ini"
If not FileExists($ofile) Then
   MsgBox(4096,"","缺少数据源文件")
   exit
endif

Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
local $MyGui=GUICreate("TV", 840, 700)
Local $idTV = GUICtrlCreateTreeView(6, 6, 360, 680,$iStyle,$WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)

Local $hItem, $idTreeView

Local $aLay=IniReadSectionNames($oFile)
If @error Then Exit

_GUICtrlTreeView_BeginUpdate($idTV)
For $i=1 To $alay
    $Lrr=IniReadSection($oFile, $alay[$i])
        for $j=1 to $lrr
          $hItem = _GUICtrlTreeView_Add($idTV, 0, $lrr[$j])
        Next
        ExitLoop
Next
_GUICtrlTreeView_EndUpdate($idTV)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

chzj589 发表于 2017-5-22 08:55:53

回复 1# cashiba

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GuiTreeView.au3>
#include <TreeViewConstants.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <String.au3>

Local $ofile = @ScriptDir & "\Tvassigns.ini"
If not FileExists($ofile) Then
   MsgBox(4096,"","缺少数据源文件")
   exit
endif

Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
local $MyGui=GUICreate("TV", 840, 700)
Local $TreeView = GUICtrlCreateTreeView(6, 6, 360, 680, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
_GUICtrlTreeView_SetLineColor($TreeView, 0x0000ff);$COLOR_WHITE)
$Group = _GUICtrlTreeView_Add($TreeView, 0, "Tvassigns", 0, 0)
_GUICtrlTreeView_SetBold($TreeView, $Group)
Local $hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, 'shell32.dll', 110)
_GUIImageList_AddIcon($hImage, 'shell32.dll', 4)
_GUIImageList_AddIcon($hImage, 'shell32.dll', 137)
_GUIImageList_AddIcon($hImage, 'shell32.dll', 45)
_GUICtrlTreeView_SetNormalImageList($TreeView, $hImage)
_IniTreeView()
_GUICtrlTreeView_SelectItemByIndex($TreeView, 0, 0)
GUISetState(@SW_SHOW)

_GUICtrlTreeView_EndUpdate($TreeView)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd
Func _IniTreeView()
        Local Const $sFilePath = @ScriptDir & "\Tvassigns.ini"
        Local $aArray = IniReadSectionNames($sFilePath)
        Local $items
        If Not @error Then
                For $i = 1 To $aArray; - 1
                        Local $aArrayc = $aArray[$i]
                        $items[$i] = _GUICtrlTreeView_AddChild($TreeView, $Group, $aArrayc, 1, 3)
                        Local $aArray1 = IniReadSection($sFilePath, $aArray[$i])
                        For $j = 1 To $aArray1
                                _GUICtrlTreeView_AddChild($TreeView, $items[$i], $aArray1[$j], 1, 2)
                                ;MsgBox(0, "", "关键字: " & $aArray1[$j])
                        Next
                Next
        EndIf
EndFunc   ;==>_IniCombo1

tubaba 发表于 2017-5-22 09:03:24

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <GuiTreeView.au3>
#include <String.au3>

Local $ofile = @ScriptDir & "\Tvassigns.ini"
If not FileExists($ofile) Then
   MsgBox(4096,"","缺少数据源文件")
   exit
endif

Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
local $MyGui=GUICreate("TV", 840, 700)
Local $idTV = GUICtrlCreateTreeView(6, 6, 360, 680,$iStyle,$WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)

Local $hItem, $idTreeView

Local $aLay=IniReadSectionNames($oFile)
If @error Then Exit

_GUICtrlTreeView_BeginUpdate($idTV)
For $i=1 To UBound($alay)-1
        $hItem = _GUICtrlTreeView_Add($idTV, 0, $alay[$i])
    Local $Lrr=IniReadSection($oFile, $alay[$i])
      for $j=1 to UBound($lrr)-1
             _GUICtrlTreeView_AddChild($idTV, $hItem, $lrr[$j])
      Next
Next
_GUICtrlTreeView_EndUpdate($idTV)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

cashiba 发表于 2017-5-22 11:08:32

本帖最后由 cashiba 于 2017-5-22 11:10 编辑

回复cashiba
chzj589 发表于 2017-5-22 08:55 http://www.autoitx.com/images/common/back.gif
感谢chzj589大侠!用到了三维数组,这个方法估计代码比较简单,我从来没用过三维数组,感觉好三度空间好复杂....
{:face (52):}
我用字符串处理暂时达到目的了,也挺绕眼睛的,多重循环。你看看用三维数组怎样弄成下面的样子:

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <GuiTreeView.au3>
#include <String.au3>

Local $ofile = @ScriptDir & "\Tvassigns.ini"
If not FileExists($ofile) Then
   MsgBox(4096,"","缺少数据源文件")
   exit
endif

Local $Sty = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
local $Gui=GUICreate("TV", 840, 700)
Local $idT = GUICtrlCreateTreeView(6, 6, 360, 680,$Sty,$WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)

Local $hia, $hib,$hic, $hid, $idT


Local $aLay=IniReadSectionNames($oFile)
If @error Then Exit

_GUICtrlTreeView_BeginUpdate($idT)

    $arr=IniReadSection($oFile, "0")
        for $a=1 to $arr
          $hia = _GUICtrlTreeView_Add($idT, 0, OfSplits($arr[$a],"|",1))
                $brr=IniReadSection($oFile, "1")
                For $b=1 To $brr
                        If OfSplits($brr[$b],"|",0)=OfSplits($arr[$a],"|",1) Then
                           $hib = _GUICtrlTreeView_AddChild($idT, $hia,OfSplits($brr[$b],"|",1))
                           $crr=IniReadSection($oFile, "2")
                           For $c=1 To $crr
                             If OfSplits($crr[$c],"|","0|1")=$brr[$b] Then
                                $hic = _GUICtrlTreeView_AddChild($idT, $hib,OfSplits($crr[$c],"|",2))
                                          $drr=IniReadSection($oFile, "3")
                                          For $d=1 To $drr
                                      If OfSplits($drr[$d],"|","0|1|2")=$crr[$c] Then
                                         $hid = _GUICtrlTreeView_AddChild($idT, $hic,OfSplits($drr[$d],"|",3))
                                                  EndIf
                                          Next
                                   EndIf
                           Next
                        EndIf
                Next
        next
_GUICtrlTreeView_EndUpdate($idT)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func OfSplits($str,$php,$num)
        Local $Srr=StringSplit($str,$php,3)
        If StringInStr($num,"|")=0 Then
           If $num<0 Or $num>(UBound($Srr)-1) Then
                  MsgBox(4096,"","函数参数$n超限")
           Else
              Return $srr[$num]
           EndIf
    Else
           Local $n
       Local $Nrr=StringSplit($num,"|",3)
           For $n In $Nrr
                   If $n<0 Or $n>(UBound($Srr)-1) Then
                          MsgBox(4096,"","函数参数$n超限")
                  EndIf
           Next
           Local $txt=""
           Local $j=""
           For $i=0 To (UBound($Nrr)-1)
                   $j=$Nrr[$i]
                   $txt=$txt&$srr[$j]&$php
           Next
           $txt=StringLeft($txt,(StringLen($txt)-StringLen($php)))
           Return $txt
       EndIf
EndFunc

cashiba 发表于 2017-5-22 11:14:48


tubaba 发表于 2017-5-22 09:03 http://www.autoitx.com/images/common/back.gif
感谢tubaba大侠!估计你没明白我想达到的最终效果,差一点就行了。请移步4楼看看用笨办法达到的最终效果....

chzj589 发表于 2017-5-22 11:15:45

回复 4# cashiba
你的Tvassigns.ini配置文件?

cashiba 发表于 2017-5-22 11:26:19

ini文件中,字段名代表树图的层级(Level)
每个字段下面的键值对,=号右边是树图的项和子项文本文本字符串(用分隔符标明了层次位置)
所以,ini文件就是树图的层次框架

chzj589 发表于 2017-5-22 11:26:24

回复 5# cashiba
不管用什么方法,能达到目地就OK

cashiba 发表于 2017-5-22 11:26:52

ini文件中,字段名代表树图的层级(Level)
每个字段下面的键值对,=号右边是树图的项和子项文本文本字符串(用分隔符标明了层次位置)
所以,ini文件就是树图的层次框架

cashiba 发表于 2017-5-22 11:33:32

回复cashiba
不管用什么方法,能达到目地就OK
chzj589 发表于 2017-5-22 11:26 http://www.autoitx.com/images/common/back.gif
还不是太稳定,大概是自己写的字符串处理函数不简练不严密,而且循环嵌套层次多了有时会出错,期待有完美的解法....

cashiba 发表于 2017-5-22 11:35:39

回复cashiba
你的Tvassigns.ini配置文件?
chzj589 发表于 2017-5-22 11:15 http://www.autoitx.com/images/common/back.gif
Tvassigns.ini文件,顶楼全部贴出来了哇

chzj589 发表于 2017-5-22 14:51:46

回复 10# cashiba
用你的代码修改一下:

cashiba 发表于 2017-5-22 16:34:17

回复cashiba
用你的代码修改一下:
chzj589 发表于 2017-5-22 14:51 http://www.autoitx.com/images/common/back.gif
看你改的比我的好看多了,不知道对速度有没有优化(目前如果数据多一倍的话会感觉打开界面时有卡顿),树图的图标我还不是太会弄,方便的话可否代码发我学习学习...
{:face (88):}

chzj589 发表于 2017-5-22 16:54:34

回复 13# cashiba
因是读取配置文件INI,在刚读取的时候会慢一点

chzj589 发表于 2017-5-22 16:57:19

回复 13# cashiba
因是读取配置文件INI,在刚读取的时候会慢一点
树图的图标2楼就有

For $a = 1 To $arr
        $hia = _GUICtrlTreeView_Add($idT, 0, OfSplits($arr[$a], "|", 1))
        $brr = IniReadSection($ofile, "1")
        For $b = 1 To $brr
                If OfSplits($brr[$b], "|", 0) = OfSplits($arr[$a], "|", 1) Then
                        $hib = _GUICtrlTreeView_AddChild($idT, $hia, OfSplits($brr[$b], "|", 1), 1, 3)
                        $crr = IniReadSection($ofile, "2")
                        For $c = 1 To $crr
                                If OfSplits($crr[$c], "|", "0|1") = $brr[$b] Then
                                        $hic = _GUICtrlTreeView_AddChild($idT, $hib, OfSplits($crr[$c], "|", 2), 1, 2)
                                        $drr = IniReadSection($ofile, "3")
                                        For $d = 1 To $drr
                                                If OfSplits($drr[$d], "|", "0|1|2") = $crr[$c] Then
                                                        $hid = _GUICtrlTreeView_AddChild($idT, $hic, OfSplits($drr[$d], "|", 3), 1, 2)
                                                EndIf
                                        Next
                                EndIf
                        Next
                EndIf
        Next
Next
页: [1] 2
查看完整版本: 如何根据ini文件生成树图