2011-07-02 26 views
2

enter image description here 我怎樣才能使視圖像在黃色的矩形。使用TPanel + Color?如果是,那麼從左邊的文字縮進怎麼樣?Delphi:TPanel和文本縮進

感謝您的幫助和建議!

回答

5

最簡單的方法是使用TPanel。設置ParentBackgroundfalseBevelOuterbvNoneFont.ColorclWhiteFont.Style[fsBold]Color到你想要的背景顏色。然後在Caption屬性中簡單地在文字前面放置一個或兩個空格,如' This is an ordinary TPanel.'

Screenshot http://privat.rejbrand.se/tpanelspaceprefix.png

更優雅soution是寫一個自定義的控制。這非常簡單。例如:

unit CaptionBar; 

interface 

uses 
    Windows, SysUtils, Classes, Controls, Graphics; 

type 
    TCaptionBar = class(TCustomControl) 
    private 
    FColor: TColor; 
    FCaption: TCaption; 
    FEllipsis: boolean; 
    FIndent: integer; 
    procedure SetCaption(const Value: TCaption); 
    procedure SetColor(const Value: TColor); 
    procedure SetEllipsis(const Value: boolean); 
    procedure SetIndent(const Value: integer); 
    protected 
    procedure Paint; override; 
    public 
    constructor Create(AOwner: TComponent); override; 
    published 
    property Font; 
    property Anchors; 
    property Align; 
    property Caption: TCaption read FCaption write SetCaption; 
    property Color: TColor read FColor write SetColor default clSkyBlue; 
    property Ellipsis: boolean read FEllipsis write SetEllipsis default true; 
    property Indent: integer read FIndent write SetIndent default 4; 
    end; 

procedure Register; 

implementation 

procedure Register; 
begin 
    RegisterComponents('Rejbrand 2009', [TCaptionBar]); 
end; 

{ TCaptionBar } 

constructor TCaptionBar.Create(AOwner: TComponent); 
begin 
    inherited; 
    FIndent := 4; 
    FColor := clSkyBlue; 
    FEllipsis := true; 
end; 

procedure TCaptionBar.Paint; 
const 
    Ellipsis: array[boolean] of cardinal = (0, DT_END_ELLIPSIS); 
var 
    r: TRect; 
begin 
    inherited; 
    Canvas.Brush.Color := FColor; 
    Canvas.FillRect(ClientRect); 
    r := ClientRect; 
    r.Left := r.Left + FIndent; 
    Canvas.Font.Assign(Font); 
    DrawText(Canvas.Handle, 
    PChar(FCaption), 
    length(FCaption), 
    r, 
    DT_SINGLELINE or DT_LEFT or DT_VCENTER or Ellipsis[FEllipsis]); 
end; 

procedure TCaptionBar.SetCaption(const Value: TCaption); 
begin 
    if not SameStr(FCaption, Value) then 
    begin 
    FCaption := Value; 
    Invalidate; 
    end; 
end; 

procedure TCaptionBar.SetColor(const Value: TColor); 
begin 
    if FColor <> Value then 
    begin 
    FColor := Value; 
    Invalidate; 
    end; 
end; 

procedure TCaptionBar.SetEllipsis(const Value: boolean); 
begin 
    if FEllipsis <> Value then 
    begin 
    FEllipsis := Value; 
    Invalidate; 
    end; 
end; 

procedure TCaptionBar.SetIndent(const Value: integer); 
begin 
    if FIndent <> Value then 
    begin 
    FIndent := Value; 
    Invalidate; 
    end; 
end; 

end. 
3

將一個標籤放入面板,縮進(設置Left屬性> 0)並正確設置面板顏色。

+0

我以爲我需要做一些TPanel的標題。 – maxfax

+0

我可能會將標籤設置爲alCentre(或者它是否相同),並使用頂部,左側和右側錨點來獲取始終居中居中的標題,即使面板調整大小也是如此。 –

+0

標題未在上圖中居中。 –