heroxianf
发表于 2018-9-28 22:59:58
afan 发表于 2018-9-28 16:33
注意: 示例 ini 文件如果用ini内置函数操作,不要用 UTF-8 格式保存,那样会乱码。本例已存为 ANSI
Local Enum $itemC0 = 1500
A大我看帮助说的是Enum是一个什么进步值,默认+1但是你这个我看到都是1500,请问有什么用呢?
afan
发表于 2018-9-28 23:18:15
heroxianf 发表于 2018-9-28 22:59
Local Enum $itemC0 = 1500
A大我看帮助说的是Enum是一个什么进步值,默认+1但是你这个我看到都是 ...
在这没什么X用,此例只是根据你的要求,依据ini动态创建菜单、子菜单的例子,顺便提醒示意一下这个参数位在响应点击时需要。
实际代码该参数值需要递增,而非固定变量值,但 Enum 不 Enum 无所谓。
heroxianf
发表于 2018-9-29 11:22:11
afan 发表于 2018-9-28 16:33
注意: 示例 ini 文件如果用ini内置函数操作,不要用 UTF-8 格式保存,那样会乱码。本例已存为 ANSI
A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据(一级到四级菜单的文字)填写到$showLabel 控件上呢?
afan
发表于 2018-9-29 19:58:26
heroxianf 发表于 2018-9-29 11:22
A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据 ...
木有空,自己折腾吧,关键代码已经给你了~
chzj589
发表于 2018-9-30 16:07:41
heroxianf 发表于 2018-9-29 11:22
A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据 ...
这样行不?
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
Global $hGUI, $showLabel
Global Enum $e_idOpen = 1000, $e_idSave, $e_idInfo
Example()
Func Example()
; 创建 GUI
$hGUI = GUICreate('test')
GUISetState(@SW_SHOW)
GUICtrlCreateLabel('点击选择 >', 50, 50, 300, 20)
$showLabel = GUICtrlCreateLabel('显示区域', 50, 150, 300, 25)
GUICtrlSetFont(-1, 10, 600, 0, 'Arial')
GUICtrlSetColor(-1, 0x990000)
GUICtrlSetCursor(-1, 0)
While 1
Switch GUIGetMsg()
Case -3
Exit
Case 3
_CreateMenu()
EndSwitch
WEnd
;GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
EndFunc ;==>Example
; 处理 WM_COMMAND 消息
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Local $sRead
Switch $wParam
Case $e_idOpen
;_WinAPI_ShowMsg("你点击了 [打开] 菜单")
$sRead = "你点击了 [打开] 菜单4"
EndSwitch
GUICtrlSetData($showLabel, $sRead)
EndFunc ;==>WM_COMMAND
Func _CreateMenu()
Local $aSection, $bSection, $cSection, $dSection, $hMenuA, $hMenuB, $hMenuC, $hMenuD
Local Enum $itemC0 = 1500
Local $fIni = 'list.ini';'set.ini';
$aSection = IniReadSection($fIni, 'one')
If @error Then Return SetError(1, 0, 0)
Local $hMenuA = _GUICtrlMenu_CreatePopup()
For $ia = 1 To $aSection
$bSection = IniReadSection($fIni, $aSection[$ia])
If @error Then ContinueLoop
$hMenuB = _GUICtrlMenu_CreateMenu()
For $ib = 1 To $bSection
$cSection = IniReadSection($fIni, $aSection[$ia] & '/' & $bSection[$ib])
If @error Then ContinueLoop
$hMenuC = _GUICtrlMenu_CreateMenu()
For $ic = 1 To $cSection
$dSection = IniReadSection($fIni, $bSection[$ib] & '/' & $cSection[$ic])
If @error Then ContinueLoop
$hMenuD = _GUICtrlMenu_CreateMenu()
For $id = 1 To $dSection
;_GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id], $itemC0)
_GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id], $e_idOpen)
Next
_GUICtrlMenu_AddMenuItem($hMenuC, $cSection[$ic], 0, $hMenuD)
Next
_GUICtrlMenu_AddMenuItem($hMenuB, $bSection[$ib], 0, $hMenuC)
Next
_GUICtrlMenu_AddMenuItem($hMenuA, $aSection[$ia], 0, $hMenuB)
Next
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
_GUICtrlMenu_TrackPopupMenu($hMenuA, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenuA)
EndFunc ;==>_CreateMenua
志艺风云
发表于 2018-9-30 19:27:59
我用绿色风的改了一下
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$hGUI = GUICreate('简单的多级联动,对应天气网ID', 570, 387, -1, -1)
Local $Button1 = GUICtrlCreateButton("显示", 5, 5, 75, 25)
$showLabel = GUICtrlCreateLabel('选择的区域', 85, 8, 300, 17)
GUISetState(@SW_SHOW)
Local $Form1_1 = GUICreate("", 560, 185, 2, 50, BitOR($WS_SYSMENU, $WS_POPUP), BitOR($WS_EX_DLGMODALFRAME, $WS_EX_MDICHILD), $hGUI)
Local $List1 = GUICtrlCreateList("", 10, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
Local $List2 = GUICtrlCreateList("", 120, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
Local $List3 = GUICtrlCreateList("", 230, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
Local $List4 = GUICtrlCreateList("", 340, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
Local $List5 = GUICtrlCreateList("", 450, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
Local $Label1 = GUICtrlCreateLabel("省级", 10, 10, 99, 17)
Local $Label2 = GUICtrlCreateLabel("市级", 120, 10, 99, 17)
Local $Label3 = GUICtrlCreateLabel("县/区级", 230, 9, 99, 17)
Local $Label4 = GUICtrlCreateLabel("天气网的ID编号", 340, 10, 100, 17)
Local $Button2 = GUICtrlCreateButton("复位", 10, 160, 75, 25)
Local $Button3 = GUICtrlCreateButton("关闭", 90, 160, 75, 25)
#EndRegion ### END Koda GUI section ###
Dim $ini = "天气数据.dat"
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetData($List2, "")
GUICtrlSetData($List3, "")
GUICtrlSetData($List4, "")
GUICtrlSetData($List5, "")
GUISetState(@SW_SHOW, $Form1_1)
GUICtrlSetData($List1, _ReadSection("省级")) ;省级目录
Case $Button2
GUICtrlSetData($List2, "")
GUICtrlSetData($List3, "")
GUICtrlSetData($List4, "")
GUICtrlSetData($List5, "")
GUICtrlSetData($List1, _ReadSection("省级")) ;省级目录
Case $Button3
GUISetState(@SW_HIDE, $Form1_1)
Case $List1 ;一级
GUICtrlSetData($List3, "")
GUICtrlSetData($List4, "")
GUICtrlSetData($List5, "")
Local $str = GUICtrlRead($List1)
GUICtrlSetData($List2, "")
GUICtrlSetData($List2, _ReadValue("省级", $str))
Case $List2 ;二级
GUICtrlSetData($List4, "")
GUICtrlSetData($List5, "")
Local $str = GUICtrlRead($List2) ;取地区
GUICtrlSetData($List3, _ReadSection($str)) ;省级目录
Case $List3 ;三级
GUICtrlSetData($List5, "")
Local $str0 = GUICtrlRead($List2);市级
Local $str1 = GUICtrlRead($List3) ;区县级
GUICtrlSetData($List4, "")
GUICtrlSetData($List4, _ReadValue($str0, $str1))
Case $List4 ;四级
Local $str = GUICtrlRead($List4)
GUICtrlSetData($List5, _ReadSection($str))
GUICtrlSetData($showLabel, GUICtrlRead($List1) & "→" & GUICtrlRead($List2) & "→" & GUICtrlRead($List3) & "→" & GUICtrlRead($List4))
Case $List5 ;五级
GUICtrlSetData($showLabel, GUICtrlRead($List1) & "→" & GUICtrlRead($List2) & "→" & GUICtrlRead($List3) & "→" & GUICtrlRead($List4) & "→" & GUICtrlRead($List5))
EndSwitch
WEnd
Func _ReadSection($field) ;字段的全部关键字
Local $str = ""
Local $arr = IniReadSection($ini, $field)
If Not @error Then
For $i = 1 To $arr
$str = $str & "|" & $arr[$i]
Next
EndIf
Return $str
EndFunc ;==>_ReadSection
Func _ReadValue($field, $KEY)
Local $str2 = IniRead($ini, $field, $KEY, "")
Return $str2
EndFunc ;==>_ReadValue
heroxianf
发表于 2018-10-1 01:32:44
chzj589 发表于 2018-9-30 16:07
这样行不?
一级、二级、三级菜单值能抓取到不?
我希望得到值: 菜单1/菜单2/菜单3/菜单4
heroxianf
发表于 2018-10-1 01:52:24
志艺风云 发表于 2018-9-30 19:27
我用绿色风的改了一下
非常感谢,我还是比较喜欢下拉选择的方式。
heroxianf
发表于 2018-10-1 15:19:00
chzj589 发表于 2018-9-30 16:07
这样行不?
有一点小进步了,不知道第一级、第二级、第三级的菜单文字如何获取。
heroxianf
发表于 2018-10-1 15:39:41
afan 发表于 2018-9-29 19:58
木有空,自己折腾吧,关键代码已经给你了~
A大,四级菜单的文字能获取到了, 一级、二级、三级还是不知道如何弄,添加对应的ID也不知道如何操作,请指点经典代码。{:face (197):}
顽固不化
发表于 2018-10-1 16:32:58
除了程序设计,主要还有一个数据文件的设计问题
heroxianf
发表于 2018-10-1 17:09:05
顽固不化 发表于 2018-10-1 16:32
除了程序设计,主要还有一个数据文件的设计问题
嗯,数据储存目前是我能想到的就是这种,绿色风推荐的序列ID方法,还没有去尝试。
afan
发表于 2018-10-2 10:35:39
heroxianf 发表于 2018-10-1 15:39
A大,四级菜单的文字能获取到了, 一级、二级、三级还是不知道如何弄,添加对应的ID也不知道如何操作 ...
思维发散下在创建菜单时同时储存路径
afan
发表于 2018-10-2 10:49:33
本帖最后由 afan 于 2018-10-2 10:51 编辑
顽固不化 发表于 2018-10-1 16:32
除了程序设计,主要还有一个数据文件的设计问题
说到点子上了…而且这个设计非常重要
物尽其用,不要浪费了现有的数据(如LZ的ini数据,“关键字=值”中的关键字就浪费了),也尽量少的且仅添加巧妙的数据。
heroxianf
发表于 2018-10-2 10:51:10
afan 发表于 2018-10-2 10:49
说到点子上了…而且这个设计非常重要
物尽其用,不要浪费了现有的数据(如LZ的ini数据,“关键字”就 ...
谢谢A大,正在用数组的长度来代替关键字