Jak dołączyć znak nowego wiersza do ciągu w Delphi?

97

Chcę utworzyć ciąg obejmujący wiele wierszy w celu przypisania do właściwości Podpis etykiety. Jak to się robi w Delphi?

Brendan
źródło

Odpowiedzi:

174

W System.pas (który jest używany automatycznie) zdefiniowano:

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

Pochodzi z Delphi 2009 (zwróć uwagę na użycie AnsiChar i AnsiString). (Zawijanie linii dodane przeze mnie.)

Więc jeśli chcesz zawinąć TLabel, upewnij się, że AutoSize jest ustawione na true, a następnie użyj następującego kodu:

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

Działa we wszystkich wersjach Delphi od czasu wprowadzenia sLineBreak, czyli moim zdaniem Delphi 6.

Jim McKeeth
źródło
33

Oto jeszcze krótsze podejście:

my_string := 'Hello,'#13#10' world!';
Zartog
źródło
15

my_string := 'Hello,' + #13#10 + 'world!';

#13#10 to dziesiętne znaki CR / LF

Brendan
źródło
8

Możesz też użyć skrótu ^ M + ^ J. Wszystko to kwestia preferencji. kody „CTRL-CHAR” są tłumaczone przez kompilator.

MyString := 'Hello,' + ^M + ^J + 'world!';

Możesz usunąć + między ^ M i ^ J, ale wtedy otrzymasz ostrzeżenie od kompilatora (ale nadal będzie się kompilował dobrze).

skamradt
źródło
7

Z drugiej strony, sztuczka, która może być przydatna:
jeśli trzymasz wiele łańcuchów w TStrings, wystarczy użyć właściwości Text TStrings, jak w poniższym przykładzie.

Label1.Caption := Memo1.Lines.Text;

Otrzymasz wieloliniową etykietę ...

Francesca
źródło
3
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;
Jessé Catrinck
źródło
0
ShowMessage('Hello'+Chr(10)+'World');
niebieskawy
źródło
0

Nie mam pod ręką kopii Delphi, ale jestem prawie pewien, że jeśli ustawisz właściwość wordwrap na true, a właściwość autosize na false, to powinno zawijać każdy tekst, który umieścisz w rozmiarze, jaki tworzysz na etykiecie. Jeśli chcesz zmienić wiersz w określonym miejscu , może to zadziałać, jeśli ustawisz powyższe ustawienia i wkleisz z edytora tekstu .

Mam nadzieję że to pomoże.

Toby Allen
źródło
-2

Czasami nie chcę zaśmiecać mojej przestrzeni kodu, szczególnie w przypadku etykiety statycznej. Aby po prostu zdefiniować go w formularzu, wprowadź tekst etykiety w formularzu, a następnie kliknij prawym przyciskiem myszy w dowolnym miejscu tego samego formularza. Wybierz „Wyświetl jako tekst”. Teraz zobaczysz wszystkie obiekty zgodnie z projektem, ale tylko jako tekst. Przewiń w dół lub wyszukaj swój tekst. Kiedy go znajdziesz, edytuj podpis, aby wyglądał mniej więcej tak:

Podpis = 'Linia 1' # 13'Linia 2 '# 13'Linia 3'

# 13 oznacza liczbę porządkową 13 lub ascii dla powrotu karetki. Chr (13) to ta sama idea, CHR () zmienia liczbę na typ porządkowy.

Zauważ, że w tym konkretnym aspekcie Delphi nie ma średnika, a zamiast „: =” używany jest znak „=”. Tekst w każdym wierszu jest ujęty w pojedyncze cudzysłowy.

Gdy skończysz, kliknij ponownie prawym przyciskiem myszy i wybierz „Wyświetl jako formularz”. Możesz teraz wykonać dowolne formatowanie, takie jak pogrubienie, wyrównanie do prawej itp. Po prostu nie możesz ponownie edytować tekstu w formularzu, bo stracisz podziały wierszy.

Używam również opcji „Wyświetl jako tekst” dla wielu zmian, w których chcę po prostu przewijać i zastępować itp. Szybko.

Dave

Dave Sonsalla
źródło
Przyjęta odpowiedź jest bezpośrednia, tak jak pytanie. Wręcz przeciwnie, ta odpowiedź dodaje więcej, niż pytano; jeszcze gorzej: w niezbyt jasny sposób.
ranieribt
-2
 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;
boodyman28
źródło
Sformatuj swój kod i dodaj opis, jak to rozwiązuje problem.
Blastfurnace