DaffyMenu 扩展
DaffyMenu 是一个免费的非可视扩展,用于创建弹出式菜单。该扩展为组件添加了弹出式菜单功能,支持多种菜单选项和自定义配置。
包名:com.gordonlu.daffymenu
版本:1
发布日期:2022年3月31日
下载链接
扩展文件:
demo:
功能概述
扩展特性
- 弹出式菜单:为任何组件添加右键菜单功能
- 自定义选项:支持添加多个菜单项
- 事件响应:处理菜单项点击事件
- 菜单样式:提供默认和可自定义的菜单外观
- 非可视组件:不会占用界面空间
- 组件友好:可绑定到任意组件
截图
Logo 和界面

应用示例


功能展示




函数
- ShowMenu 显示菜单(组件,菜单项列表)
- 显示绑定到指定组件的弹出菜单。
- 组件:组件类型,要绑定菜单的组件
- 菜单项列表:列表类型,菜单项文本列表
- AddMenuItem 添加菜单项(组件,菜单项文本)
- 为指定组件添加一个菜单项。
- 组件:组件类型,目标组件
- 菜单项文本:文本类型,菜单项显示文本
- ClearMenuItems 清除菜单项(组件)
- 清除指定组件的所有菜单项。
- 组件:组件类型,目标组件
- SetMenuTitle 设置菜单标题(组件,标题)
- 设置弹出菜单的标题。
- 组件:组件类型,目标组件
- 标题:文本类型,菜单标题文本
- SetMenuIcon 设置菜单图标(组件,图标路径)
- 设置菜单项的图标。
- 组件:组件类型,目标组件
- 图标路径:文本类型,图标文件路径
- SetItemIcon 设置项目图标(菜单项索引,图标路径)
- 设置指定菜单项的图标。
- 菜单项索引:数字类型,菜单项的索引位置
- 图标路径:文本类型,图标文件路径
- SetTextColor 设置文本颜色(组件,颜色)
- 设置菜单项的文本颜色。
- 组件:组件类型,目标组件
- 颜色:数字类型,颜色值
- SetBackgroundColor 设置背景颜色(组件,颜色)
- 设置菜单的背景颜色。
- 组件:组件类型,目标组件
- 颜色:数字类型,背景颜色值
- SetMenuHeight 设置菜单高度(组件,高度)
- 设置弹出菜单的高度。
- 组件:组件类型,目标组件
- 高度:数字类型,菜单高度(像素)
- SetMenuWidth 设置菜单宽度(组件,宽度)
- 设置弹出菜单的宽度。
- 组件:组件类型,目标组件
- 宽度:数字类型,菜单宽度(像素)
- SetAnimationDuration 设置动画时长(组件,时长)
- 设置菜单弹出/隐藏的动画时长。
- 组件:组件类型,目标组件
- 时长:数字类型,动画时长(毫秒)
- DisableMenu 禁用菜单(组件)
- 禁用指定组件的菜单功能。
- 组件:组件类型,目标组件
- EnableMenu 启用菜单(组件)
- 启用指定组件的菜单功能。
- 组件:组件类型,目标组件
- HideMenu 隐藏菜单(组件)
- 隐藏当前显示的菜单。
- 组件:组件类型,目标组件
事件
- MenuItemClicked 菜单项点击(组件,菜单项索引,菜单项文本)
- 当用户点击菜单项时触发。
- 组件:组件类型,触发事件的组件
- 菜单项索引:数字类型,被点击的菜单项索引
- 菜单项文本:文本类型,被点击的菜单项文本
- MenuShown 菜单显示(组件)
- 当弹出菜单显示时触发。
- 组件:组件类型,菜单所属的组件
- MenuHidden 菜单隐藏(组件)
- 当弹出菜单隐藏时触发。
- 组件:组件类型,菜单所属的组件
属性
- IsMenuVisible 菜单可见(组件) {:.boolean .read-only}
- 返回指定组件的菜单是否当前可见。
- 组件:组件类型,要检查的组件
- 返回值:布尔类型,菜单是否可见
- MenuItemCount 菜单项数量(组件) {:.number .read-only}
- 返回指定组件的菜单项数量。
- 组件:组件类型,要检查的组件
- 返回值:数字类型,菜单项总数
- MenuTitle 菜单标题(组件) {:.text .read-only}
- 返回指定组件的菜单标题。
- 组件:组件类型,要检查的组件
- 返回值:文本类型,菜单标题文本
使用示例
基础菜单设置
当 屏幕1.初始化
// 为按钮1添加菜单项
调用 DaffyMenu1.添加菜单项 按钮1 "复制"
调用 DaffyMenu1.添加菜单项 按钮1 "粘贴"
调用 DaffyMenu1.添加菜单项 按钮1 "删除"
调用 DaffyMenu1.添加菜单项 按钮1 "设置"
// 设置菜单标题
调用 DaffyMenu1.设置菜单标题 按钮1 "操作菜单"
// 设置菜单颜色
调用 DaffyMenu1.设置背景颜色 按钮1 0xFFFFFF // 白色背景
调用 DaffyMenu1.设置文本颜色 按钮1 0x000000 // 黑色文字
处理菜单点击事件
当 DaffyMenu1.菜单项点击 组件 索引 文本
如果 索引 = 0 则
// 复制操作
调用 文本复制 复制到剪贴板
显示通知 "已复制到剪贴板"
否则如果 索引 = 1 则
// 粘贴操作
设置 输入框1.文本 = 获取剪贴板内容
显示通知 "已从剪贴板粘贴"
否则如果 程引 = 2 则
// 删除操作
设置 输入框1.文本 = ""
显示通知 "内容已清除"
否则如果 索引 = 3 则
// 设置操作
调用 打开设置界面
否则
显示通知 "未知操作: " & 文本
为多个组件设置菜单
当 设置多组件菜单按钮.被点击
// 按钮菜单
调用 DaffyMenu1.添加菜单项 操作按钮 "新建文件"
调用 DaffyMenu1.添加菜单项 操作按钮 "打开文件"
调用 DaffyMenu1.添加菜单项 操作按钮 "保存文件"
// 文本框菜单
调用 DaffyMenu1.添加菜单项 输入框1 "全选"
调用 DaffyMenu1.添加菜单项 输入框1 "复制"
调用 DaffyMenu1.添加菜单项 输入框1 "粘贴"
调用 DaffyMenu1.添加菜单项 输入框1 "清除"
// 图片组件菜单
调用 DaffyMenu1.添加菜单项 图片组件1 "加载图片"
调用 DaffyMenu1.添加菜单项 图片组件1 "保存图片"
调用 DaffyMenu1.添加菜单项 图片组件1 "清除图片"
菜单样式自定义
当 自定义样式按钮.被点击
// 设置菜单大小
调用 DaffyMenu1.设置菜单宽度 按钮1 300
调用 DaffyMenu1.设置菜单高度 按钮1 200
// 设置动画效果
菜单显示动画 = 300 // 毫秒
调用 Daffy1.设置动画时长 按钮1 300
// 设置主题颜色
调用 DaffyMenu1.设置背景颜色 按钮1 0xF0F0F0F // 深灰色背景
调用 DaffyMenu1.设置文本颜色 按钮1 0xFFFFFF // 白色文字
设置 菜单提示文本.文本 = "右键菜单已自定义"
菜单状态管理
当 禁用菜单按钮.被点击
调用 DaffyMenu1.禁用菜单 按钮1
设置 状态标签.文本 = "菜单已禁用"
当 启用菜单按钮.被点击
调用 DaffyMenu1.启用菜单 按钮1
设置 状态标签.文本 = "菜单已启用"
动态菜单管理
当 动态添加按钮.被点击
设置 当前索引 = 动态菜单项数量.值
// 动态添加菜单项
设置 菜单项名称 = "项目" & 当前索引
调用 DaffyMenu1.添加菜单项 动态按钮 菜单项名称
设置 动态菜单项数量.值 = 当前索引 + 1
显示通知 "已添加菜单项: " & 菜单项名称
条件菜单显示
当 条件菜单按钮.被点击
设置 用户权限 = 获取用户权限级别
如果 用户权限 = "管理员" 则
// 管理员菜单
调用 DaffyMenu1.清除菜单项 管理按钮
调用 DaffyMenu1.添加菜单项 管理按钮 "用户管理"
调用 DaffyMenu1.添加菜单项 管理按钮 "系统设置"
调用 DaffyMenu1.添加菜单项 管理按钮 "数据备份"
否则如果 用户权限 = "用户" 则
// 普通用户菜单
调用 DaffyMenu1.清除菜单项 用户按钮
调用 DaffyMenu1.添加菜单项 用户按钮 "个人资料"
调用 DaffyMenu1.添加菜单项 用户按钮 "修改密码"
否则
// 访客菜单
调用 DaffyMenu1.清除菜单项 访客按钮
调用 DaffyMenu1.添加菜单项 访客按钮 "登录"
调用 DaffyMenu1.添加菜单项 访客按钮 "注册"
应用程序主菜单
当 显示主菜单按钮.被点击
// 文件操作
调用 DaffyMenu1.添加菜单项 主菜单 "新建"
调用 DaffyMenu1.添加菜单项 主菜单 "打开"
调用 DaffyMenu1.添加菜单项 主菜单 "保存"
调用 DaffyMenu1.添加菜单项 主Menu "另存为"
// 分隔符(可通过空项实现)
调用 DaffyMenu1.添加菜单项 主菜单 "---------"
// 编辑操作
调用 DaffyMenu1.添加菜单项 主菜单 "撤销"
调用 DaffyMenu1.添加菜单项 主菜单 "重做"
调用 DaffyMenu1.添加菜单项 主菜单 "剪切"
调用 DaffyMenu1.添加菜单项 主菜单 "复制"
调用 DaffyMenu1.添加菜单项 主Menu "粘贴"
// 分隔符
调用 DaffyMenu1.添加菜单项 主菜单 "---------"
// 其他操作
调用 DaffyMenu1.添加菜单项 主菜单 "设置"
调用 DaffyMenu1.添加菜单项 主菜单 "关于"
调用 DaffyMenu1.添加菜单项 主Menu "退出"
调用 DaffyMenu1.设置菜单标题 主菜单 "应用程序菜单"
菜单事件处理
当 DaffyMenu1.菜单显示 组件
显示通知 "菜单已显示"
设置 当前激活菜单 = 组件
当 DaffyMenu1.菜单隐藏 组件
显示通知 "菜单已隐藏"
设置 当前激活菜单 = 空文本
当 DaffyMenu1.菜单项点击 组件 索引 文本
如果 组件 = "主菜单" 则
处理主菜单操作
否则如果 组件 = "编辑按钮" 则
处理编辑操作
否则如果 组件 = "用户按钮" 则
处理用户操作
设置 最后选中项 = 索引 & ": " & 文本
显示通知 "选择了: " & 最后选中项
高级应用
上下文相关菜单
当 显示上下文菜单按钮.被点击
设置 选中文本 = 文本框1.选中文本
如果 选中文本 = "" 则
// 文本为空时的菜单
调用 DaffyMenu1.清除菜单项 文本框1
调用 DaffyMenu1.添加菜单项 文本框1 "粘贴"
调用 DaffyMenu1.添加菜单项 文本框1 "全选"
否则
// 文本不为空时的菜单
调用 DaffyMenu1.清除菜单项 文本框1
调用 DaffyMenu1.添加菜单项 文本框1 "复制"
调用 DaffyMenu1.添加菜单项 文本框1 "剪切"
调用 DaffyMenu1.添加菜单项 文本框1 "粘贴"
调用 DaffyMenu1.添加菜单项 文本框1 "删除"
调用 DaffyMenu1.添加菜单项 文本框1 "全选"
调用 DaffyMenu1.添加菜单项 文本框1 "清除"
图标菜单设置
当 图标菜单按钮.被点击
// 带图标的菜单项
调用 DaffyMenu1.添加菜单项 图标按钮 "复制"
调用 DaffyMenu1.设置项目图标 0 "/path/to/copy.png" // 设置第一项图标
调用 DaffyMenu1.添加菜单项 图标按钮 "粘贴"
调用 DaffyMenu1.设置项目图标 1 "/path/to/paste.png" // 设置第二项图标
调用 DaffyMenu1.添加菜单项 图标按钮 "删除"
调用 DaffyMenu1.设置项目图标 2 "/path/to/delete.png" // 设置第三项图标
注意事项
- 非可视组件:DaffyMenu 是非可视组件,不会在应用界面中显示
- 组件绑定:必须将菜单绑定到具体的组件才能使用
- 菜单冲突:避免为同一组件绑定多个菜单
- 事件处理:确保正确处理菜单点击事件
- 性能考虑:菜单项数量不宜过多
- 图标支持:支持菜单项图标,需要提供图标路径
- 动画效果:可配置菜单弹出和隐藏的动画时长
- 颜色配置:支持自定义菜单的文本和背景颜色
应用场景
- 文本编辑器:复制、粘贴、剪切、全选等功能
- 文件管理器:新建、打开、保存、删除文件操作
- 应用程序:设置、关于、退出等系统操作
- 媒体播放器:播放控制、音量调节、全屏等功能
- 图片查看器:图片操作、缩放、旋转、保存等功能
- 社交应用:分享、收藏、举报、设置等功能
技术规格
- 扩展类型:非可视扩展
- 组件要求:需要绑定到具体组件
- 菜单项限制:建议控制在合理数量内
- 动画支持:支持弹出和隐藏动画
- 颜色支持:支持ARGB颜色格式
- 图标支持:支持本地图标文件
- 最低系统:基于发布时间推测兼容性良好
版权信息
- 原作者:Gordon Lu (gordonlu310)
- 原始网址:https://community.appinventor.mit.edu/t/free-daffymenu-popup-menus-for-your-components/54771/12
- 发布日期:2022年3月31日
- 许可协议:免费开源扩展
- 致谢:感谢 AI2 Popup Menu 提供的灵感
文档最后更新:2025年11月20日
扫码添加客服咨询