【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_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 (●’◡’●)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 08:26:05       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 08:26:05       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 08:26:05       90 阅读
  4. Python语言-面向对象

    2024-07-10 08:26:05       98 阅读

热门阅读

  1. SQL 字段类型-上

    2024-07-10 08:26:05       35 阅读
  2. C++ 入门04:数组与字符串

    2024-07-10 08:26:05       25 阅读
  3. 简谈设计模式之原型模式

    2024-07-10 08:26:05       31 阅读
  4. GPT带我学-设计模式-13策略模式

    2024-07-10 08:26:05       30 阅读
  5. 写一个字符设备的驱动步骤

    2024-07-10 08:26:05       30 阅读
  6. Transformer和Bert的原理是什么

    2024-07-10 08:26:05       30 阅读
  7. 使用tkinter 制作工作流ui

    2024-07-10 08:26:05       25 阅读
  8. postman工具介绍

    2024-07-10 08:26:05       26 阅读
  9. vue-路由自动化

    2024-07-10 08:26:05       22 阅读
  10. el-date-picker 扩展

    2024-07-10 08:26:05       26 阅读
  11. Go语言入门之变量、常量、指针以及数据类型

    2024-07-10 08:26:05       22 阅读
  12. Kotlin 处理livedata数据倒灌

    2024-07-10 08:26:05       25 阅读
  13. 针对vue3的render函数添加自定义指令

    2024-07-10 08:26:05       28 阅读
  14. Kotlin中的关键字

    2024-07-10 08:26:05       29 阅读
  15. Matlab 使用

    2024-07-10 08:26:05       29 阅读