Ich möchte eine Zeichenfolge erstellen, die mehrere Zeilen umfasst, um sie einer Label Caption-Eigenschaft zuzuweisen. Wie geht das in Delphi?
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.
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
ist das CR / LF-Zeichen in Dezimalzahl
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).
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 ...
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;
Der plattformunabhängige Weg wäre 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Schreiben ('Hallo' + sLineBreak + 'Welt!');
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.
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
quelle