Я хочу создать строку, охватывающую несколько строк, для назначения свойству Label Caption. Как это делается в Delphi?
В System.pas (который используется автоматически) определяется следующее:
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
Это из Delphi 2009 (обратите внимание на использование AnsiChar и AnsiString). (Перенос строки добавлен мной.)
Поэтому, если вы хотите обернуть TLabel, убедитесь, что для параметра AutoSize установлено значение true, а затем используйте следующий код:
label1.Caption := 'Line one'+sLineBreak+'Line two';
Работает во всех версиях Delphi с момента появления sLineBreak, который, как мне кажется, был Delphi 6.
Вот еще более короткий подход:
my_string := 'Hello,'#13#10' world!';
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
это символы CR / LF в десятичном формате
Или вы также можете использовать ярлык ^ M + ^ J. Все дело в предпочтениях. коды "CTRL-CHAR" транслируются компилятором.
MyString := 'Hello,' + ^M + ^J + 'world!';
Вы можете убрать + между ^ M и ^ J, но тогда вы получите предупреждение от компилятора (но он все равно будет компилироваться нормально).
С другой стороны, полезный трюк:
если вы храните несколько строк в TStrings, вам просто нужно использовать свойство Text TStrings, как в следующем примере.
Label1.Caption := Memo1.Lines.Text;
И вы получите многострочную этикетку ...
var
stlst: TStringList;
begin
Label1.Caption := 'Hello,'+sLineBreak+'world!';
Label2.Caption := 'Hello,'#13#10'world!';
Label3.Caption := 'Hello,' + chr(13) + chr(10) + 'world!';
stlst := TStringList.Create;
stlst.Add('Hello,');
stlst.Add('world!');
Label4.Caption := stlst.Text;
Label5.WordWrap := True; //Multi-line Caption
Label5.Caption := 'Hello,'^M^J'world!';
Label6.Caption := AdjustLineBreaks('Hello,'#10'world!');
{http://delphi.about.com/library/rtl/blrtlAdjustLineBreaks.htm}
end;
Независимым от платформы способом будет sLineBreak: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Напишите ('Hello' + sLineBreak + 'World!');
ShowMessage('Hello'+Chr(10)+'World');
У меня нет под рукой копии Delphi, но я вполне уверен, что если вы установите для свойства wordwrap значение true, а для свойства autosize - false, он должен обернуть любой текст, который вы поместите, в размер, который вы делаете для метки. Если вы хотите разбить строку в определенном месте, это может сработать, если вы установите указанные выше параметры и вставите их из текстового редактора .
Надеюсь это поможет.
Иногда я не хочу загромождать свое пространство кода, особенно для статической метки. Чтобы просто определить его в форме, введите текст метки в форме, затем щелкните правой кнопкой мыши в любом месте той же формы. Выберите «Просмотреть как текст». Теперь вы увидите все объекты как задуманные, но только как текст. Прокрутите вниз или найдите свой текст. Когда вы найдете его, отредактируйте заголовок, чтобы он выглядел примерно так:
Заголовок = 'Строка 1' # 13'Строка 2 '# 13'Строка 3'
# 13 означает порядковый номер 13 или ascii для возврата каретки. Chr (13) - та же идея, CHR () меняет число на порядковый номер.
Обратите внимание, что в этом конкретном аспекте Delphi нет точки с запятой, и вместо «: =» используется «=». Текст каждой строки заключен в одинарные кавычки.
Когда вы закончите, щелкните правой кнопкой мыши еще раз и выберите «Просмотреть как форму». Теперь вы можете выполнять любое форматирование, такое как полужирный шрифт, выравнивание по правому краю и т. Д. Вы просто не можете повторно редактировать текст в форме, иначе вы потеряете разрывы строк.
Я также использую «Просмотр в виде текста» для множественных изменений, где я просто хочу пролистать и заменить и т. Д. Быстро.
Дэйв
источник