delphi实现窗体闪烁功能
delphi实现窗体闪烁功能
以前做窗口闪动时都没有考虑到让任务栏上的按钮闪动的问题,
现在一个客户需要任务栏按钮闪动,发现以前使用的flashwindow不能达到要求了,
查找了一下,找到flashwindowex这个API
如果您创建的应用程序是运行在Windows 98或更高版本操作系统上,您可以通过调用API函数FlashWindowEx并赋给它一个FlashWInfo结构体来实现. 而如果是运行在Windows 95上则比较麻烦, 但您也可以通过使用一个Timer组件来实现想要的效果。
FlashWindowEx
当您调用API函数FlashWindowEx时,一个TFlashWInfo被用来控制Windows实现该闪烁功能的信息. 幸运的是,Delphi已经为您封装了该结构体。Delphi中它被申明如下:
type TFlashWInfo = record cbSize : LongInt; hWnd : LongInt; dwFlags : LongInt; uCount : LongInt; dwTimeout : LongInt; end;
您所需做的全部事情仅仅是填充和组装该记录类型,并调用API函数。本例中,我把两者放在了一个按钮的OnClick事件中,当然您也可以放置它们到任何合适的地方:
procedure TForm1.Button1Click(Sender: TObject); var FWinfo: TFlashWInfo; begin FWinfo.cbSize := 20; FWinfo.hwnd := Application.Handle; // 闪烁窗口的句柄 FWinfo.dwflags := FLASHW_ALL; FWinfo.ucount := 10; // 闪烁的次数 FWinfo.dwtimeout := 0; // 速度以毫秒为单位, 0 默认为与指针闪烁的速率相同
FlashWindowEx(FWinfo); // 使它闪烁! end;
dwflags指示了闪烁的方式,下面是dwflags属性的取值定义:
FLASHW_STOP = 0 // 停止闪烁 FLASHW_CAPTION = 1 // 闪烁窗口标题 FLASHW_TRAY = 2 // 闪烁任务栏按钮 FLASHW_ALL = 3 // 闪烁窗口标题与任务栏按钮
FLASHW_TIMER = 4 // 不停地闪烁,直到FLASHW_STOP标志设置 FLASHW_TIMERNOFG = 5 // 不停地闪烁直到窗口被前置
以上只有在Windows 98或更高版本操作系统上才有效,如果您要在Windows 95上实现,您就需要采取另一不同的途径:
FlashWindow
Windows 95下 (并且Delphi 3及更底版本并包含适用的API封装) 需要不同的途径. 该操作系统下没有FlashWindowEx这个API函数,您需要使用FlashWindow来代替. (FlashWindow还能在更低版本的操作系统中被调用。)
但问题是FlashWindow只能闪烁一次,所以要达到闪烁按钮的目的就需要用到一个timer组件。 当然,这样一来也就加大了宝贵的系统资源开销 - 但它能完成我们想要的效果。
为了达到本示例的目的,您需要创建一个form,并放上一个Timer组件和一个按钮组件。 之后选中Timer组件并双击,OnTimer事件将被创建. 接着添加以下代码:
procedure TForm1.Timer1Timer(Sender: TObject); begin FlashWindow(Application.Handle, True); end;
下一步,你需要启动闪烁。这一步很简单,在Button的OnClick事件中设置Timer的Enabled属性为Ture。本例中我使用Button的事件来切换闪烁的开与关:
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := not Timer1.Enabled; end;
到此为止,两种不同方法实现了相同的功能。
delphi实现窗体闪烁功能的更多相关文章
- Delphi:解决重绘造成的窗体闪烁问题
解决窗体闪烁问题 具体代码: 1.在声明窗体类时加入: private procedure CreateParams(var Params: TCreateParams); overrid ...
- C#学习笔记-Windows窗体基本功能(Login登录界面)
本菜鸟由于实习工作的原因,不得不快速接触C#语言,刚刚好又要做毕业设计,所以就通过自学的方式一举两得地完成这两件事情. 故此文字记录或代码中的各种文件名之类均是以毕业设计为模版记录的,看着不方便之处请 ...
- Delphi Memo的记事本功能
Delphi Memo的记事本功能 下载地址 : http://download.csdn.net/detail/teststudio/6412883 这个代码实现了Windows ...
- 解决mdi窗体闪烁的问题
/// 解决mdi窗体闪烁的问题 /// </summary> protected override CreateParams CreateParams { get { CreatePar ...
- C# 解决窗体闪烁
C# 解决窗体闪烁 在Windows窗体上造成“闪烁”的窗体上有很多控制.造成这种闪烁的原因有两个: 1.当控件需要被绘制时,Windows发送一个控件两个消息.第一个(WM_ERASEBKGND)导 ...
- Delphi中窗体的事件
Delphi中窗体的事件 Form窗体可以响应各种各样的时间,在Object Inspector的Events页面中罗列了一大堆,如下图: 下面将要列出一些常用的事件. 1.OnActivate 当窗 ...
- Delphi默认窗体随想
Delphi中新建一个Form或者Frame时,它的字体都是西文习惯,这样就有可能造成在其他机器上由于字体的原因,窗体十分不美观.怎样才能为Delphi设置一个默认窗体,让它的字体Font符合中国习惯 ...
- delphi 特殊窗体
delphi 窗体阴影 放窗体创建事件里面 SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHAD ...
- Delphi打开窗体时报"Corrupt Portfolio Stream"
今天在打开一个Delphi窗体时报了这么一个错误: Corrupt Portfolio Stream 查了一下,主要是由于Delphi窗体的*.ddp文件损坏引起的. 解决方法: 删除.ddp 文 ...
随机推荐
- E07【餐厅】What would you recommend?
核心句型 What would you recommend? 你有什么推荐吗? 场景对话: A:What do you want to eat? 你想吃点什么? B:I don't know. ...
- ssh密钥批量分发
#################以下所有的命令脚本都是在centos7系统上实现,centos6略有不同 客户端使用公钥连接服务器的步骤: 提起ssh我们就能想到的是远程连接,平时我们都是通过密码来 ...
- 201871010110-李华《面向对象程序设计(java)》第十五周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- python GIL全局解释器锁,多线程多进程效率比较,进程池,协程,TCP服务端实现协程
GIL全局解释器锁 ''' python解释器: - Cpython C语言 - Jpython java ... 1.GIL: 全局解释器锁 - 翻译: 在同一个进程下开启的多线程,同一时刻只能有一 ...
- Git的一些概念(二)
一.Git的结构 二.Git和代码托管中心 代码托管中心的任务:维护远程库 1. 局域网内 GitLab 服务器 -- 可以自己搭建 2. 外部环境 GitHub 码云 三.本地库和远程库 1. 团队 ...
- 团队冲刺--three
今天学习css,用css做登录界面. 昨天学习了爬虫了初步. 问题:爬虫很难.
- 关于Windows自动化卸载软件的思路
思路 关于控制面板“卸载”关联到的exe是这样的: 注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall ...
- 团队作业第五次—项目冲刺-Day4
Day4 part1-SCRUM: 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunte ...
- 推荐一款移动端小视频App玲珑视频
推荐一款移动端小视频App玲珑视频 一 应用描述 玲珑小视频,边看边聊![海量视频,刷个不停,还能找妹子语音聊天哦][随手拍一拍,记录美好生活,还能拿金币哦][看视频领金币.登录领金币.拍视频领金币. ...
- 使用numpy处理数组
def fun_ndarray(): a = [[1,2,7], [-6,-2,-3], [-4,-8,-55] ] b = np.array(a) b = np.abs(b)#取数组的绝对值 pri ...