【PB案例学习笔记】-25制作一个带底图的MDI窗口

写在前面

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

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

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

gitee代码仓库

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

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

一、小目标

通过本案例我们将制作一个带有底图的MDI窗口。通过这个案例我们可以制作出带底图的窗口,使窗口更加美观

二、创作思路

一般来说,在MDI窗口中无法放入底图,但通过本案例,我们建立一个标准的窗口来加载图片,MDI窗口启动时,打开这个窗口,就如同在MDI窗口中加载图片一样。最终效果如下

图片mdi

三、创建程序基本框架

① 新建examplework工作区

② 新建exampleapp应用

③ 新建w_main窗口,将其Title设置为主窗口

由于文章篇幅原因,以上步骤不再赘述,如果忘记怎么操作的小伙伴可以翻一翻该系列第一篇文章

④ 新建w_pic窗口

将窗口的Visible属性设置成True,其他属性均为False WindowType属性设置为popup!,并在窗口中添加Picture

控件,将其命名为p_1,如下图所示

w_pic窗口

⑤ 新建w_sheet 窗口

将其Title属性设置成“子窗口”

w_sheet子窗口

⑥新建m_main菜单,如下图所示

m_main菜单

四、编写w_pic代码

① 在w_pic窗口中定义实例变量,代码如下

boolean    isFullScreen
integer      oldwidth,oldheight

在窗口中定义实例变量

② 在w_pic窗口中定义init函数init(string as_picture,boolean as isfullscreen) returns (none)代码如下

p_1.OriginalSize	= true
p_1.pictureName = as_picture

oldheight = p_1.height
oldwidth = p_1.width

p_1.originalSize = false

this.resize(this.width,this.height)

③ 在w_pic窗口的open事件中添加如下脚本

isfullscreen = true
oldheight = p_1.height
oldwidth = p_1.width

④ 在w_pic窗口中添的Resize事件中添加如下代码

p_1.setredraw(false)

if isFullScreen then
	p_1.x = 0
	p_1.y = 0
	p_1.resize(newwidth,newheight)
else
	p_1.resize(oldwidth,oldheight)
	
	integer ax,ay
	
	ax = (newwidth - oldwidth) / 2
	if ax < 0 then ax = 0
	ay = (newheight - oldheight) / 2
	if ay < 0 then ay = 0
	
	p_1.x = ax
	p_1.y = ay
end if

p_1.setredraw(true)

五、编写w_main窗口代码

① 在w_main窗口中添加实例变量

w_pic               mdipicture
string       mdiPictureName
boolean     mdiIsFullScreen

② 在w_main中定义如下函数

setpicture (string as_picture,boolean as_isfullscreen) returns (none),具体代码如下

mdipicturename = as_picture
mdiisfullscreen = as_isfullscreen

if isvalid(mdipicture) then 
	mdipicture.init(mdipicturename,mdiisfullscreen)
	mdipicture.resize(this.width,this.height)
end if

③ 在w_main窗口的Resize事件中添加如下代码

if isvalid(mdiPicture) = false then
	opensheet(mdipicture,this)
	mdipicture.init(mdipicturename,mdiisfullscreen)
	mdipicture.x = 0
	mdipicture.y = 0
end if
mdipicture.resize(newwidth,newheight)

六、编写m_main菜单代码

① 在m_main菜单的Open命令的Clicked事件中添加如下代码

w_sheet sheet
opensheet(sheet,parentwindow)

open菜单添加代码

② 在m_main 菜单的Exit命令的Clicked事件中添加如下代码

CLOSE(PARENTWINDOW)

exit添加如下代码

③ 在m_main 菜单的Layer命令的Clicked事件中添加如下代码

parentwindow.ArrangeSheets ( Layer!  )

④ 在m_main 菜单的Cascade命令的Clicked事件中添加如下代码

parentwindow.ArrangeSheets ( Cascade!   )

七、exampleapp应用Open添加如下代码

①开发界面左边的System Tree窗口中双击exampleapp应用,在其Open事件中输入如下代码

OPEN(w_main)
w_main.setpicture("back.bmp",true)

② 在根目录下准备back.bmp图片

根目录下准备图片

back.bmp图片

八、运行程序

经过上面一堆操作,代码编写后。来检验一下我们的劳动成果

图片mdi

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程

方法一&#xff1a;PHP_diseval_extension禁用 Linux CentOS 禁用php的eval函数详细图文教程_centos php 禁用 eval-CSDN博客 这个方法make报错&#xff0c;懒得费时间处理&#xff0c;直接用第二种 方法二&#xff1a;suhosin禁用 不支持PHP8&#xff0c;官方只支持PHP7以下…

SpringMVC基础详解

文章目录 一、SpringMVC简介1、什么是MVC2、MVC架构模式与三层模型的区别3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、执行Controller 三、RequestMapping注解1、value属性1.1、基础使用1.2、Ant风格&#xff08;模糊匹配…

《Programming from the Ground Up》阅读笔记:p1-p18

《Programming from the Ground Up》学习第1天&#xff0c;p1-18总结&#xff0c;总计18页。 一、技术总结 1.fetch-execute cycle p9, The CPU reads in instructions from memory one at a time and executes them. This is known as the fetch-execute cycle。 2.genera…

企业化运维(6)_redis数据库

Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 redis是一个key-value存储系统。和Memcached类似&#xff0…

