2010-08-31 10 views

risposta

5

Questo è stato facile da fare prima di Windows Aero. Dovevi semplicemente ascoltare i messaggi WM_NCPAINT e WM_NCACTIVATE da disegnare sopra la barra dei sottotitoli, e allo stesso modo potresti usare gli altri WM_NC* messaggi per rispondere ai clic del mouse ecc., In particolare WM_NCHITTEST, WM_NCLBUTTONDOWN e WM_NCLBUTTONUP.

Per esempio, per disegnare una stringa sulla barra del titolo, bastava fare

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. 

Ora, questo non funziona con Aero abilitato. Eppure, c'è un modo per disegnare sulla barra dei sottotitoli; L'ho fatto, ma è molto più complicato. Vedere this article per un esempio funzionante.

1

Sì, imposta la proprietà dello stile del bordo del modulo su bsNone e implementa la tua barra del titolo con tutti i pulsanti e il comportamento personalizzato che ti piace.

Problemi correlati