heroxianf 发表于 2018-9-27 14:48:18

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

本帖最后由 heroxianf 于 2018-10-9 17:32 编辑



这个是JS完成,我想在AU3的input控件上完成这个操作,请问有实现的途径吗?
自己的想法1:另外做一个界面,点击input控件跳出来选择。
2:类似于下拉菜单,然后鼠标悬停就弹出来。(这种建立菜单过于长,因为分类实在太多了。)

PS:感谢A大和顽固的指点,除了程序的设计,数据库存储格式也很重要,解决代码就在下方讨论区里。

绿色风 发表于 2018-9-27 16:51:19

本帖最后由 绿色风 于 2018-9-27 16:53 编辑

http://www.autoitx.com/thread-59291-1-1.html

看下,嫩用到1/3,给你



无限循环好高的,做好数据结构就行

heroxianf 发表于 2018-9-27 17:10:42

绿色风 发表于 2018-9-27 16:51
http://www.autoitx.com/thread-59291-1-1.html

看下,嫩用到1/3,给你


我看了一下,是控件分开关联的,我需要在一个控件下弹出菜单选择,和截图一模一样。

http://www.17sucai.com/pins/demo-show?id=20634   这个效果

志艺风云 发表于 2018-9-27 18:52:28

原理是一样的啊,下拉框换成列表框,点击输入框显示这个窗口。

heroxianf 发表于 2018-9-28 10:17:27

志艺风云 发表于 2018-9-27 18:52
原理是一样的啊,下拉框换成列表框,点击输入框显示这个窗口。

能否给一个简单的示例呢

afan 发表于 2018-9-28 10:35:52

本帖最后由 afan 于 2018-9-28 10:39 编辑

如果是au3做成类似的功能,应该不是这样想的吧,被先入为主了……
直接用弹出菜单的形式(不是ComboBox弹出菜单)不知道要方便多少倍,只要点击一下,各级菜单均可直接划开显示/选择。
弹出菜单网页可能不好弄(或者出于美观协调性),而Au3再方便不过了。

heroxianf 发表于 2018-9-28 10:38:24

afan 发表于 2018-9-28 10:35
如果是au3做成类似的功能,应该不是这样想的吧,被先入为主了……
直接用弹出菜单的形式(不是ComboBox弹出 ...
A大 用什么函数去实现呢?你描述的大体是什么样子的? 主要是分类很多一级30个、一直到5级,总行数有2400多行。

afan 发表于 2018-9-28 10:43:15

heroxianf 发表于 2018-9-28 10:38
A大 用什么函数去实现呢?你描述的大体是什么样子的? 主要是分类很多一级30个、一直到5级,总行数有24 ...

这个数量肯定没问题。随便就用 _GUICtrlMenu_CreatePopup 好了。
这个js能显示的,弹出菜单只会比它更能显示更多菜单项

afan 发表于 2018-9-28 10:49:26

顺便提醒一下细节部分, Input 控件最好加上只读样式,或者直接使用 Label 控件,以防用户直接误修改造成与最终读取不符

heroxianf 发表于 2018-9-28 10:51:31

afan 发表于 2018-9-28 10:49
顺便提醒一下细节部分, Input 控件最好加上只读样式,或者直接使用 Label 控件,以防用户直接误修改造成与 ...

嗯,我打算建立一个按钮控件来显示,好歹有一个样式在。

志艺风云 发表于 2018-9-28 13:23:50

heroxianf 发表于 2018-9-28 10:17
能否给一个简单的示例呢

你把 绿色风 的那个 GUICtrlCreateCombo 改成 GUICtrlCreateList控件看看,不就是差不多了吗。
你在窗口点击一个按钮,显示那个窗口不就行了吗,样式你再改改,当然想改成那个网页一样基本没可能。

heroxianf 发表于 2018-9-28 15:34:20

afan 发表于 2018-9-28 10:49
顺便提醒一下细节部分, Input 控件最好加上只读样式,或者直接使用 Label 控件,以防用户直接误修改造成与 ...



A大 不太会使用这个函数,示例里 WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)这些参数也没看明白,不声明也可以使用。还希望A大给一个列子,附件是我设计的INI存储格式。


heroxianf 发表于 2018-9-28 15:35:09

志艺风云 发表于 2018-9-28 13:23
你把 绿色风 的那个 GUICtrlCreateCombo 改成 GUICtrlCreateList控件看看,不就是差不多了吗。
你在窗口 ...

感谢,我一开始也是想的A大的方法,不过对消息注册事件不懂,也就卡壳了。

heroxianf 发表于 2018-9-28 15:44:44

afan 发表于 2018-9-28 10:49
顺便提醒一下细节部分, Input 控件最好加上只读样式,或者直接使用 Label 控件,以防用户直接误修改造成与 ...

我对那个动态创建子菜单有点想不到方法。

afan 发表于 2018-9-28 16:33:24

本帖最后由 afan 于 2018-9-28 16:37 编辑

heroxianf 发表于 2018-9-28 15:44
我对那个动态创建子菜单有点想不到方法。
注意: 示例 ini 文件如果用ini内置函数操作,不要用 UTF-8 格式保存,那样会乱码。本例已存为 ANSI

#include <GuiMenu.au3>

Global $hGUI

Example()

Func Example()
      ; 创建 GUI
      $hGUI = GUICreate('test')
      GUISetState(@SW_SHOW)
      GUICtrlCreateLabel('点击选择      >', 10, 10, 300, 20)
      While 1
                Switch GUIGetMsg()
                        Case -3
                              Exit
                        Case 3
                              _CreateMenu()
                EndSwitch
      WEnd
EndFunc   ;==>Example

Func _CreateMenu()
      Local $fIni = 'set.ini'
      Local $aIni = IniReadSection($fIni, 'one')
      If @error Then Return SetError(1, 0, 0)
      Local $hMenu = _GUICtrlMenu_CreatePopup()
      Local Enum $itemC0 = 1500
      Local $aIni1, $hMenuC
      For $ii = 1 To $aIni
                $aIni1 = IniReadSection($fIni, $aIni[$ii])
                If @error Then ContinueLoop
                $hMenuC = _GUICtrlMenu_CreateMenu()
                For $jj = 1 To $aIni1
                        _GUICtrlMenu_AddMenuItem($hMenuC, $aIni1[$jj], $itemC0)
                Next
                _GUICtrlMenu_AddMenuItem($hMenu, $aIni[$ii], 0, $hMenuC)
      Next
      _GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
      _GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_CreateMenu
页: [1] 2 3
查看完整版本: 想模仿JS的一个联动菜单,请指点一下[已解决]