找回密码  加入

AUTOIT CN

搜索
楼主: heroxianf

[网络通信] 想模仿JS的一个联动菜单,请指点一下[已解决]

[复制链接]
 楼主| 发表于 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,请问有什么用呢?
发表于 2018-9-28 23:18:15 | 显示全部楼层
heroxianf 发表于 2018-9-28 22:59
Local Enum $itemC0 = 1500

A大  我看帮助说的是Enum是一个什么进步值,默认+1  但是你这个我看到都是 ...

在这没什么X用,此例只是根据你的要求,依据ini动态创建菜单、子菜单的例子,顺便提醒示意一下这个参数位在响应点击时需要。
实际代码该参数值需要递增,而非固定变量值,但 Enum 不 Enum 无所谓。

 楼主| 发表于 2018-9-29 11:22:11 | 显示全部楼层
afan 发表于 2018-9-28 16:33
注意: 示例 ini 文件如果用ini内置函数操作,不要用 UTF-8 格式保存,那样会乱码。本例已存为 ANSI



A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据(一级到四级菜单的文字)填写到  $showLabel 控件上呢?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2018-9-29 19:58:26 | 显示全部楼层
heroxianf 发表于 2018-9-29 11:22
A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据 ...

木有空,自己折腾吧,关键代码已经给你了~
发表于 2018-9-30 16:07:41 | 显示全部楼层
heroxianf 发表于 2018-9-29 11:22
A大,我已经修改成加载4级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据 ...

