Wie füge ich in Delphi ein Zeilenumbruchzeichen in eine Zeichenfolge ein?

97

Ich möchte eine Zeichenfolge erstellen, die mehrere Zeilen umfasst, um sie einer Label Caption-Eigenschaft zuzuweisen. Wie geht das in Delphi?

Brendan
quelle

Antworten:

174

In der System.pas (die automatisch verwendet wird) ist Folgendes definiert:

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

Dies ist aus Delphi 2009 (beachten Sie die Verwendung von AnsiChar und AnsiString). (Zeilenumbruch von mir hinzugefügt.)

Wenn Sie also Ihren TLabel-Wrap erstellen möchten, stellen Sie sicher, dass AutoSize auf true gesetzt ist, und verwenden Sie dann den folgenden Code:

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

Funktioniert in allen Versionen von Delphi seit Einführung von sLineBreak, von dem ich glaube, dass es Delphi 6 war.

Jim McKeeth
quelle
33

Hier ist ein noch kürzerer Ansatz:

my_string := 'Hello,'#13#10' world!';
Zartog
quelle
15

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

#13#10 ist das CR / LF-Zeichen in Dezimalzahl

Brendan
quelle
8

Oder Sie können auch die Verknüpfung ^ M + ^ J verwenden. Alles eine Frage der Präferenz. Die "CTRL-CHAR" -Codes werden vom Compiler übersetzt.

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

Sie können das + zwischen ^ M und ^ J entfernen, aber dann erhalten Sie eine Warnung vom Compiler (aber es wird immer noch gut kompiliert).

skamradt
quelle
7


Nebenbei ein Trick, der nützlich sein kann: Wenn Sie mehrere Zeichenfolgen in einem TStrings halten, müssen Sie nur die Text-Eigenschaft des TStrings wie im folgenden Beispiel verwenden.

Label1.Caption := Memo1.Lines.Text;

Und Sie erhalten Ihr mehrzeiliges Etikett ...

Francesca
quelle
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
quelle
0
ShowMessage('Hello'+Chr(10)+'World');
bläulich
quelle
0

Ich habe keine Kopie von Delphi zur Hand, aber ich bin mir ziemlich sicher, wenn Sie die Eigenschaft wordwrap auf true und die Eigenschaft autosize auf false setzen, sollte jeder Text, den Sie eingeben, in der Größe umbrochen werden, in der Sie das Etikett erstellen. Wenn Sie an einer bestimmten Stelle einen Zeilenumbruch vornehmen möchten, funktioniert dies möglicherweise, wenn Sie die obigen Einstellungen vornehmen und in einem Texteditor einfügen .

Hoffe das hilft.

Toby Allen
quelle
-2

Manchmal möchte ich meinen Codebereich nicht überladen, insbesondere bei statischen Beschriftungen. Um es nur mit dem Formular zu definieren, geben Sie den Beschriftungstext in das Formular ein und klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im selben Formular. Wählen Sie "Als Text anzeigen". Sie sehen nun alle Objekte wie geplant, jedoch nur als Text. Scrollen Sie nach unten oder suchen Sie nach Ihrem Text. Wenn Sie es gefunden haben, bearbeiten Sie die Beschriftung so, dass sie ungefähr so ​​aussieht:

Beschriftung = 'Zeile 1' # 13'Linie 2 '# 13'Linie 3'

# 13 bedeutet eine Ordnungszahl 13 oder ASCII für Wagenrücklauf. Chr (13) ist die gleiche Idee, CHR () ändert die Zahl in einen Ordinaltyp.

Beachten Sie, dass es in dieser speziellen Facette von Delphi keine Semikolons gibt und "=" anstelle von ": =" verwendet wird. Der Text für jede Zeile wird in einfache Anführungszeichen gesetzt.

Wenn Sie fertig sind, klicken Sie erneut mit der rechten Maustaste und wählen Sie "Als Formular anzeigen". Sie können jetzt alle Formatierungen wie Fettdruck, Rechtfertigung usw. vornehmen. Sie können den Text im Formular einfach nicht erneut bearbeiten, da sonst Ihre Zeilenumbrüche verloren gehen.

Ich verwende "Als Text anzeigen" auch für mehrere Änderungen, bei denen ich nur einen Bildlauf durchführen und Ersetzungen vornehmen möchte usw. Schnell.

Dave

Dave Sonsalla
quelle
Die akzeptierte Antwort ist direkt auf den Punkt, genau wie die Frage ist. Diese Antwort fügt im Gegenteil mehr hinzu, als gefragt wurde; Schlimmer noch: auf nicht so klare Weise.
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
quelle
Bitte formatieren Sie Ihren Code und fügen Sie eine Beschreibung hinzu, wie das Problem dadurch gelöst wird.
Blastfurnace