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?

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.


33

Hier ist ein noch kürzerer Ansatz:

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

15

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

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


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).


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 ...


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;



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.


-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


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;

Bitte formatieren Sie Ihren Code und fügen Sie eine Beschreibung hinzu, wie das Problem dadurch gelöst wird.
Blastfurnace
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.