2010-08-31 11 views

Antwort

5

Dies war vor Windows Aero einfach zu tun. Sie mussten einfach die Nachrichten WM_NCPAINT und WM_NCACTIVATE hören, die über die Titelleiste gezeichnet wurden, und in ähnlicher Weise könnten Sie die anderen WM_NC* Nachrichten verwenden, um auf Mausklicks usw. zu reagieren, insbesondere WM_NCHITTEST, WM_NCLBUTTONDOWN und WM_NCLBUTTONUP.

Zum Beispiel eine Zeichenfolge auf der Titelleiste ziehen, mußte man nur

tut
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. 

Nun, dies funktioniert nicht mit Aero aktiviert. Dennoch gibt es eine Möglichkeit, die Beschriftungsleiste zu zeichnen. Ich habe das gemacht, aber es ist viel komplizierter. Ein Arbeitsbeispiel finden Sie unter this article.

1

Ja, legen Sie die border style-Eigenschaft des Formulars auf bsNone fest und implementieren Sie Ihre eigene Titelleiste mit allen Schaltflächen und benutzerdefiniertem Verhalten, die Sie mögen.

Verwandte Themen