2011-08-02 33 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 –