2010-08-31 10 views

Odpowiedz

5

To było łatwe do zrobienia przed Windows Aero. Po prostu musieliście posłuchać wiadomości WM_NCPAINT i WM_NCACTIVATE, aby narysować na górze paska napisów, i podobnie moglibyście użyć innych komunikatów WM_NC*, aby odpowiedzieć na kliknięcia myszy itp., W szczególności WM_NCHITTEST, WM_NCLBUTTONDOWN i WM_NCLBUTTONUP.

Na przykład, aby narysować napis na pasku tytułowym, trzeba było tylko zrobić

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

type 
    TForm1 = class(TForm) 
    protected 
    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT; 
    procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE; 
    private 
    procedure DrawOnCaption; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.WMNCActivate(var Msg: TWMNCActivate); 
begin 
    inherited; 
    DrawOnCaption; 
end; 

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint); 
begin 
    inherited; 
    DrawOnCaption; 
end; 

procedure TForm1.DrawOnCaption; 
var 
    dc: HDC; 
begin 
    dc := GetWindowDC(Handle); 
    try 
    TextOut(dc, 20, 2, 'test', 4); 
    finally 
    ReleaseDC(Handle, dc); 
    end; 
end; 

end. 

Teraz to nie działa z włączonym Aero. Mimo to istnieje sposób na wykorzystanie paska napisów; Zrobiłem to, ale jest to o wiele bardziej skomplikowane. Zobacz this article dla przykładu roboczego.

1

Tak, ustaw właściwość stylu krawędzi na bsNone i zaimplementuj własny pasek tytułu ze wszystkimi przyciskami i niestandardowym zachowaniem, które lubisz.

Powiązane problemy