【PB案例学习笔记】-30动态打开窗口

写在前面

这是PB案例学习笔记系列文章的第30篇,该系列文章适合具有一定PB基础的读者。

通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。

文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

gitee代码仓库

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example

如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。

一、小目标

通过本案例我们将学会动态创建窗口,并根据不同的排列方式排列窗口。这在日常开发中也是经常遇到的需求,

我们需要根据不同条件,动态的创建窗口。最终效果如下所示

动态打开窗口

二、实现思路

我们通过OpenSheet()函数打开新建的窗口,使用ArrangeSheet()函数来布局窗口的排列方式。

① OpenSheet函数

opensheet(sheetrefvar[, windowtype][, mdiframe][, position][, arrangeopen])
  • sheetrefvar: 这个参数是用来接收窗口句柄的变量,通常是一个与窗口类型匹配的变量。
  • windowtype: 可选参数,定义窗口的类型,如PBWT_NORMAL表示标准窗口。
  • mdiframe: 可选参数,如果是在MDI环境下,这个参数指定MDI框架窗口的名称。
  • position: 可选参数,指定窗口的位置。
  • arrangeopen: 可选参数,如果设置为TRUE,则在打开新窗口时会重新排列所有打开的窗口。

② ArrangeSheet 函数

arrangesheet([arrangement][, zorder])
  • arrangement
    可选参数,指定窗口的排列方式。可以是以下常量之一:
    • PBAR_NONE:不重新排列窗口(默认)。
    • PBAR_TILED:平铺显示所有窗口。
    • PBAR_CASCADE:层叠显示所有窗口。
    • PBAR_ICONS:将所有窗口最小化为图标。
  • zorder: 可选参数,如果设置为TRUE,则按Z顺序(即最后激活的窗口位于最上面)重新排列窗口;如果设置为FALSE,则忽略Z顺序。

三、创建程序基本框架

① 新建examplework工作区

② 新建exampleapp应用

③ 新建w_main窗口,将窗口设置成主窗口

④ 新建w_child窗口

⑤ 新建m_menu菜单,结构如下所示

菜单布局

⑥ 将w_main窗口的菜单设置位m_main

由于文章篇幅原因,以上步骤不再赘述。如果忘记了的小伙伴可以翻一翻该系列前面文章复习一下

四、编写事件代码

① 在w_main窗口中定义实例变量

long ilnum

② 在w_main窗口中新建ue_new() returns(none)事件,代码如下

w_child lw
OpenSheet(lw,w_main, 2, Original!)
ilnum = ilnum + 1
lw.title = "第" + string(ilnum) + "个窗口"

③ 在w_main窗口中新建ue_close()returns(long)事件,代码如下

window	lw_sheetlw_sheet = this.GetActiveSheet ( )If IsValid ( lw_sheet ) Then Return Close ( lw_sheet )
ElseReturn -1
End If

④ 在m_main菜单的“新建”命令的Clicked事件中添加如下代码

w_main.triggerevent("ue_new")

⑤ 在m_main菜单的“关闭”命令的Clicked事件中添加如下代码

w_main.triggerevent("ue_close")

⑥ 在m_main菜单的“水平”命令的Clicked事件中添加如下代码

w_main.ArrangeSheets ( Tile! )

⑦ 在m_main菜单的“垂直”命令的Clicked事件中添加如下代码

w_main.ArrangeSheets ( TileHorizontal! )

⑧ 在m_main菜单的“平铺”命令的Clicked事件中添加如下代码

w_main.ArrangeSheets ( Layer! )

⑨在m_main菜单的“层叠”命令的Clicked事件中添加如下代码

w_main.ArrangeSheets ( Cascade! )

⑩ 在开发界面左边的System Tree窗口中双击exampleapp应用对象,并在其Open事件中添加如下代码

open(w_main)

五、运行程序

一波代码敲完之后,我们开检验下劳动成果

动态打开窗口

本期内容到这儿就要结束了 ★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助

