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