2010-08-31 11 views

Respuesta

5

Esto fue fácil de hacer antes de Windows Aero. Simplemente tenía que escuchar los mensajes WM_NCPAINT y WM_NCACTIVATE para dibujar en la parte superior de la barra de título, y de manera similar se puede utilizar los otros WM_NC* mensajes para responder a los clics del ratón, etc, en particular, WM_NCHITTEST, WM_NCLBUTTONDOWN y WM_NCLBUTTONUP.

Por ejemplo, para dibujar una cadena en la barra de título, sólo había que hacer

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. 

Ahora bien, esto no funciona con Aero activado. Aún así, hay una manera de dibujar en la barra de subtítulos; Lo he hecho, pero es mucho más complicado. Ver this article para un ejemplo de trabajo.

1

Sí, establezca la propiedad de estilo de borde del formulario en bsNone e implemente su propia barra de título con todos los botones y el comportamiento personalizado que desee.

Cuestiones relacionadas