【PB案例学习笔记】-11动画显示窗口

news2024/12/27 1:03:20

写在前面

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

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

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

gitee代码仓库

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

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

一、小目标

本篇文章,我们要实现通过user32动态库的AnimateWindow 函数实现窗口的动画效果。

Randomize 函数实现动画效果的随机控制。最终效果如下

动画视窗

二、AnimateWindow 函数简介

① 语法

function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32" 

② 参数说明

hWnd:

  • 类型:HWND
  • 描述:指向要进行动画效果的窗口的句柄。获取窗口句柄可能需要通过特定的函数或属性,比如对于顶级窗口,可以使用Open事件的Parent参数或者窗口对象的句柄属性。

dwTime:

  • 类型:DWORD
  • 描述:动画持续的时间,单位为毫秒。例如,500表示动画持续半秒。

dwFlags:

  • 类型:DWORD
  • 描述:指定动画类型和方向的标志。可以是以下值的组合:
    • AW_HOR_POSITIVE(水平从左到右)
    • AW_HOR_NEGATIVE(水平从右到左)
    • AW_VER_POSITIVE(垂直从上到下)
    • AW_VER_NEGATIVE(垂直从下到上)
    • AW_CENTER(窗口从中心扩大或缩小)
    • AW_HIDE(隐藏窗口,缺省则显示窗口)
    • AW_ACTIVATE(激活窗口)
    • AW_SLIDE(滑动效果)
    • AW_BLEND(淡入淡出效果,需要Windows 2000或更高版本)

三、创建程序基本框架

① 新建工作区

② 新建exampleapp应用

③ 新建w_main 窗口。Title 设置为动画视窗

以上步骤如果忘记了的小伙伴可以翻一翻第一篇文章

④ 往窗口中添加控件

w_main窗口中添加一个按钮控件cb_1,调整位置,将Text属性设置成开启动画视窗

开启视窗按钮

⑤ 新建w_animate 窗口

将窗口Title 设置为动画窗口,并将其Center属性设置为False

新建 窗口

⑥ 往w_animate 窗口 中添加控件

w_animate 窗口中添加一个MultiLineEdit控件和一个CommandButton控件,分别命名为mle_1cb_2

mle_1Text值设置为:这是一个动态视窗,通过这个窗口演示动态窗口效果,将cb_2Text值设置为关闭

添加控件

⑦ 保存窗口

四、编写代码

① 在w_main窗口中的cb_1按钮的Clicked事件中添加如下代码

open(w_animate)

② 在w_animate窗口的Declare Instance Variables 选项卡中添加如下实例变量

constant long AW_HOR_POSITIVE = 1 
constant long AW_HOR_NEGATIVE = 2 
constant long AW_VER_POSITIVE = 4 
constant long AW_VER_NEGATIVE = 8 
constant long AW_CENTER = 16 
constant long AW_HIDE = 65526 
constant long AW_ACTIVATE  = 131072 
constant long AW_SLIDE = 262144 
constant long AW_BLEND = 524288 

③ 在本地外部扩展函数(Local External Functions) 选项中添加如下代码

function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32" 

④ 在w_animate窗口的open事件中添加如下代码

