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

news2024/9/30 13:24:20

写在前面

这是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_sheet

lw_sheet = this.GetActiveSheet ( )

If IsValid ( lw_sheet ) Then 
	Return Close ( lw_sheet )
Else
	Return -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.coloradmin.cn/o/1913179.html

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

相关文章

【C++报错已解决】Multiple Definition of Symbol

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法:方法一:使用extern关键…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载(将驱动编译模块,insmod加载驱动运行)字符设备注册与注销(我们的驱动实际上是去操作底层的硬件,所以需要向系统注册一个设备,告诉Linux系统,我有…

最新知识付费系统3.0整站+自动采集同步插件

支持分类替换 将主站同步过来的文章分类进行替换 支持自定义文章作者(选择多个作者则同步到的文章作者将会随机分配) 支持添加黑名单分类 添加后 如果同步过来的文章包含黑名单分类将不会发布文章 自动检测同步,无需人工值守以及挂采集软件…

ProFuzzBench入门教学——使用(Ubuntu22.04)

ProFuzzBench是网络协议状态模糊测试的基准测试。它包括一套用于流行协议(例如 TLS、SSH、SMTP、FTP、SIP)的代表性开源网络服务器,以及用于自动执行实验的工具。详细参考:阅读笔记——《ProFuzzBench: A Benchmark for Stateful …

研华运动控制卡在LabVIEW中的应用

在现代工业和科研领域中,精密运动控制系统的需求日益增加。这些系统广泛应用于自动化生产线、精密机械加工、机器人控制、光学仪器调试和实验室自动化设备等诸多领域。本文以研华公司的运动控制卡为例,详细介绍其在LabVIEW中的应用,展示如何通…

习题练习以

题意:求i&M的popcount的和,i属于0……N 主要思路还是变加为乘。 举个例子N22,即10110 假设M的第3位是1,分析N中: 00110 00111 00100 00101 发现其实等价于 0010 0011 0000 0001 也就是左边第4位和第5…

数据库基础练习4

准备 create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8;insert into dept values(101,财务),(102,销售),(103,IT技术),(104,行政);INSERT …

诸葛亮的连环计 责任链模式

“万事谋定而后动,一环扣一环,方能成大事。” 在三国时期,诸葛亮以其超凡的智慧闻名天下。在他众多的计策中,有一个鲜为人知却极具智慧的连环计,完美诠释了现代软件设计中的责任链模式。让我们一同探索这个巧妙的计策…

【安全设备】堡垒机

一、什么是堡垒机 安全运维审计与风险控制系统即堡垒机,前身为跳板机,跳板机是一个简单的管理设备,但缺乏对运维操作的控制和审计能力。堡垒机是一种特定的网络安全设备,用于在一个网络环境中保护数据和网络不受外部和内部用户的…

Python酷库之旅-第三方库Pandas(013)

目录 一、用法精讲 31、pandas.read_feather函数 31-1、语法 31-2、参数 31-3、功能 31-4、返回值 31-5、说明 31-6、用法 31-6-1、数据准备 31-6-2、代码示例 31-6-3、结果输出 32、pandas.DataFrame.to_feather函数 32-1、语法 32-2、参数 32-3、功能 32-4、…

Go语言入门之基础语法

Go语言入门之基础语法 1.简单语法概述 行分隔符: 一行代表一个语句结束,无需写分号。将多个语句写在一行可以用分号分隔,但是不推荐 注释: // 或者/* */ 标识符: 用来命名变量、类型等程序实体。 支持大小写字母、数字…

Golang | Leetcode Golang题解之第226题翻转二叉树

题目: 题解: func invertTree(root *TreeNode) *TreeNode {if root nil {return nil}left : invertTree(root.Left)right : invertTree(root.Right)root.Left rightroot.Right leftreturn root }

Python函数 之 模块和包

1.模块 1, 在Python 中, 每个以 .py 结尾的 Python 代码⽂件 都可以称为是⼀个模块。 2, 在模块中 别⼈书写好的功能(变量, 函数, 类),我们可以拿来直接使⽤。 3, 我们自己写的代码文件, 想要作为模块让别⼈使⽤, 你的代码⽂件名(模块名) 满足标识符的规…

大话光学原理:4.散射:瑞利、拉曼、米氏和布里渊

这是一缕柔和的光,在空气的舞台上轻盈地跳跃。它悠然自得,在宁静的空间中缓缓前行。然而,一片细薄透明的介质挡住了它的脚步,它毫无预兆地撞上了这片障碍。在这短暂的接触中,它被分解成无数微小的粒子,被迫…

LabVIEW电滞回线测试系统

铁电材料的性能评估依赖于电滞回线的测量,这直接关系到材料的应用效果和寿命。传统的电滞回线测量方法操作复杂且设备成本高。开发了一种基于LabVIEW的电滞回线测试系统,解决传统方法的不足,降低成本,提高操作便捷性和数据分析的自…

前端面试题38(js原型与对象)

在JavaScript中,原型(prototype)是核心特性之一,它用于实现对象之间的继承和属性方法的共享。理解原型和对象的关系对于深入学习JavaScript至关重要。下面我会详细解释这两个概念以及它们是如何工作的,并给出一些示例代…

关于Python的类的一些理解

才发现python的类对象只能调用类方法 我想使用对类对象a使用系统调用的len方法就会报错 2.类对象a是什么? 答:是所有的带有self的成员变量 举例说明:红色的就是a里面的东西 class A:def __init__(self,data):self.datadataself.b1self.d{a…

详细分析@FunctionalInterface的基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)Spring框架从入门到学精(全) 1. 基本知识 FunctionalInterface 是 Java 8 引入的一个注…

理解负载组电路-EAK负载电路解释

负载组具有安全、可靠、操作方便、使用寿命长等特点。了解控制、冷却和负载元件电路的布局和功能对于理解负载组的运行、为应用选择负载组和维护负载组非常重要。以下各节将描述这些电路。 EAK负荷组运行概述 负载组接收来自电源的电力,将其转换为热量,…

【漏洞复现】通达OA v2017 video_file.php 任意文件下载漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…