Vuetify3:关于两组件并列刷新变成两行并非一行问题,满足响应式

我们在使用vuetify3 开发站点的时候&#xff0c;我们需要两个组件并排&#xff0c;而且需要满足响应式&#xff1a; 那我们如何解决这个问题呢&#xff1f; 我们在开发的时候&#xff0c;一开始我们直接使用官方提供的弹性布局直接上代码&#xff1a; <template><v…

InnoDB 表空间2---系统表空间

系统表空间 了解完了独立表空间的基本结构&#xff0c;系统表空间的结构也就好理解多了&#xff0c;系统表空间的结构和独立表空间基本类似&#xff0c;只不过由于整个MySQL进程只有一个系统表空间&#xff0c;在系统表空间中会额外记录一些有关整个系统信息的页&#xff0c;所…

docker仓库--centos7.9部署harbor详细过程与使用以及常见问题

文章目录 前言1.docker-compose是什么2.harbor是什么 centos7部署harbor详细过程与使用环境一、部署docker二、部署harbor1.下载docker-compose工具2.harbor安装3.拷贝样本文件&#xff0c;并修改文件4.安装harbor&#xff0c;安装完成自行启动5.查看 三、harbor的使用1.创建项…

「C++系列」C++ 数据类型

文章目录 一、C 数据类型二、C 数据类型占位与范围三、类型转换1. 隐式类型转换&#xff08;Automatic Type Conversion&#xff09;2. 显式类型转换&#xff08;Explicit Type Conversion&#xff09;3. 示例代码 四、数据类型案例1. 整型2. 浮点型3. 字符型4. 布尔型5. 枚举类…

Redis基础教程(四):redis键(key)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link&#xff1a;link code&#xff1a;code ARC是一个改进的backbone&#xff0c;相比于ResNet&#xff0c;最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数&#xff0c;其中旋转角度由路由函数以数据相关的方式预测。此外&#xff0c;还采…

【PL理论深化】(13) 变量与环境:文法结构 | 真假表达式:isZero E | let 表达式叠放 | 定义的规则 | 条件语句的使用

&#x1f4ac; 写在前面&#xff1a;从现在开始&#xff0c;让我们正式设计和实现编程语言。首先&#xff0c;让我们扩展在之前定义的整数表达式语言&#xff0c;以便可以使用变量和条件表达式。 目录 0x00 文法结构 0x01 真假表达式&#xff1a;isZero E 0x02 let 表达式叠…

Leetcode 78 数组子集

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1…

Python-数据分析组合可视化实例图【附完整源码】

数据分析组合可视化实例图 开篇&#xff1a;应女朋友的要求&#xff0c;于是写下了这篇详细的数据可视化代码及完整注释 一&#xff1a;柱状图、折线图横向组合网格布局 本段代码使用了pyecharts库来创建一个包含多个图表&#xff08;柱状图、折线图&#xff09;和网格布局的…

服装分销的系统架构

背景 服装的分销规则&#xff1a;组织结构由总公司代理商专卖店构成。总公司全权负责销售业务&#xff0c;并决定给代理商的份额&#xff1b;代理商再给货到专卖店&#xff0c;整个组织机构呈现树状结构&#xff1b;上级机构对下级机构拥有控制权&#xff0c;主要控制其销售的服…

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…

MySQL高阶:事务和并发

事务和并发 1. 事务创建事务 2. 并发和锁定并发问题 3. 事务隔离等级3.1 读取未提交隔离级别3.2 读取已提交隔离级别3.3 重复读取隔离级别3.4 序列化隔离级别 4. 死锁 1. 事务 事务&#xff08;trasaction&#xff09;是完成一个完整事件的一系列SQL语句。这一组SQL语句是一条…

植物大战僵尸融合版2024最新版本登场,绝对能满足你的所有期待!

一开场&#xff0c;就让我们直切主题。各位玩家&#xff0c;是否已对《植物大战僵尸》中的传统植物和僵孠对决失去了新鲜感&#xff1f;是否渴望体验更具创意、更富挑战性的游戏玩法&#xff1f;那么&#xff0c;让我来告诉你&#xff0c;《植物大战僵尸融合版》1新版本的登场&…

AI论文速读 | 2024[KDD]ASeer基于异步时空图卷积网络的不规则交通时间序列预测

题目&#xff1a;Irregular Traffic Time Series Forecasting Based on Asynchronous Spatio-Temporal Graph Convolutional Network 作者&#xff1a;Weijia Zhang, Le Zhang, Jindong Han&#xff08;韩金栋&#xff09;, Hao Liu&#xff08;刘浩&#xff09;, Jingbo Zhou…

纯硬件FOC驱动BLDC

1. 硬件FOC 图 1 为采用 FOC 的方式控制 BLDC 电机的过程&#xff0c;经由 FOC 变换( Clark 与 Park 变换) &#xff0c;将三相电流转换为空间平 行电流 ID 与空间垂直电流 IQ。经过 FOC 逆变化逆( Clark 变换与逆 Park 变换) &#xff0c;将两相电流转换为三相电流用于控 制电…

容器:deque

以下是对于deque容器知识的整理 1、构造 2、赋值 3、大小操作 4、插入 5、删除 6、数据存取 7、排序 #include <iostream> #include <deque> #include <algorithm> using namespace std; /* deque容器&#xff1a;双端数组&#xff0c;可以对头端进行插入删…