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实现窗体闪烁功能的更多相关文章

  1. Delphi:解决重绘造成的窗体闪烁问题

    解决窗体闪烁问题 具体代码: 1.在声明窗体类时加入:   private     procedure CreateParams(var Params: TCreateParams); overrid ...

  2. C#学习笔记-Windows窗体基本功能(Login登录界面)

    本菜鸟由于实习工作的原因,不得不快速接触C#语言,刚刚好又要做毕业设计,所以就通过自学的方式一举两得地完成这两件事情. 故此文字记录或代码中的各种文件名之类均是以毕业设计为模版记录的,看着不方便之处请 ...

  3. Delphi Memo的记事本功能

    Delphi Memo的记事本功能           下载地址 : http://download.csdn.net/detail/teststudio/6412883 这个代码实现了Windows ...

  4. 解决mdi窗体闪烁的问题

    /// 解决mdi窗体闪烁的问题 /// </summary> protected override CreateParams CreateParams { get { CreatePar ...

  5. C# 解决窗体闪烁

    C# 解决窗体闪烁 在Windows窗体上造成“闪烁”的窗体上有很多控制.造成这种闪烁的原因有两个: 1.当控件需要被绘制时,Windows发送一个控件两个消息.第一个(WM_ERASEBKGND)导 ...

  6. Delphi中窗体的事件

    Delphi中窗体的事件 Form窗体可以响应各种各样的时间,在Object Inspector的Events页面中罗列了一大堆,如下图: 下面将要列出一些常用的事件. 1.OnActivate 当窗 ...

  7. Delphi默认窗体随想

    Delphi中新建一个Form或者Frame时,它的字体都是西文习惯,这样就有可能造成在其他机器上由于字体的原因,窗体十分不美观.怎样才能为Delphi设置一个默认窗体,让它的字体Font符合中国习惯 ...

  8. delphi 特殊窗体

    delphi 窗体阴影 放窗体创建事件里面 SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHAD ...

  9. Delphi打开窗体时报"Corrupt Portfolio Stream"

      今天在打开一个Delphi窗体时报了这么一个错误: Corrupt Portfolio Stream 查了一下,主要是由于Delphi窗体的*.ddp文件损坏引起的. 解决方法: 删除.ddp 文 ...

随机推荐

  1. lf 前后端分离 (1) auth,token认证

    一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...

  2. python字符串的split replace strip

    split replace strip是字符串中内置的三个函数,作用分别是分割 替换 去空格 0x01:split split(a,b):用指定的字符(a)分割字符串,可以限制分割的次数(b),返回一 ...

  3. Layui的一些心得

    做的项目中用到了前端框架Layui 对于layui,经常犯的错与走的弯路,做下总结: 首先要引用Layui框架罗! 1.   TopLayerClose(); 关闭当前页面 2. TopLayerIn ...

  4. AtCoder Grand Contest 035

    Preface Atcoder的题都好劲啊,都是我做不动的计数与构造 就当锻炼自己的思维能力了(基本都是bzt教的) A - XOR Circle bzt说这题数据太水了只要判一下所有数异或值是否为\ ...

  5. Linux性能优化实战学习笔记:第六讲

    一.环境准备 1.安装软件包 终端1 机器配置:2 CPU,8GB 内存 预先安装 docker.sysstat.perf等工具 [root@luoahong ~]# docker -v Docker ...

  6. [LeetCode] 45. Jump Game II 跳跃游戏之二

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. Linux三剑客入门

    grep文本过滤工具 grep命令是Linux系统中最重要的命令之一,功能是从文本文件或管道数据流中筛选匹配的行和数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令 语法: gr ...

  8. ZJOI 2009 多米诺骨牌(状态压缩+轮廓线+容斥)

    题意 https://www.lydsy.com/JudgeOnline/problem.php?id=1435 思路 一道很好的状压/容斥题,涵盖了很多比较重要的知识点. 我们称每两行间均有纵跨.每 ...

  9. 小程序根据数字做for循环

    笔记:小程序根据具体一个数值做for循环 n为想循环的次数 <view wx:for="{{n - 0}}"> <text>{{index}}</te ...

  10. 路径规划基础A*算法

    1,Dijkstra’s  算法 一种发散性寻找最短路径算法. 由起点开始向四周开始发散,直到碰到目标点为止.这时就是最短路径.优点:能找到与目标点的最短路径:缺点:搜索花费的时间会比较长. 2,Gr ...