1. 程式人生 > >Delphi如何在Form的標題欄繪制自定義文字

Delphi如何在Form的標題欄繪制自定義文字

windows消息 特定 pri draw window raw win ont ext

Delphi中Form窗體的標題被設計成繪制在系統菜單的旁邊,如果你想要在標題欄繪制自定義文本又不想改變Caption屬性,你需要處理特定的Windows消息:WM_NCPAINT.。

WM_NCPAINT消息在需要重繪邊框時發送到窗口,應用程序可以利用該消息繪制自己的窗口邊框。

註意,同時你也要處理窗口激活或失去焦點的WM_NCACTIVATE消息,如果不處理,當窗口失去焦點時,自定義繪制的文本會消失。

type
TCustomCaptionForm = class(TForm)
private
procedure WMNCPaint(var Msg: TWMNCPaint) ; message WM_NCPAINT;

procedure WMNCACTIVATE(var Msg: TWMNCActivate) ; message WM_NCACTIVATE;
procedure DrawCaptionText() ;
end;

...

implementation


procedure TCustomCaptionForm .DrawCaptionText;
const
captionText = ‘delphi.about.com‘;
var
canvas: TCanvas;
begin
canvas := TCanvas.Create;
try
canvas.Handle := GetWindowDC(Self.Handle) ;
with canvas do
begin
Brush.Style := bsClear;
Font.Color := clMaroon;
TextOut(Self.Width - 110, 6, captionText) ;
end;
finally
ReleaseDC(Self.Handle, canvas.Handle) ;
canvas.Free;
end;
end;

procedure TCustomCaptionForm.WMNCACTIVATE(var Msg: TWMNCActivate) ;
begin
inherited;
DrawCaptionText;
end;

procedure TCustomCaptionForm.WMNCPaint(var Msg: TWMNCPaint) ;
begin
inherited;
DrawCaptionText;
end;

Delphi如何在Form的標題欄繪制自定義文字