long ll_handle  
//获取当前窗口的句柄
ll_handle = Handle ( This ) 
//初始化随机数种子,确保每次运行都有不同的动画效果
Randomize ( 0 ) 
// 根据随机数选择不同的动画效果
Choose Case rand ( 6 ) 
	Case 1 
		  // 淡入并从底部向上滑动窗口
        // AW_SLIDE启用滑动效果
        // AW_VER_POSITIVE表示垂直方向从下到上
        // AW_ACTIVATE激活窗口
		AnimateWindow(ll_handle,1000,AW_SLIDE+AW_VER_POSITIVE+AW_ACTIVATE) 
	Case 2 
		// 淡入并从顶部向下滑动窗口
        // 同上,但AW_VER_NEGATIVE表示垂直方向从上到下
		AnimateWindow(ll_handle,1000,AW_SLIDE+AW_VER_NEGATIVE+AW_ACTIVATE) 
	Case 3 
		// 淡入并向右滑动窗口
        // 同上,但AW_HOR_POSITIVE表示水平方向从左到右
		AnimateWindow(ll_handle,1000,AW_SLIDE+AW_HOR_POSITIVE+AW_ACTIVATE) 
	Case 4 
		// 淡入并向左滑动窗口
        // 同上,但AW_HOR_NEGATIVE表示水平方向从右到左
		AnimateWindow(ll_handle,1000,AW_SLIDE+AW_HOR_NEGATIVE+AW_ACTIVATE) 
	Case 6,5 
		// 淡入并从中心展开窗口
        // 同上,但AW_CENTER表示窗口从中心扩大或缩小
		AnimateWindow(ll_handle,1000,AW_SLIDE+AW_CENTER+AW_ACTIVATE) 
End Choose 

⑤ 在w_animate 窗口的Close事件中添加如下代码

long ll_handle  
//获取该窗口句柄
ll_handle = Handle(This) 
//动画关闭窗口
AnimateWindow(ll_handle,300,AW_SLIDE+AW_HIDE+AW_CENTER) 

⑥ 在w_animate窗口的Clicked事件中添加如下代码

Close(w_animate)

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

open(w_main)

五、运行程序

运行程序,最终效果如下所示

动画视窗

