2010-08-31 20 views

Répondre

5

Cela a été facile à faire avant Windows Aero. Vous deviez simplement écouter les messages WM_NCPAINT et WM_NCACTIVATE pour dessiner au-dessus de la barre de légende. De même, vous pouvez utiliser les autres messages WM_NC* pour répondre aux clics de souris, etc., en particulier WM_NCHITTEST, WM_NCLBUTTONDOWN et WM_NCLBUTTONUP.

Par exemple, pour dessiner une chaîne sur la barre de titre, vous ne deviez faire

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. 

Maintenant, cela ne fonctionne pas avec Aero activé. Pourtant, il existe un moyen de dessiner sur la barre de légende; J'ai fait cela, mais c'est beaucoup plus compliqué. Voir this article pour un exemple de travail.

1

Oui, définissez la propriété de style de bordure du formulaire sur bsNone et implémentez votre propre barre de titre avec tous les boutons et comportements personnalisés que vous souhaitez.