Символ новой строки в заголовке кнопки

Я создаю приложение, в котором я хочу отображать кнопку в форме. Я хочу отобразить надпись кнопки на двух строках. Я попытался использовать следующий код в форме OnCreate, но он не показывает новую строку.

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

Любой другой способ добавить новую строку?

Ответ 1

Для очень старых версий Delphi, у которых нет свойства WordWrap:

Используйте следующий код до установки надписи:

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

Но сложная часть состоит в том, что этот код нуждается в выполнении в ряде случаев. Когда кнопка будет воссоздана, ваша многострочная настройка будет потеряна. Вид похож на эту дилемму.

К счастью, 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;

Ответ 2

Установите WordWrap в значение True. Это все.

Ответ 3

В System.pas(который автоматически используется) определяется следующее:

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

Итак, если вы хотите сделать свой перенос с Button, убедитесь, что для параметра AutoSize установлено значение true, а затем используйте следующий код:

button.Caption: = 'Line one' + sLineBreak + 'Line two';

Ответ 4

Другие сказали вам, что вы можете сделать в коде: set Wordwrap и используйте SLineBreak.

Но я думаю, вы хотели бы отредактировать несколько строк в дизайнере. Это невозможно в простой среде IDE. Есть несколько сторонних инструментов, которые позволяют это, но вы также можете просто использовать '|' для разделения строк, а затем в коде используйте что-то вроде

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

(Это из памяти, так как у меня нет Delphi здесь, поэтому, пожалуйста, используйте правильный синтаксис).

Ответ 5

В Delphi 2007 вы можете использовать это:

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

Ответ 6

Для более старых версий Delphi Tspeedbutton реагирует только на созданные вручную строки с CRLF. Не регулярный TButton. Это, если вы не хотите взломать класс TButton, как предложено в лучшем ответе выше.