複数行にまたがる文字列を作成して、Label Captionプロパティに割り当てたい。これはDelphiでどのように行われますか?
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';
SLineBreakが導入されて以来、Delphiのすべてのバージョンで動作します。
さらに短いアプローチがあります:
my_string := 'Hello,'#13#10' world!';
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
は10進数のCR/LF文字です
または、^ M + ^ Jショートカットも使用できます。すべての好みの問題。 「CTRL-CHAR」コードはコンパイラーによって変換されます。
MyString := 'Hello,' + ^M + ^J + 'world!';
^ Mと^ Jの間で+を削除できますが、コンパイラーから警告が表示されます(ただし、コンパイルは正常に行われます)。
一方で、役に立つトリック:
TStringsに複数の文字列を保持する場合、次の例のようにTStringsのTextプロパティを使用するだけです。
Label1.Caption := Memo1.Lines.Text;
そして、複数行のラベルを取得します...
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;
プラットフォームに依存しない方法は「sLineBreak」です: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Write( 'Hello' + sLineBreak + 'World!');
Delphiのコピーは手元にありませんが、wordwrapプロパティをtrueに設定し、autosizeプロパティをfalseに設定すると、ラベルを作成するサイズでテキストをラップするはずです。特定の場所で改行したい場合は、上記の設定を設定してテキストエディタから貼り付ければ動作する可能性があります。
お役に立てれば。
ShowMessage('Hello'+Chr(10)+'World');