Я хочу создать строку, которая охватывает несколько строк для назначения свойству Label Caption. Как это делается в Delphi?
Как включить символ новой строки в строку в Delphi?
Ответ 1
В 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.
Ответ 2
Здесь еще более короткий подход:
my_string := 'Hello,'#13#10' world!';
Ответ 3
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
- это символы CR/LF в десятичной форме
Ответ 4
Или вы также можете использовать ярлык ^ M + ^ J. Все зависит от предпочтений. коды "CTRL- CHAR" переводятся компилятором.
MyString := 'Hello,' + ^M + ^J + 'world!';
Вы можете взять + между символами ^ M и ^ J, но затем вы получите предупреждение от компилятора (но оно все равно будет компилироваться отлично).
Ответ 5
В стороне, трюк, который может быть полезен:
Если вы держите несколько строк в TStrings, вам просто нужно использовать свойство Text для TStrings, как в следующем примере.
Label1.Caption := Memo1.Lines.Text;
И вы получите свою многострочную метку...
Ответ 6
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;
Ответ 7
Агнетический путь plattform был бы 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Write ('Hello' + sLineBreak + 'World!');
Ответ 8
ShowMessage('Hello'+Chr(10)+'World');
Ответ 9
У меня нет копии Delphi, но я уверен, что вы установите для свойства wordwrap значение true, а свойство autosize - false, оно должно обернуть любой текст, который вы поместите на размер, который вы создаете. Если вы хотите разбить строку в определенном месте, тогда она может работать, если вы установите указанные выше настройки и вставьте из текстового редактора.
Надеюсь, что это поможет.
Ответ 10
François:
Ваш метод Label1.Caption := Memo1.Lines.Text;
не является хорошим!
Примеры многострочных текстов:
'' // Empty one, no line at all
#13#10 // One empty line
'One' // One non empty line
'One'#13#10 // Two lines, first not empty, last empty
#13#10'One' // Two lines, first empty, last not empty
etc
Присвоение каждой строки Lines.Text приводит к тому, что вещи не ожидаются...
Другими словами:
MyLabel.Caption:='One Line'; // One single line with no line break on it, with just 8 chars
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));
Покажет (в Windows): 8 - 10
Примечание. По крайней мере, на моем Turbo Delphi 2006.
Это вызвано тем, что реализация .Text добавляет новый разрыв строки (два символа в окнах) после каждой строки, поэтому всегда заканчивается новой строкой.
Это также происходит:
MyLabel.Caption:=''; // Empty string, length=0
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));
Покажет (в Windows): 0 - 2
Так что ему нужно "небольшое" исправление... удалить эту последнюю строку прерывания, которая добавлена, но это может быть очень сложно...
Я объясню это:
Если вы это сделаете:
MyLabel.Caption:='Non Empty Line'+#13#10; // #13#10 is Windows break line (16 chars in total)
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));
Покажет (в Windows): 16 - 16
Он не добавил ни одного разрыва строки, так как последняя строка была пуста, когда была указана на .Text
Проблема действительно внутри .Text, нет простой работы, потому что вы должны знать, была ли последняя строка пуста.
Надеюсь, что когда-нибудь это будет исправлено!!! До тех пор... я буду использовать другой способ работы с многострочными строками.
Ответ 11
Иногда я не хочу загромождать свое кодовое пространство, особенно для статической метки. Чтобы просто определить его с помощью формы, введите текст метки в форме, затем щелкните правой кнопкой мыши в любом месте той же формы. Выберите "Просмотр как текст". Теперь вы увидите все объекты, как разработанные, но только как текст. Прокрутите вниз или найдите текст. Когда вы его найдете, отредактируйте заголовок, чтобы он выглядел примерно так:
Caption = 'Line 1' # 13'Line 2 '# 13'Line 3'
# 13 означает порядковый номер 13 или ascii для возврата каретки. Chr (13) является той же идеей, CHR() изменяет число на порядковый тип.
Обратите внимание, что в этом конкретном аспекте Delphi нет полуколонии, а вместо ": =" используется "=". Текст для каждой строки заключен в одинарные кавычки.
Как только вы закончите, щелкните правой кнопкой мыши еще раз и выберите "Просмотреть как форму". Теперь вы можете сделать любое форматирование, например, полужирное, правильное выравнивание и т.д. Вы просто не можете повторно редактировать текст в форме или потеряете разрывы строк.
Я также использую "Просмотр как текст" для нескольких изменений, где я просто хочу прокручивать и выполнять замены и т.д. Быстрый.
Dave
Ответ 12
private
{ Private declarations }
{declare a variable like this}
NewLine : string; // ok
// in next event handler assign a value to that variable (NewLine)
// like the code down
procedure TMainForm.FormCreate(Sender: TObject);
begin`enter code here`
NewLine := #10;
{Next Code To show NewLine In action}
//ShowMessage('Hello to programming with Delphi' + NewLine + 'Print New Lin now !!!!');
end;