Access开发右下角浮窗提醒

Hi,大家好呀!

感觉又有很长一段时间没有给大家更新内容了,最近一直在忙,给大家承诺的框架、视频教程、直播等等感觉又要跳票了,嘿嘿,但大家还是不要急,莫催我,我会慢慢都更新出来的!大家持续关注我就行!我会一直肝到底!

那今天给大家更新点啥呢?

在桌面应用里,通知既要“被看到”,又要“不打扰”。“角落滑入通知”是一种兼顾二者的方案。

效果与交互

  • 位置:屏幕右下角,避开任务栏。

  • 动画:自底向上滑入 → 停留约 3 秒 → 透明度逐步降低并关闭。

  • 打断友好:不抢焦点,不遮挡输入光标区域;可点击交互后延时关闭或保持

01、创建窗体

这里,我们要创建一个窗体,我们可以在窗体上放一个标签用于信息的显示,这里就做的简单一些,后期可以自己慢慢调整,如图:

1.png

02、添加代码

接着,我们就可以添加代码了,具体代码分两块

1、在窗体里面,添加如下代码

' 功能:窗体加载后贴靠屏幕右下,从底部向上滑动显示,停留约 3 秒后逐步隐藏并关闭。' 说明:本代码在 Access/表单中使用 twips 单位(1 像素 ≈ 15 twips)。' 依赖:apiGetDC、GetDeviceCaps、GetSystemHeight、GetTaskbarHeight 为外部/自定义函数。Dim MyWidth As Long, MyHeight As Long   ' 屏幕分辨率(像素)Dim D As Long, TranI As Byte            ' D: 停留计数器;TranI: 透明度计数器(0-255)Private Sub Form_Load()Dim Hdc As Long                      ' 屏幕 DC 句柄Hdc = apiGetDC(0)                    ' 获取整个屏幕的 DCMyWidth = GetDeviceCaps(Hdc, 8)      ' HORZRES = 8,屏幕宽度(像素)MyHeight = GetDeviceCaps(Hdc, 10)    ' VERTRES = 10,屏幕高度(像素)DoCmd.MoveSize (MyWidth * 15 - Me.WindowWidth), GetSystemHeight * 15' 将窗体移动到屏幕右侧(X=屏幕宽度*15 - 窗体宽度),Y 放在工作区底部(像素转 twips)Me.OnTimer = "=ShowTimer()"          ' 首先执行滑动显示Me.TimerInterval = 10                ' 定时器间隔 10 msEnd SubPrivate Function ShowTimer()Dim I As IntegerFor I = GetSystemHeight * 15 To (MyHeight * 15 - Me.WindowHeight) - GetTaskbarHeight * 15 Step -1' 从工作区底部开始,逐像素向上滑动到目标位置(避开任务栏)DoCmd.MoveSize (MyWidth * 15 - Me.WindowWidth), INext IMe.OnTimer = "=DTimer()"             ' 滑动结束,进入停留计时阶段End FunctionPrivate Function DTimer()If D >= 300 Then                     ' 约 300*10ms ≈ 3 秒Me.OnTimer = "=HidenTimer()"     ' 切换到隐藏阶段Exit FunctionEnd IfD = D + 1                            ' 增加停留计数End FunctionPrivate Function HidenTimer()If TranI = 0 ThenMe.TimerInterval = 0             ' 停止计时器DoCmd.Close acForm, Me.Name      ' 关闭窗体Exit FunctionEnd IfTranI = TranI - 2                    ' 逐步降低透明度计数(需配合外部绘制/Alpha 逻辑生效)End FunctionPrivate Function ReSetTranI()If D <> 150 ThenD = 150                          ' 将停留计数重置到中间值Me.OnTimer = "=DTimer()"         ' 返回到停留计时阶段End IfEnd Function

2、添加一个通用模块,在通用模块里添加代码

