找回密码  加入

AUTOIT CN

搜索
楼主: heroxianf

[GUI管理] 想模仿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级菜单了(见附件), 请教一下如何给众多的四级菜单添加事件,选择后把数据 ...

这样行不?



#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[0][0]
                $bSection = IniReadSection($fIni, $aSection[$ia][1])
                If @error Then ContinueLoop
                $hMenuB = _GUICtrlMenu_CreateMenu()
                For $ib = 1 To $bSection[0][0]
                        $cSection = IniReadSection($fIni, $aSection[$ia][1] & '/' & $bSection[$ib][1])
                        If @error Then ContinueLoop
                        $hMenuC = _GUICtrlMenu_CreateMenu()
                        For $ic = 1 To $cSection[0][0]
                                $dSection = IniReadSection($fIni, $bSection[$ib][1] & '/' & $cSection[$ic][1])
                                If @error Then ContinueLoop
                                $hMenuD = _GUICtrlMenu_CreateMenu()
                                For $id = 1 To $dSection[0][0]
                                        ;_GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id][1], $itemC0)
                                        _GUICtrlMenu_AddMenuItem($hMenuD, $dSection[$id][1], $e_idOpen)
                                Next
                                _GUICtrlMenu_AddMenuItem($hMenuC, $cSection[$ic][1], 0, $hMenuD)
                        Next
                        _GUICtrlMenu_AddMenuItem($hMenuB, $bSection[$ib][1], 0, $hMenuC)
                Next
                _GUICtrlMenu_AddMenuItem($hMenuA, $aSection[$ia][1], 0, $hMenuB)
        Next
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
        _GUICtrlMenu_TrackPopupMenu($hMenuA, $hGUI)
        _GUICtrlMenu_DestroyMenu($hMenuA)
EndFunc   ;==>_CreateMenua

本帖子中包含更多资源

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

x
发表于 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[0][0]
                        $str = $str & "|" & $arr[$i][0]
                Next
        EndIf
        Return $str
EndFunc   ;==>_ReadSection

Func _ReadValue($field, $KEY)
        Local $str2 = IniRead($ini, $field, $KEY, "")
        Return $str2
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备15028933号-3 )谷歌 百度

GMT+8, 2018-12-16 19:35 , Processed in 0.100060 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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