【PB案例学习笔记】-26制作一个带浮动图标的工具栏
写在前面
这是PB案例学习笔记系列文章的第26篇,该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example】
如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。
一、小目标
通过本案例我们将制作一个带浮动图标的工具栏。当鼠标移动到一个命令图标上时,该图标会凸起显示,移开鼠标,工具栏图标又会恢复原来状态。通过案例我们将学会菜单对象ToolBar的使用,最终效果如下所示

二、创建程序基本框架
① 新建examplework工作区
② 新建exampleapp应用
③ 新建w_main窗口,将其Title属性设置成"浮动工具栏", 并将WindowType属性设置成mdihelp!(这儿一定要设置)
由于文章篇幅原因,以上步骤不再赘述,如果忘记怎么新建的小伙伴可以翻一翻该系列文章的第一篇复习以下
三、新建m_main菜单
① 新建菜单基本框架,如下图所示

② 设置菜单命令属性
将各个菜单命令的ToolBarItemText与菜单命令名称设置成一致,ToolBarItemName与ToolBarItemDownName一致,如上图所示。
各个菜单命令的ToolBarItemvisible为True,ToolBarItemDown为False,ToolBarItemSpace与ToolBarItemOrder均为0,“新建”
、“打开”、“保存”、“另存为”、“-”、“打印”、“退出”的ToolBarItemBarIndex为1,“撤销”、“剪切”、“复制”、“粘贴”、“删除”的ToolBarItemIndex均为2
菜单栏各个属性说明如下
| 属性 | 说明 |
|---|---|
ToolBarItemText | 设置工具栏按钮的文本提示 |
ToolBarItemName | 设置工具栏按钮的图标 |
ToolBarItemDownName | 设置工具栏按钮按下时的图标 |
ToolBarItemVisible | 设置工具栏按钮是否显示 |
ToolBarItemDown | 设置工具栏按钮是否为按下状态 |
ToolBarItemSpace | 设置工具栏第一个按钮前预留的空位 |
ToolBarItemOrder | 设置工具栏按钮在工具栏上的位置 |
ToolBarItemBarIndex | 当有多个工具栏时,设置工具栏按钮所在的工具栏号 |
③ 保存菜单
④ 将窗口w_main的MenuName设置成刚刚创建的m_main
四、编写代码
① 在m_main菜单中新建mf_select(menu am_menuitem) returns (none)函数
函数体代码如下
uint lui_flags, MF_HILITE = 128
lui_flags = IntHigh(Message.WordParm)
lui_flags -= mod(lui_flags, MF_HILITE)
if mod(lui_flags, MF_HILITE * 2) > 0 then return // menu item text is selected
if am_menuitem.ToolBarItemDown then return // ignore icons that are displayed down
if am_menuitem.tag = "" thenam_menuitem.tag = am_menuitem.ToolBarItemName
end if
im_last_selected = am_menuitem
am_menuitem.ToolBarItemName = am_menuitem.ToolBarItemDownName
② 在m_main菜单中新建mf_unselect() returns (none) 函数,函数体代码如下
if isValid(im_last_selected) thenif im_last_selected.tag <> "" thenim_last_selected.ToolBarItemName = im_last_selected.tagend if
end if
③ 在w_main窗口中新建menu(unsignedinteger itemid,unsignedinteger flags,long hmenu) returns long(pbm_menu)事件,代码如下
if Handle(this.MenuID) = hmenu thenthis.MenuID.DYNAMIC mf_unselect()
end if

④ 在w_main的open事件中 添加如下代码
GetApplication().ToolBarText = True
⑤ 在开发界面左边System Tree窗口中双击exampleapp对象,并在其open事件中添加如下代码
open(w_main)
五、运行程序
经过上面一波操作,代码编写,我们开看看最终效果