Option Explicit' 像素与缇(twips)转换相关/屏幕参数 -----------------------------------------------------------' 说明:Access/表单使用缇作为尺寸单位(约 1 像素 ≈ 15 缇)。以下 API 返回的均为像素单位。' 获取指定窗口(或屏幕)的设备环境句柄(DC);hwnd=0 表示整个屏幕Public Declare Function apiGetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long' 释放通过 GetDC 获取的 DC;必须与 GetDC 成对调用Public Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal Hdc As Long) As Long' 获取设备能力参数;常用:8=HORZRES(屏幕宽度像素),10=VERTRES(屏幕高度像素)Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal Hdc As Long, ByVal nIndex As Long) As Long' 获取系统度量;nIndex=SM_CXSCREEN/SM_CYSCREEN 分别为屏幕宽/高(像素)Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long' 系统度量索引:屏幕宽/高(像素)Public Const SM_CXSCREEN = 0Public Const SM_CYSCREEN = 1' SystemParametersInfo 动作码:获取工作区矩形(不含任务栏)Public Const SPI_GETWORKAREA = 48' 屏幕坐标矩形,单位:像素Type RECTLeft As Long    ' 左上角 XTop As Long     ' 左上角 YRight As Long   ' 右下角 XBottom As Long  ' 右下角 YEnd Type' 通过 SystemParametersInfo 获取/设置系统参数;' 当 uAction=SPI_GETWORKAREA 时,lpvParam 需传入 RECT,用于接收不含任务栏的工作区Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long' 取得屏幕高度(像素)' 注意:返回类型为 Integer;在超高分辨率环境下建议改为 Long 以避免溢出Public Function GetSystemHeight() As IntegerGetSystemHeight = GetSystemMetrics(SM_CYSCREEN)End Function' 取得任务栏高度(像素)= 屏幕总高 - 工作区 Bottom' 注意:忽略了 API 返回值 lRes 的错误处理;生产代码可判断非 0 表示成功' 同样地,返回类型为 Integer;高分屏建议改为 LongPublic Function GetTaskbarHeight() As IntegerDim lRes As LongDim RectVal As RECTlRes = SystemParametersInfo(SPI_GETWORKAREA, 0, RectVal, 0) ' 填充工作区(不含任务栏)GetTaskbarHeight = GetSystemMetrics(SM_CYSCREEN) - RectVal.BottomEnd Function

03、运行测试

代码比较多,大家都要复制正确了。

最后我们就可以运行测试了,双击打开这个窗体后,窗体可以在右下方打开,我们来看看效果怎么样。

2.gif

注意:我做成GIF,剪辑速度加快了。

小结

“角落滑入通知”用最小打扰传递关键信息。基于简单状态机与少量参数,就能在 Access/VBA 中快速获得稳定、顺滑、可扩展的桌面提醒体验。

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

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

相关文章

AI自进化,GPU性能翻三倍——CUDA-L1开启自动优化新范式

最近看到一篇让我挺震撼的文章&#xff0c;来自 DeepReinforce 团队发布的一个新框架——CUDA-L1。说实话&#xff0c;刚看到标题说“AI 让 GPU 性能提升 3 倍以上”&#xff0c;我心里是有点怀疑的。毕竟我们搞科研的都知道&#xff0c;这种宣传语很多时候水分不小。但当我静下…

深入理解 Java AWT Container:原理、实战与性能优化

以 Container 为核心梳理 AWT 容器体系与事件模型&#xff0c;提供可运行的纯 AWT 示例&#xff08;含 Panel、Frame、Dialog、ScrollPane 正确用法&#xff09;&#xff0c;并给出常见问题与性能优化建议。 Java AWT, Container, 容器, 布局管理器, 事件驱动, ScrollPane, 性…

redis--黑马点评--用户签到模块详解

用户签到假如我们使用一张表来存储用户签到信息&#xff0c;其结构应该如下&#xff1a;CREATE TABLE tb_sign (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint unsigned NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到的年,month tinyin…

Shell、Python对比

在 Shell 脚本&#xff08;sh/bash&#xff09; 和 Python 之间选择时&#xff0c;主要取决于具体的使用场景和需求。以下是两者的对比分析&#xff0c;帮助你判断哪种更方便&#xff1a;1. Shell 脚本&#xff08;sh/bash&#xff09;的优势适用场景系统管理任务&#xff1a;如…

自适应反步控制:理论与设计

自适应反步控制 文章目录自适应反步控制1. 基本思想A. 第一步B. 第二步1. 基本思想 基于传统反步法&#xff0c;考虑了系统方程中以线性形式出现的未知参数。核心思想包括参数估计率和控制率。 考虑二阶系统&#xff1a; {x˙1x2φ1T(x1)θx˙2uφ2T(x1,x2)θ(1)\begin{cases…

[Oracle] LEAST()函数

LEAST() 是 Oracle 中一个非常有用的函数&#xff0c;用于从一组表达式中返回最小值LEAST()函数会从给定的参数列表中返回最小的值&#xff0c;它与GREATEST()函数正好相反语法格式LEAST(expr1, expr2 [, expr3, ...])参数说明expr1, expr2, ...&#xff1a;要比较的表达式(至少…

SVM算法实战应用

目录 用 SVM 实现鸢尾花数据集分类&#xff1a;从代码到可视化全解析 一、算法原理简述 二、完整代码实现 三、代码解析 1. 导入所需库 2. 加载并处理数据 3. 划分训练集和测试集 4. 训练 SVM 模型 5. 计算决策边界参数 6. 生成决策边界数据 7. 绘制样本点 8. 绘制…