我们下期再见ヾ(•ω•`)o (●’◡’●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mosh|内连接、外连接、左连接、右连接(未完)

下图取自菜鸟教程,侵权删~ 一、内连接:Inner Joins 模版:SELECT * FROM A JOIN B ON 条件 含义:返回A与B的交集,列为AB列之和 练习:将order_items表和products表连接,返回产品id和…

【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示 proteus仿真+程序+设计报告+讲解视频

【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接: 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 ( proteus仿真…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

web 网络安全

Web网络安全是网络安全的一个重要分支,专注于保护Web应用程序、服务和网站免受各种网络威胁。学习Web网络安全涉及多个层面的知识和技能,以下是一些主要的学习领域: 一、XSS攻击 全称::Cross Site Script (跨站脚本&a…

在vue3中,手写父子关联,勾选子级父级关联,取消只取消当前子级,父节点不动

树形控件选择子级勾选父级,以及所有子级, 取消勾选仅取消子级 在项目中,可能会遇到这种场景,比如权限配置的时候,页面权限和菜单权限以tree的形式来配置,而且不用半选,菜单在页面的下面&#xf…

FTP与TFTP

1、TFTP(简单文件传输协议) TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。 基于UDP协议 端口号:69 特点:简单、轻量级、易于实现 传输过程&…

人与机器的协同是强弱系统的互补行为

人与机器的协同可以被视作强弱系统的互补行为,这也强调了人类和机器之间在处理问题、执行任务或创造价值时各自的优势与角色。 人类在认知、创造力、情感和伦理等方面具有独特优势。我们能够进行高级的抽象思维、创新和复杂决策,能够处理不确定性和动态环…

《Windows API每日一练》9.13资源-鼠标位图和字符串

鼠标指针位图(Mouse Cursor Bitmap)是用于表示鼠标指针外观的图像。在 Windows 窗口编程中,可以使用自定义的鼠标指针位图来改变鼠标的外观,并提供更加个性化的用户体验。 ■以下是一些与鼠标指针位图相关的要点: ●…

量产工具一一业务系统(六)

目录 前言 一、代码流程框架 1.业务系统程序流程图 2.业务系统主页面流程图 3.main.c 4.main_page.c 二、处理配置文件 1.配置文件示例 2.处理配置文件 3.config.h 4.config.c 三、生成产品界面 1.计算每个按钮的范围 2.main_page.c 四、处理输入事件 1.main_…

【Python实战因果推断】18_线性回归的不合理效果8

目录 Saturated Regression Model Regression as Variance Weighted Average Saturated Regression Model 还记得我在本章开头强调回归和条件平均值之间的相似性吗?我向你展示了使用二元干预进行回归与比较干预组和对照组的平均值是完全一样的。现在,由…

Python | Leetcode Python题解之第225题用队列实现栈

题目: 题解: class MyStack:def __init__(self):"""Initialize your data structure here."""self.queue collections.deque()def push(self, x: int) -> None:"""Push element x onto stack."&…

LabVIEW机器视觉技术在产品质量检测中有哪些应用实例

LabVIEW的机器视觉技术在产品质量检测中有广泛的应用,通过图像采集、处理和分析,实现对产品缺陷的自动检测、尺寸测量和定位校准,提高生产效率和产品质量。 1. 电子元器件质量检测 在电子制造业中,电子元器件的质量检测是确保产品…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——粗配准

【GeoTransformer系列】——粗配准 1.coarse_matching1.1 概要1.2 功能1.3 超参1.4 input1.5 output2 coarse_target2.1 概要2.2 功能2.3 input2.4 output在模型部分有了初步了解之后, 接下来我们对后续的粗配准、精配准等部分依次进行解读. 本篇主要来看粗配准部分, 代码是在G…

websocket推送消息,模拟推送

上一篇文章:什么是webSocket?以及它的一些相关理论知识 背景: MQTT 的发布/订阅模式与 WebSocket 的双向通信特性相结合。 通过将 MQTT 与 WebSocket 结合使用,可以在 Web 应用中实现高效、实时的消息传输,特别适用于…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

Java | Leetcode Java题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack {Queue<Integer> queue;/** Initialize your data structure here. */public MyStack() {queue new LinkedList<Integer>();}/** Push element x onto stack. */public void push(int x) {int n queue.size();…

操作系统:信号究竟是什么?如何产生?

OS信号 一、信号的概念二、信号的产生1&#xff09;终端按键产生信号1、 前台进程、后台进程2、验证终端按键是否产生信号 2&#xff09;调用系统函数向进程发信号3&#xff09;硬件异常产生信号1、浮点数溢出&#xff0c;CPU产生信号2 浮点数溢出&#xff0c;产生信号原理3. 空…

Mysql-内置函数

一.什么是函数&#xff1f; 函数是指一段可以直接被另外一段程序调用的程序或代码。 mysql内置了很多的函数,我们只需要调用即可。 二.字符串函数 MySQL中内置了很多字符串函数: 三.根据需求完成以下SQL编写 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全…

windows驱动开发基础-环境篇

前言 Windows上无论是用户模式下还是内核模式下&#xff0c;有关驱动的开发都有可能影响系统稳定性&#xff0c;所以我们首先要准备一个专用的测试环境&#xff0c;可以使用VM等虚拟机方便环境修复和还原 测试模式 开启测试模式&#xff1a;cmd 命令 bcdedit /set testsign…

旷野之间2 - 如何训练医疗保健小型语言模型(AI-SLM)

​​​​ 在本文中,我们将研究如何针对疾病症状训练一个小型医疗保健语言模型。为此,我们将从HuggingFace获取数据集(用于训练我们的模型):https://huggingface.co/datasets/QuyenAnhDE/Diseases_Symptoms QuyenAnhDE/Diseases_Symptoms 数据集来自 Hugging Face。图片来源…