按钮标题中的换行符

时间:2011-08-02 13:32:47

标签: delphi

我正在构建一个应用程序,我想在其中显示表单上的按钮。我想在两行上显示按钮的标题。我尝试在表单的OnCreate事件中使用以下代码,但它没有显示新行。

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

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

6 个答案:

答案 0 :(得分:10)

对于非常旧的 Delphi版本,它们没有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;

答案 1 :(得分:8)

将WordWrap设置为True。就是这样。

答案 2 :(得分:4)

其他人已告诉您在代码中可以执行的操作:设置Wordwrap并使用SLineBreak

但我想你想编辑设计师中的多行。这在普通的IDE中是不可能的。有一些第三方工具允许它,但您也可以简单地使用'|'分隔行,然后在代码中使用类似

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

(这是来自内存,因为我这里没有Delphi,所以请使用正确的语法)。

答案 3 :(得分:2)

在System.pas(自动使用)中定义了以下内容:

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

因此,如果要进行Button换行,请确保将AutoSize设置为true,然后使用以下代码:

button.Caption:='第一行'+ sLineBreak +'第二行';

答案 4 :(得分:1)

在Delphi 2007中,您可以使用:

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

答案 5 :(得分:1)

如果要查看IDE中的更改,请在设计时执行以下操作:

  1. 右键单击控件,然后选择“以文本查看”
  2. 找到控件,在要换行的位置,将字符'#13#10'(CRLF)添加到标题的值。
  3. 右键单击并选择“以表单查看”
  4. 检查按钮控件的属性WordWrap