2011-08-02 67 views
9

的標題我建立的,我想顯示一個窗體上按鈕的應用程序。我想在兩行顯示按鈕的標題。我曾嘗試在窗體的OnCreate事件中使用下面的代碼,但它不顯示新行。換行符按鈕

Button.Caption := 'Hello' + #13#10 + 'world'; 

任何其他添加新行的方法?

+1

'S /#13#10/sLineBreak /' –

回答

8

對於不具有WordWrap屬性很老德爾福版本:要設置字幕

使用下面的代碼之前:

SetWindowLong(Button1.Handle, GWL_STYLE, 
    GetWindowLong(Button1.Handle, GWL_STYLE) or BS_MULTILINE); 

但棘手的部分是這個代碼需要執行多次。當按鈕被重新創建時,你的多行設置就會丟失。有點類似於this dilemma

幸運的是VCL提供瞭解決方案,但你必須子類TButton的類型,例如如下:

type 
    TButton = class(StdCtrls.TButton) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

    TForm1 = class(TForm) 

... 

procedure TButton.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 
    Params.Style := Params.Style or BS_MULTILINE; 
end; 
+3

對於你的第一個建議,'TButton.CreateParams'比'TButton.CreateWnd'更自然。我不確定你的第二個建議是否可行。 –

+1

@David同意,這太好了! – NGLN

2

在System.pas(自動被使用)以下的定義:

const sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
        {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}; 

所以,如果你想使你的按鈕裹,確保自動調整大小設置爲true,然後用下面的代碼:

button.Caption:= '行一個' + sLineBreak + '兩線';

+1

TButton的不具有AutoSize屬性。 – JRL

8

設置自動換行設置爲True。就這樣。

+0

我無法在按鈕類中找到該屬性。你可以告訴哪些claas包含這個屬性。感謝您的回覆。 – naren

+0

TButton和TBitBtn具有WordWrap屬性。 – Kromster

+1

@naren:你還沒有指定你的Delphi版本。也許更老的Delphis沒有這個屬性。 –

2

其他人告訴你,你可以在代碼中做什麼:設置Wordwrap和使用SLineBreak

不過,我想你想編輯在設計的多條線路。這在普通的IDE中是不可能的。有一些第三方工具,允許它,但你也可以簡單地使用'|'的線分開,然後在代碼中使用類似

Button1.Caption := 
    StringReplace(Button1.Caption, '|', SLineBreak, [rfReplaceAll]); 

(這是從內存,因爲我沒有德爾福在這裏,請使用正確的語法)。

+0

我不知道爲什麼這是downvoted。這是我在我自己的代碼中完成它,它工作正常。 –

0

對於舊版本的Delphi中Tspeedbutton只響應與CRLF手動創建的字符串。不正規的TButton。這是如果你不想像上面最好的回答中所建議的那樣破解TButton類。

1

在德爾福2007年,你可以使用這個:

SpeedButton1.Caption := 'first line' + #13 + 'second line'; 
+0

這也適用於德爾福5 –