深度虚值期权合约有什么特点?

本文主要介绍深度虚值期权合约有什么特点&#xff1f;深度虚值期权合约是期权市场中一类特殊且风险收益特征鲜明的合约&#xff0c;其核心特点可归纳为以下六点。深度虚值期权合约有什么特点&#xff1f;一、定义&#xff1a;执行价与标的价差距极大深度虚值期权是指执行价&…

(LeetCode 面试经典 150 题) 86. 分隔链表(链表+双指针)

题目&#xff1a;86. 分隔链表 思路&#xff1a;双指针&#xff0c;时间复杂度0(n)。 双指针来维护小于x的链表和不小于x的链表即可&#xff0c;后面将两个链表连起来即可。 C版本&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* …

安全扫描:检测到目标站点存在javascript框架库漏洞问题(vue)

如果升级Vue版本有限制或者时间比较紧急&#xff0c;可以暂时用下面方式来&#xff0c;规避检测到目标站点存在javascript框架库vue漏洞。 在 vue.config.js 中配置: module.exports {configureWebpack: {optimization: {minimizer: [new (require(terser-webpack-plugin))({t…

【性能测试】-2- JMeter工具的使用

一、基础脚本搭建&#x1f3af; 核心目标&#xff1a;用 JMeter 搭性能测试 “骨架”&#xff08;测试计划、线程组、取样器、监听器&#xff09;&#x1f4cb; 测试计划&#xff1a;整个测试的 “容器”&#xff0c;所有测试组件都放这里&#x1f9f5; 线程组&#xff1a;模拟…

从零构建桌面写作软件的书籍管理系统:Electron + Vue 3 实战指南

&#x1f4da; 从零构建桌面写作软件的书籍管理系统&#xff1a;Electron Vue 3 实战指南 &#x1f4a1; 本文深入探讨了基于 Electron Vue 3 技术栈的桌面写作软件中书籍管理系统的设计与实现&#xff0c;涵盖了书籍的创建、编辑、删除等核心功能的完整技术方案&#xff0c;…

2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】原创论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】完整的成品论文。本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。A题论…

网络相关(AI回答)

网管交换机都支持带tag的以太帧吗DeepSeek-R1 回答完成深度思考完成 用时24秒&#xff0c;搜索全网20篇资料是的&#xff0c;所有网管交换机都支持处理和转发带Tag&#xff08;802.1Q VLAN标签&#xff09;的以太网帧&#xff0c;这是其核心功能之一。以下是关键要点&#xff1…

每日五个pyecharts可视化图表-bars(5)

探索pyecharts库中条形图的高级用法与定制技巧&#xff0c;打造精美数据可视化图表 在数据可视化中&#xff0c;条形图是最常用的图表类型之一。它能够清晰地展示不同类别的数据对比&#xff0c;帮助我们快速理解数据特征。本文将为您介绍pyecharts库中条形图的5种高级用法&…

分布式版本控制工具Git

一.开发中为什么需要Git因为在多人开发中Git可以管理代码&#xff0c;而且每个人都可以从库里面下载代码进行修改&#xff0c;每个人上传和修改Git都会有记录&#xff0c;如果出现大错误&#xff0c;还可以回退到正常版本。二.Git原理我们首先从代码库(Remote)下载代码到工作区…

OpenAI重磅开源GPT-oss:首款支持商用的AI Agent专属模型

今日凌晨&#xff0c;OpenAI宣布开源两款全新大模型——GPT-oss-120B&#xff08;1168亿参数&#xff09;与GPT-oss-20B&#xff08;209亿参数&#xff09;&#xff0c;成为全球首个支持商业化应用的开放权重推理模型。该模型专为AI智能体&#xff08;Agent&#xff09;设计&am…

【STM32】GPIO的输入输出

GPIO是通用的输入输出接口&#xff0c;可配置8种输入模式&#xff0c;输出模式下可控制端口输出高低电平&#xff0c;用于点亮LED、控制蜂鸣器、模拟通信协议等&#xff1b;输入模式下可以读取端口的高低电平或者电压&#xff0c;用于读取按键、外接模块的电平信号、ADC的电压采…

5分钟了解OpenCV

在数字化时代&#xff0c;图像和视频已经成为信息传递的核心载体。从手机拍照的美颜功能到自动驾驶的路况识别&#xff0c;从医学影像分析到安防监控系统&#xff0c;视觉技术正深刻改变着我们的生活。而在这背后&#xff0c;OpenCV 作为一款强大的开源计算机视觉库&#xff0c…

Oracle 关闭 impdp任务

Oracle 关闭 impdp任务 执行 impdp system/123456 attachSYS_EXPORT_TABLE_01 执行 stop_jobimmediate