本期内容到这儿就结束了★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助
我们下期再见 ヾ(•ω•`)o (●’◡’●)
相关文章:
【PB案例学习笔记】-26制作一个带浮动图标的工具栏
写在前面 这是PB案例学习笔记系列文章的第26篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...
反向沙箱技术:安全隔离上网
在信息化建设不断深化的今天,业务系统的安全性和稳定性成为各公司和相关部门关注的焦点。面对日益复杂的网络威胁,传统的安全防护手段已难以满足需求。深信达反向沙箱技术,以其独特的设计和强大的功能,成为保障政务系统信息安全的…...
前端在for循环中使用Element-plus el-select中的@click.native动态传参
<el-table ref"table" :data"editTableVariables" cell-dblclick"handleRowDblClick" style"width: 100%" > <!-- el-table-column: 表格列组件,定义每列的展示内容和属性 --><el-table-column prop&q…...
Oracle SQL - CONNECT BY语句Where条件中不能使用OR?[已解决]
数据 SQL> SELECT * FROM demo_a;CUSTOMER TOTAL ---------- ---------- A 100200SQL> SELECT * FROM demo_b;CUSTOMER RN QTY ---------- ---------- ---------- A 1 30 A 2 …...
python-逻辑语句
if else语句 不同于C:else if range语句: continue continue的作用是: 中断所在循环的当次执行,直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break,在…...
【stm32】大一上学期笔记复制
砌墙单片机 外设是什么? ipage 8 nx轴 128 X0-127 y0-63 PWM脉冲宽度调制 PWM脉冲宽度调制 2023年10月13日 基本特性:脉冲宽度调制PWM是一种对模拟信号进行数字编码的方法。广泛引用于电机控制,灯光的亮度调节,功率控制等领域…...
LeetCode题练习与总结:二叉树的前序遍历--144
一、题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3: 输入:roo…...
如何优化Spring Boot应用的性能
如何优化Spring Boot应用的性能 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何通过优化技术和最佳实践来提升Spring Boot应用的性能&#x…...
人工智能--目标检测
欢迎来到 Papicatch的博客 文章目录 🍉引言 🍉概述 🍈目标检测的主要流程通常包括以下几个步骤 🍍数据采集 🍍数据预处理 🍍特征提取 🍍目标定位 🍍目标分类 🍈…...
Java基础之List实现类
文章目录 一、基本介绍二、常见方法三、ArrayList注意事项四、ArrayList底层结构我的理解 五、ArrayList扩容机制无参构造器有参构造器 六、LinkedList介绍底层操作机制 七、ArrayList 与 LinkedListArrayListLinkedList tip:以下是正文部分 一、基本介绍 List集合…...
java List接口介绍
List 是 Java 集合框架中的一个接口,它继承自 Collection 接口,代表一个有序的元素集合。List 允许重复的元素,并且可以通过索引来访问元素。Java 提供了多种 List 的实现,如 ArrayList、LinkedList、Vector 和 CopyOnWriteArrayList。 List接口概述 List 接口提供了一些…...
调度器APScheduler定时执行任务
APScheduler(Advanced Python Scheduler)是一个Python库,用于调度任务,使其在预定的时间间隔或特定时间点执行。它支持多种调度方式,包括定时(interval)、日期(date)和Cr…...
git合并分支的疑问
今天遇到一个奇怪的问题: 1、后端从master拉了三个分支。分别为dev、test、和stage。 2、研发1从dev拉了分支feature1,然后commit、commit、commit……。最后request merge到dev、test和stage。成功了。 3、研发2从dev拉了分支feature2,注意,feature2…...
catia数控加工仿真Productlist无法添加部件或零件
这种情况是没有把NCSetup显示 在工具中勾选即可...
关于Pycharm右下角不显示解释器interpreter的问题解决
关于Pycharm右下角不显示解释器interpreter的问题 在安装新的Pycharm后,发现右下角的 interpreter 的选型消失了: 觉得还挺不习惯的,于是网上找解决办法,无果。 自己摸索了一番后,发现解决办法如下: 勾…...
为什么word生成的PDF内容显示不全?
在现代办公环境中,将文档从一个格式转换为另一个格式是一个常见的任务。然而,有时候我们可能会遇到意想不到的问题,比如使用Word转换成PDF时,生成的PDF文件只显示了整个界面的四分之一内容。这种问题不仅令人困扰,也可…...
JVM专题十三:总结与整理(持续更新)
图解JVM JVM与Java体系结构 JVM垃圾回收算法 JVM垃圾回收器 图解JVM主要是放了前面12个章节的我们给大家画的图,做了整体的汇总,大家可以根据图区回忆我们所说的内容,查缺补漏。 实战经验 1、项目中数据量多少,QPS与TPS最高多少…...
MobPush iOS端海外推送最佳实现
推送注册 在AppDelegate里进行SDK初始化(也可以在Info.plist文件中进行AppKey,AppSecret的配置)并对通知功能进行注册以及设置推送的环境和切换海外服务器等,参考如下步骤代码: <span style"background-colo…...
商家团购app微信小程序模板
手机微信商家团购小程序页面,商家订餐外卖小程序前端模板下载。包含:团购主页、购物车订餐页面、我的订单、个人主页等。 商家团购app微信小程序模板...
探索AudioLM:音频生成技术的未来
目录 2. AudioLM的基础理论 2.1. 音频生成的基本概念 2.2. 语言模型在音频生成中的应用 2.3. 深度学习在音频生成中的作用 3. AudioLM的架构与实现 3.1. AudioLM的基本架构 3.1.1 编码器 3.1.2 解码器 3.1.3 生成模块 3.2. 训练过程 3.2.1 数据预处理 3.2.2 损失函…...
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题 一、问题场景:Agent 需要人工确认,但用户不知道该确认什么 前面我们已经做过人工确认: approval = APPROVED / REJECTED但真实平台中,审批不能只是一个字符串。 当…...
FakeLocation:你的手机位置自由指南,3个场景让位置掌控更简单
FakeLocation:你的手机位置自由指南,3个场景让位置掌控更简单 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 还在为社交软件的位置限制烦恼吗?…...
questasim下载安装
questasim下载安装 https://zhuanlan.zhihu.com/p/682726018...
Ai小程序入门00-初识AI编程(小白入门:不懂代码也能做小程序?AI编程到底怎么玩)
Ai小程序入门00-初识AI编程(小白入门:不懂代码也能做小程序?AI编程到底怎么玩) 📌 文章简介:很多人都有一个"做个小程序赚钱"或"实现自己创意"的梦想,但往往被复杂的代码、繁琐的环境配置劝退。如今,AI 编程工具(如 Cursor、Claude 等)彻底改变…...
ARM CTI寄存器安全机制与调试接口设计详解
1. ARM CTI寄存器架构概述在嵌入式系统开发领域,调试接口的安全性和可靠性一直是工程师面临的核心挑战。ARM架构中的CTI(Cross-Trigger Interface)寄存器组提供了一套完整的硬件级调试解决方案,特别是在多核调试和复杂系统监控场景…...
基于陷门矩阵的高效安全委托计算方案
1. 项目概述在现代计算环境中,线性代数运算(如矩阵乘法)占据了大量计算资源。随着云计算和机器学习的发展,越来越多的计算任务被委托给云端服务器执行。然而,这种委托计算模式带来了严重的数据隐私问题——用户需要将原…...
户外Wi-Fi天线系统热管理方案与优化实践
1. 户外Wi-Fi天线系统热管理挑战解析 在户外通信设备领域,热管理一直是个令人头疼的问题。我经手过多个基站项目,最深切的体会就是:那些在实验室里运行良好的设备,一到实际户外环境就频频出现热关机。以这个案例中的Wi-Fi天线系统…...
企业级知识管理新门槛:NotebookLM单用户年成本超$298?我们用5类典型场景算清ROI临界点
更多请点击: https://intelliparadigm.com 第一章:企业级知识管理新门槛:NotebookLM单用户年成本超$298?我们用5类典型场景算清ROI临界点 当企业评估AI增强型知识管理工具时,隐性成本常被低估——NotebookLM虽未公开…...
EDA工具进化:从仿真瓶颈到静态分析,构建芯片验证分层防御体系
1. 从“工具崩溃”到“分钟级分析”:EDA工具的十五年进化之路十五年前,当Vinod Menon站在EDA联盟设计奖的领奖台上,手握五千美元支票,他的团队刚刚凭借SwitchIT F12M多端口以太网控制器赢得了业界认可。然而,这位AMD的…...
Perplexity检索JAMA时总漏掉关键RCT?用这4类结构化查询指令,召回率提升至98.6%(附可复用Prompt库)
更多请点击: https://intelliparadigm.com 第一章:Perplexity检索JAMA文章的核心挑战与现状分析 Perplexity 作为基于大语言模型的实时网络增强型问答引擎,在检索高影响力医学文献(如《Journal of the American Medical Associat…...