本期内容到这儿就结束了,希望对您有所帮助。 ★,°:.☆( ̄▽ ̄)/$:.°★
我们下期再见 ヾ(•ω•`)o (●’◡’●)

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

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

相关文章

在矩池云上使用StoryDiffusion的详细方法

StoryDiffusion 是由南开大学和字节跳动团队联合研发的,基于一致性自注意力机制生成长跨度图像和视频的新型扩散模型(Consistent Self-Attention for Long-Range Image and Video Generation),使用者不需要进行额外训练&#xff0…

利用EasyCVR视频智能监控技术,构建智慧化考场监管体系

随着科技的进步,视频监控在各个领域的应用越来越广泛,其中在考场中的应用尤为显著。视频监控不仅能够提高考场的监管水平,确保考试的公平、公正和公开,还能有效预防和打击作弊行为,为考生营造一个良好的考试环境。 传…

SARscape雷达图像处理软件简介

合成孔径雷达(SAR)拥有独特的技术魅力和优势,渐成为国际上的研究热点之一,其应用领域越来越广泛。SAR数据可以全天候对研究区域进行量测、分析以及获取目标信息。高级雷达图像处理工具SARscape,能让您轻松将原始SAR数据…

JavaScrip原型对象

参考 JavaScrip原型对象 | LogDicthttps://www.logdict.com/archives/javascripyuan-xing-mo-shi

C++---迭代器介绍

迭代器的介绍 使用迭代器需要引用头文件,但一般的容器都引用了这个头文件。 这五种迭代器的声明如下: struct output_iterator_tag { };//输出迭代器 struct input_iterator_tag{ };//输入迭代器 struct forward_iterator_tag : public input_iterator_tag {};//向前迭代器 …

【MySQL】SQL 基础

文章目录 【 1. SQL 的书写规则 】1.1 大小写规则1.2 常量的表示1.3 注释1.4 HELP 系统帮助 【 2. 常用数据库函数 】2.1 SHOW DATABASES 显示数据库2.2 CREATE DATABASE 创建数据库2.3 ALTER DATABASE 修改数据库2.4 DROP DATABASE 删除数据库2.5 USE 选择数据库 【 3. RDBMS …

防火墙如何端口映射?

防火墙端口映射(Firewall Port Mapping)是一种网络技术,通过对防火墙配置进行调整,允许外部网络用户访问内部网络中的指定端口。该技术使得外部用户可以通过公共网络访问内部网络中的特定服务或应用程序,从而实现远程访…

Golang | Leetcode Golang题解之第117题填充每个节点的下一个右侧节点指针II

题目: 题解: func connect(root *Node) *Node {start : rootfor start ! nil {var nextStart, last *Nodehandle : func(cur *Node) {if cur nil {return}if nextStart nil {nextStart cur}if last ! nil {last.Next cur}last cur}for p : start; …

第13章 层次式架构设计理论与实践

层次式架构的核心思想是将系统组成为一种层次结构,每一层为上层服务,并作为下层客户。其实不管是分层还是其他的架构都是为了解耦,更好的复用,只要秉承着这种思想去理解一切都迎刃而解了。 13.1 层次上体系结构概述 回顾一下软件…

散户如何参与期权交易?

期权就是股票,唯一区别标的物上证指数,会看大盘吧,期权交易两个方向认购做多,认沽做空,双向t0交易没了,期权交易跟期货一样,对的,玩的也是合约,唯一区别没有保证金不会爆…

redis显示RDB error

报错问题:"RDB error" 是指在Redis的RDB持久化过程中出现了错误。Redis的RDB持久化是通过将内存中的数据集快照保存到磁盘中的一种方式。如果在这个过程中遇到问题,Redis会记录一条包含"RDB error"的日志信息。上图错误,…

k8s群集调度之 pod亲和 node亲和 标签指定

目录 一 调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate(预选策略) 常见的算法 2.2priorities(优选策略)常见的算法 三、k8s将pod调度到指定node的方法 3.1指…

写论文时某一行的字间距突然增大,如何解决?

问题描述: 某一行的字间距突然变大,占满了一行,检查设置也没有异常。 如何解决 一、全选出现问题的段落 二、右键,然后点击段落 三、然后勾选允许西文在单词中间换行 四、正常了

电源模块测试系统怎么测试输入电压范围?

在现代电子设备中,电源模块的性能直接影响着整个系统的稳定性和效率。其中,电源输入电压范围是指电源能够接受的输入电压的最小值和最大值,它是确保电源正常工作的重要参数。为了提高测试效率和精度,自动化的测试方法逐渐取代了传…

解决IDEA菜单栏找不到VCS的问题,且使用IDEA推送新项目到托管仓库

问题描述: 在idea软件中使用git推送项目,idea页面顶部菜单栏无VCS 解决方案: 一:File->Settings->Version Control-> 点击 ->选择项目->VCS:->点击ok: 二:托管平台创建一个Git仓库来保…

MongoDB数据库(10亿条数据)清理策略: 自动化过期数据删除实战

1、引言 随着应用程序和业务数据的持续增长,有效地管理数据库存储空间成为维护系统性能的关键。在MongoDB这类NoSQL数据库中,定期清理过期数据变得尤为重要,这不仅能释放宝贵的存储资源,还能优化查询性能,确保数据库运…

python数据分析——分组操作1

参考资料:活用pandas库 1、简介 借助“分割-应用-组合”(split-apply-combine)模式,分组操作可以有效地聚合、转换和过滤数据。 分割:基于键,把要处理的数据分割为小片段。 应用:分别处理每个数…

Raven2掠夺者2渡鸦2游戏预约注册教程 账号注册教程

《渡鸦2》是一款源自韩国的创新力作,作为《Raven》系列的最新续篇,这款游戏在MMORPG手游领域内再度扩展了其标志性的暗黑奇幻宇宙,融入了大量革新的游戏设计与丰富内容。定档于2024年5月29日开启公测的《渡鸦2》,正处在紧张刺激的…

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建及使用 前言 官网介绍:ARL全称-Asset Reconnaissance Lighthouse,中文含义:资产侦察灯塔系统。 旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或…

数组-捡石子小游戏

一、题目描述 二、解题思路 刚开始拿到题目的时候在想是不是需要把所有情况枚举出来,其实思考一下能看出规律: 1.如果有1、2、3颗石子,小牛一定可以赢; 2.再来看4颗石子的时候,小牛A可以拿1~3颗,但是无论小…