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. int数据类型的最大数

    /* 32位系统 */ #include <stdio.h> int main() { , b = ; ) { ; } printf(); ; do { n = n / ; b++; } ...

  2. Python玩转微信小程序

    用Python玩转微信   Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat. ...

  3. Spring(003)-消费返回list的rest服务

    通过spring提供的RestTemplate就可以访问rest服务.首先需要创建一个RestTemplate,这个需要手动来创建bean @Configuration public class De ...

  4. 201871010128-杨丽霞《面向对象程序设计(java)》第十四周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第十四周学习总结(1分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-dai ...

  5. Vue2.0个人记录的学习笔记【待续】

    一.Vue实例对象 我们构造一个实例对象 需要new一个Vue var my = new Vue({ el:‘#app’ ,[ app是装载的位置] template: ‘<div>< ...

  6. javaConfig下的springmvc配置

    javaConfig下的springmvc配置 一.静态资源过滤 XML的配置 <mvc:resources mapping="/**" location="/&q ...

  7. [LeetCode] 13. Roman to Integer 罗马数字转化成整数

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  8. 【day06】css

    一.背景(Background) 1. background-color 背景颜色 2. background-image:url(图像URL);背景图片 3. background-repeat: ...

  9. Node.js 入门篇

    Node.js 使用C++开发的. Node.js是一个事件驱动服务端JavaScript环境,只要能够安装相应的模块包,就可以开发出需要的服务端程序,如HTTP服务端程序.Socket程序等. No ...

  10. CF1151F Sonya and Informatics(概率期望,DP,矩阵快速幂)

    明明是水题结果没切掉……降智了…… 首先令 $c$ 为序列中 $0$ 的个数,那么排序后序列肯定是前面 $c$ 个 $0$,后面 $n-c$ 个 $1$. 那么就能上 DP 了.(居然卡在这里……) ...