Delphi:让所有的窗口的标题和图标显示在任务栏上
在Delphi中,除了主窗口之外,当其它的窗口显示或切换到焦点时。默认情况下,窗口标题和图标并不会显示在任务栏中,为了实现像主窗口一样,每当窗口显示或焦点时,就把图标和标题显示在当前任务栏上,并高亮,可在相应窗口的单元文件中加入如下代码实现,谢谢!
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
protected
procedure CreateParams(var Params: TCreateParams); override; //重载此方法即可
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure Tform2.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
end.
程序分析
 
当程序需要创建一个窗体、向系统发出要创建一个新窗体的WM_CREATE消息时,系统将指示程序调用CreateWnd方法来创建窗体,CreateWnd方法在创建窗体前,需要调用CreateParams过程来获得窗体的初始化参数,在获得这些参数后,最后再调用CreateWindowHandle方法创建一个窗体句柄,完成了一个窗体的创建工作。因此,如果我们要使某一窗体在任务栏上显示程序图标,就需要修改窗体的初始化参数,重载CreateParams过程。
程序窗口的初始化参数被封装成一个TCreateParams类型的对象,该类型的定义如下所示:
type
TCreateParams = record
{窗体的标题文字}
Caption: PChar;
{窗体的类型,比如WS_CHILD 、WS_DISABLED等}
Style: DWORD;
{扩展的窗体类型}
ExStyle: DWORD;
{窗体的左上角位置}
X, Y: Integer;
{窗体的宽、高}
Width, Height: Integer;
{该窗体的父窗体句柄}
WndParent: HWND;
{指向WM_CREATE消息LParam参数}
Param: Pointer
{该类包含了一些与窗体有关的信息,如鼠标光标、选单等}
WindowClass: TWndClass;
{该窗体的类名}
WinClassName: array[0..63] of Char;
end;
CreateParams过程是当窗体创建时执行,它初始化窗体创建的参数记录。所以如果要显示某一窗体的图标,必须要提高该窗体的级别,即将它的父窗体置为Windows的桌面,桌面的句柄可以通过API函数GetDesktopWindow来获得,因此只要我们在重载函数体中添加语句“Params.WndParent
:= GetDesktopWindow;”,就可以实现窗体的图标显示,正如上例所演示的那样。

Delphi让所有的窗口的标题和图标显示在任务栏上的更多相关文章

  1. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.

    Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.没有MS开发环境中的ShowI ...

  2. 1 duilib 自绘标题 最大化图标显示bug ----WindowImplBase的bug

    窗口最大化之后有两个问题,     1.最大化按钮的样式还是没变,正确的样式应该是这样的     2.再次点击最大化按钮,不能还原到正常大小.     这个是WindowImplBase的bug,已经 ...

  3. DELPHI 让子窗体显示在任务栏上

    重载 CreateParams 方法即可 声明: procedure CreateParams(var Params: TCreateParams);override; procedure TForm ...

  4. WinForm 之 窗口最小化到托盘及右键图标显示菜单

    Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. ...

  5. C++或者C#中如何拿到一个窗口的标题

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C++或者C#中如何拿到一个窗口的标题.

  6. DELPHI中MDI子窗口的关闭和打开

    DELPHI中MDI子窗口的关闭 和打开       Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会   发觉该子窗口只是最小化,而不是你预期的那样被 ...

  7. DELPHI中MDI子窗口的关闭 和打开

    Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中加入如 ...

  8. Delphi下让窗口不显示在任务栏的另类方法

    刚才看到了这篇东西<使窗口不在任务栏上显示(利用ITaskbarList接口)>,作者用ITaskList接口实现了隐藏窗口在任务栏按钮的功能,想起我好多年以前做的程序也有这样的功能,但是 ...

  9. MFC中的主窗口修改标题

    MFC中的主窗口修改标题 如何去掉“无标题”1.在主程序中的InitInstance(): m_pMainWnd->SetWindowText("你要显示的东西如果不想显示置空就行&q ...

随机推荐

  1. 【SGU194】Reactor Cooling

    题目大意 给定一个无源无汇的网络,边的容量有上下界限制,试构造一个合理的流量. 题目分析 求无源汇上下界的可行流模板题. ①增加一个附加源和汇\(S,T\). ②把每个节点的\(\sum b_{u,i ...

  2. 使用vue-cli脚手架和vue-router搭建项目(一)

    之前做的项目一直比较简单,并没有引入整个路由库.今天准备练习下

  3. Unity 中调用Android的JAVA代码

    首先我们要创建一个android项目 因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中.接口包的所在地,打开Finder->应用程序->Unit ...

  4. 判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)

    <script type="text/javascript"> //平台.设备和操作系统 var system = { win: false, mac: false, ...

  5. 【优化】碎片OPTIMIZE

    来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除 ...

  6. delphi 特殊窗体

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

  7. kma 2019CSP前刷题记录

    2019/10/25 \([LNOI2014]\ LCA\) \([Luogu\ P2774]\) 方格取数问题 \(Gauss\)消元板 \([JSOI2008]\)球形空间产生器 2019/10/ ...

  8. ionic-CSS:ionic icon(图标)

    ylbtech-ionic-CSS:ionic icon(图标) 1.返回顶部 1. ionic icon(图标) ionic 也默认提供了许多的图标,大概有 700 多个,针对 Android 和 ...

  9. Python实现二叉堆

    Python实现二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树).二叉堆有两种:最大堆和最小堆.最大堆:父结点的键值总是大于或等于任何一个子节点的键值:最小堆: ...

  10. Linux下同一目录内文件和目录为什么不能同名?

    问题描述: 如果事先有叫‘A’的文件夹存在,则不允许建立叫‘A’的文件: 同理若先有叫‘b’的文件存在,一样不允许建立叫‘b’的文件夹. 原因很简单,因为Linux下一切都是文件,一个目录归根到底还是 ...