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;”,就能够实现窗体的图标显示,正如上例所演示的那样。ide