这样行不?




  1. #include <GUIConstantsEx.au3>
  2. #include <WindowsConstants.au3>
  3. #include <GuiMenu.au3>
  4. Global $hGUI, $showLabel
  5. Global Enum $e_idOpen = 1000, $e_idSave, $e_idInfo
  6. Example()
  7. Func Example()
  8.         ; 创建 GUI
  9.         $hGUI = GUICreate('test')
  10.         GUISetState(@SW_SHOW)
  11.         GUICtrlCreateLabel('点击选择      >', 50, 50, 300, 20)
  12.         $showLabel = GUICtrlCreateLabel('显示区域', 50, 150, 300, 25)
  13.         GUICtrlSetFont(-1, 10, 600, 0, 'Arial')
  14.         GUICtrlSetColor(-1, 0x990000)
  15.         GUICtrlSetCursor(-1, 0)

  16.         While 1
  17.                 Switch GUIGetMsg()
  18.                         Case -3
  19.                                 Exit
  20.                         Case 3
  21.                                 _CreateMenu()
  22.                 EndSwitch
  23.         WEnd

  24.         ;GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
  25. EndFunc   ;==>Example
  26. ; 处理 WM_COMMAND 消息
  27. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  28.         #forceref $hWnd, $iMsg, $lParam
  29.         Local $sRead
  30.         Switch $wParam
  31.                 Case $e_idOpen
  32.                         ;_WinAPI_ShowMsg("你点击了 [打开] 菜单")
  33.                         $sRead = "你点击了 [打开] 菜单4"
  34.         EndSwitch
  35.         GUICtrlSetData($showLabel, $sRead)
  36. EndFunc   ;==>WM_COMMAND
  37. Func _CreateMenu()
  38.         Local $aSection, $bSection, $cSection, $dSection, $hMenuA, $hMenuB, $hMenuC, $hMenuD
  39.         Local Enum $itemC0 = 1500
  40.         Local $fIni = 'list.ini';'set.ini';
  41.         $aSection = IniReadSection($fIni, 'one')
  42.         If @error Then Return SetError(1, 0, 0)
  43.         Local $hMenuA = _GUICtrlMenu_CreatePopup()
  44.         For $ia = 1 To $aSection[0][0]
  45.                 $bSection = IniReadSection($fIni, $aSection[$ia][1])
  46.                 If @error Then ContinueLoop
  47.                 $hMenuB = _GUICtrlMenu_CreateMenu()
  48.                 For $ib = 1 To $bSection[0][0]
  49.                         $cSection = IniReadSection($fIni, $aSection[$ia][1] & '/' & $bSection[$ib][1])
  50.                         If @error Then ContinueLoop
  51.                         $hMenuC = _GUICtrlMenu_CreateMenu()
  52.                         For $ic = 1 To $cSection[0][0]
  53.                                 $dSection = IniReadSection($fIni, $bSection[$ib][1] & '/' & $cSection[$ic][1])
  54.                                 If @error Then ContinueLoop
  55.                                 $hMenuD = _GUICtrlMenu_CreateMenu()
  56.                                 For $id = 1 To $dSection[0][0]
  57.                                         ;_GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id][1], $itemC0)
  58.                                         _GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id][1], $e_idOpen)
  59.                                 Next
  60.                                 _GUICtrlMenu_AddMenuItem($hMenuC, $cSection[$ic][1], 0, $hMenuD)
  61.                         Next
  62.                         _GUICtrlMenu_AddMenuItem($hMenuB, $bSection[$ib][1], 0, $hMenuC)
  63.                 Next
  64.                 _GUICtrlMenu_AddMenuItem($hMenuA, $aSection[$ia][1], 0, $hMenuB)
  65.         Next
  66.         GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
  67.         _GUICtrlMenu_TrackPopupMenu($hMenuA, $hGUI)
  68.         _GUICtrlMenu_DestroyMenu($hMenuA)
  69. EndFunc   ;==>_CreateMenua

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2018-9-30 19:27:59 | 显示全部楼层
我用绿色风的改了一下

  1. #include <GUIConstantsEx.au3>
  2. #include <GUIListBox.au3>
  3. #include <StaticConstants.au3>
  4. #include <WindowsConstants.au3>
  5. #Region ### START Koda GUI section ### Form=
  6. $hGUI = GUICreate('简单的多级联动,对应天气网ID', 570, 387, -1, -1)
  7. Local $Button1 = GUICtrlCreateButton("显示", 5, 5, 75, 25)
  8. $showLabel = GUICtrlCreateLabel('选择的区域', 85, 8, 300, 17)
  9. GUISetState(@SW_SHOW)
  10. Local $Form1_1 = GUICreate("", 560, 185, 2, 50, BitOR($WS_SYSMENU, $WS_POPUP), BitOR($WS_EX_DLGMODALFRAME, $WS_EX_MDICHILD), $hGUI)
  11. Local $List1 = GUICtrlCreateList("", 10, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
  12. Local $List2 = GUICtrlCreateList("", 120, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
  13. Local $List3 = GUICtrlCreateList("", 230, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
  14. Local $List4 = GUICtrlCreateList("", 340, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
  15. Local $List5 = GUICtrlCreateList("", 450, 30, 100, 136, BitOR($LBS_DISABLENOSCROLL, $WS_VSCROLL, $WS_BORDER))
  16. Local $Label1 = GUICtrlCreateLabel("省级", 10, 10, 99, 17)
  17. Local $Label2 = GUICtrlCreateLabel("市级", 120, 10, 99, 17)
  18. Local $Label3 = GUICtrlCreateLabel("县/区级", 230, 9, 99, 17)
  19. Local $Label4 = GUICtrlCreateLabel("天气网的ID编号", 340, 10, 100, 17)

  20. Local $Button2 = GUICtrlCreateButton("复位", 10, 160, 75, 25)
  21. Local $Button3 = GUICtrlCreateButton("关闭", 90, 160, 75, 25)
  22. #EndRegion ### END Koda GUI section ###

  23. Dim $ini = "天气数据.dat"

  24. While 1
  25.         $nMsg = GUIGetMsg()
  26.         Switch $nMsg
  27.                 Case $GUI_EVENT_CLOSE
  28.                         Exit

  29.                 Case $Button1
  30.                         GUICtrlSetData($List2, "")
  31.                         GUICtrlSetData($List3, "")
  32.                         GUICtrlSetData($List4, "")
  33.                         GUICtrlSetData($List5, "")
  34.                         GUISetState(@SW_SHOW, $Form1_1)
  35.                         GUICtrlSetData($List1, _ReadSection("省级")) ;省级目录
  36.                 Case $Button2
  37.                         GUICtrlSetData($List2, "")
  38.                         GUICtrlSetData($List3, "")
  39.                         GUICtrlSetData($List4, "")
  40.                         GUICtrlSetData($List5, "")
  41.                         GUICtrlSetData($List1, _ReadSection("省级")) ;省级目录
  42.                 Case $Button3
  43.                         GUISetState(@SW_HIDE, $Form1_1)
  44.                 Case $List1 ;一级
  45.                         GUICtrlSetData($List3, "")
  46.                         GUICtrlSetData($List4, "")
  47.                         GUICtrlSetData($List5, "")
  48.                         Local $str = GUICtrlRead($List1)
  49.                         GUICtrlSetData($List2, "")
  50.                         GUICtrlSetData($List2, _ReadValue("省级", $str))
  51.                 Case $List2 ;二级
  52.                         GUICtrlSetData($List4, "")
  53.                         GUICtrlSetData($List5, "")
  54.                         Local $str = GUICtrlRead($List2) ;取地区
  55.                         GUICtrlSetData($List3, _ReadSection($str)) ;省级目录
  56.                 Case $List3 ;三级
  57.                         GUICtrlSetData($List5, "")
  58.                         Local $str0 = GUICtrlRead($List2);市级
  59.                         Local $str1 = GUICtrlRead($List3) ;区县级
  60.                         GUICtrlSetData($List4, "")
  61.                         GUICtrlSetData($List4, _ReadValue($str0, $str1))
  62.                 Case $List4 ;四级
  63.                         Local $str = GUICtrlRead($List4)
  64.                         GUICtrlSetData($List5, _ReadSection($str))
  65.                         GUICtrlSetData($showLabel, GUICtrlRead($List1) & "→" & GUICtrlRead($List2) & "→" & GUICtrlRead($List3) & "→" & GUICtrlRead($List4))
  66.                 Case $List5 ;五级
  67.                         GUICtrlSetData($showLabel, GUICtrlRead($List1) & "→" & GUICtrlRead($List2) & "→" & GUICtrlRead($List3) & "→" & GUICtrlRead($List4) & "→" & GUICtrlRead($List5))
  68.         EndSwitch
  69. WEnd

  70. Func _ReadSection($field) ;字段的全部关键字
  71.         Local $str = ""
  72.         Local $arr = IniReadSection($ini, $field)
  73.         If Not @error Then
  74.                 For $i = 1 To $arr[0][0]
  75.                         $str = $str & "|" & $arr[$i][0]
  76.                 Next
  77.         EndIf
  78.         Return $str
  79. EndFunc   ;==>_ReadSection

  80. Func _ReadValue($field, $KEY)
  81.         Local $str2 = IniRead($ini, $field, $KEY, "")
  82.         Return $str2
  83. EndFunc   ;==>_ReadValue


复制代码

 楼主| 发表于 2018-10-1 01:32:44 | 显示全部楼层

一级、二级、三级菜单值能抓取到不?
我希望得到值:   菜单1/菜单2/菜单3/菜单4

 楼主| 发表于 2018-10-1 01:52:24 | 显示全部楼层
志艺风云 发表于 2018-9-30 19:27
我用绿色风的改了一下

非常感谢,我还是比较喜欢下拉选择的方式。
 楼主| 发表于 2018-10-1 15:19:00 | 显示全部楼层



有一点小进步了,  不知道第一级、第二级、第三级的菜单文字如何获取。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
 楼主| 发表于 2018-10-1 15:39:41 | 显示全部楼层
afan 发表于 2018-9-29 19:58
木有空,自己折腾吧,关键代码已经给你了~

A大,四级菜单的文字能获取到了,   一级、二级、三级还是不知道如何弄,添加对应的ID  也不知道如何操作,请指点经典代码。
发表于 2018-10-1 16:32:58 | 显示全部楼层
除了程序设计,主要还有一个数据文件的设计问题
 楼主| 发表于 2018-10-1 17:09:05 | 显示全部楼层
顽固不化 发表于 2018-10-1 16:32
除了程序设计,主要还有一个数据文件的设计问题

嗯,数据储存目前是我能想到的就是这种,绿色风推荐的序列ID方法,还没有去尝试。
发表于 2018-10-2 10:35:39 | 显示全部楼层
heroxianf 发表于 2018-10-1 15:39
A大,四级菜单的文字能获取到了,   一级、二级、三级还是不知道如何弄,添加对应的ID  也不知道如何操作 ...

思维发散下  在创建菜单时同时储存路径
发表于 2018-10-2 10:49:33 | 显示全部楼层
本帖最后由 afan 于 2018-10-2 10:51 编辑
顽固不化 发表于 2018-10-1 16:32
除了程序设计,主要还有一个数据文件的设计问题

说到点子上了…  而且这个设计非常重要

物尽其用,不要浪费了现有的数据(如LZ的ini数据,“关键字=值”中的关键字就浪费了),也尽量少的且仅添加巧妙的数据。
 楼主| 发表于 2018-10-2 10:51:10 | 显示全部楼层
afan 发表于 2018-10-2 10:49
说到点子上了…  而且这个设计非常重要

物尽其用,不要浪费了现有的数据(如LZ的ini数据,“关键字”就 ...

谢谢A大,  正在用数组的长度来代替关键字
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-6-25 12:52 , Processed in 0.093749 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表