Delphi让所有的窗口的标题和图标显示在任务栏上
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让所有的窗口的标题和图标显示在任务栏上的更多相关文章
- Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.
Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.没有MS开发环境中的ShowI ...
- 1 duilib 自绘标题 最大化图标显示bug ----WindowImplBase的bug
窗口最大化之后有两个问题, 1.最大化按钮的样式还是没变,正确的样式应该是这样的 2.再次点击最大化按钮,不能还原到正常大小. 这个是WindowImplBase的bug,已经 ...
- DELPHI 让子窗体显示在任务栏上
重载 CreateParams 方法即可 声明: procedure CreateParams(var Params: TCreateParams);override; procedure TForm ...
- WinForm 之 窗口最小化到托盘及右键图标显示菜单
Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. ...
- C++或者C#中如何拿到一个窗口的标题
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C++或者C#中如何拿到一个窗口的标题.
- DELPHI中MDI子窗口的关闭和打开
DELPHI中MDI子窗口的关闭 和打开 Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会 发觉该子窗口只是最小化,而不是你预期的那样被 ...
- DELPHI中MDI子窗口的关闭 和打开
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中加入如 ...
- Delphi下让窗口不显示在任务栏的另类方法
刚才看到了这篇东西<使窗口不在任务栏上显示(利用ITaskbarList接口)>,作者用ITaskList接口实现了隐藏窗口在任务栏按钮的功能,想起我好多年以前做的程序也有这样的功能,但是 ...
- MFC中的主窗口修改标题
MFC中的主窗口修改标题 如何去掉“无标题”1.在主程序中的InitInstance(): m_pMainWnd->SetWindowText("你要显示的东西如果不想显示置空就行&q ...
随机推荐
- 微信小程序のwxml绑定
一.微信小程序文件的构成 微信小程序包括js文件.json文件.wxml文件.wxss文件.wxs文件.js文件是展现界面的,注册这个程序的的页面,一般一个大写的Page({ })嵌入: json文件 ...
- 《提高c++性能的编程技术》读书笔记
一个程序的执行效率是取决于改程序翻译成汇编语言之后的执行的机器指令的条数.而每一个机器指令的执行的周期是一定的.C语言和C++都是高于汇编语言的高级语言,其中,C语言源代码与其相应的机器指不是完全同一 ...
- SQL登录报错
在安装完SQL后,发现报出了error40和53的错误,作为小白的我也是一脸懵逼,明明一切都是按照默认加下一步安装的,为什么到了连接数据库的时候就出现了问题呢? 后来经过调查,发现需要将sql配置管理 ...
- 读书笔记二、ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息: import numpy as np arr1=np.array([1,2,3],dtype=np ...
- 笔记54 Mybatis快速入门(五)
Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...
- docker启动elasticsearch异常Failed to create node environment(解决)
异常说是创建节点环境失败,操作/usr/share/elasticsearch/data/nodes的IO错误,尝试给此目录添加读写权限后,依旧没什么**用,灵机一动是不是挂载目录没有权限导致的? c ...
- Dockfile中的命令如何在.sh中执行
有类似如下内容的Dokefile文件.1 RUN cd /tmp/patch \ && /lib/python3./site-packages/moduleA/a.* \ && ...
- re.match与re.search的区别
re.match与re.search的区别 re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None:而re.search匹配整个字符串,直到找到一个匹配. 实 ...
- PHP PDO 事务与自动提交
现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的. 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isola ...
- sql语句创建表
create table `search_custom_mall` ( `id` ) NOT NULL PRIMARY KEY AUTO_INCREMENT, `uid` ) NOT NULL, `n ...