103

複数の行にまたがる文字列を作成して、Label Caption プロパティに割り当てたいと考えています。これは Delphi でどのように行われますか?

4

12 に答える 12

184

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 のすべてのバージョンで動作します。これは Delphi 6 だったと思います。

于 2008-10-31T21:21:14.430 に答える
38

さらに短いアプローチを次に示します。

my_string := 'Hello,'#13#10' world!';
于 2008-10-31T18:36:03.560 に答える
20

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

#13#1010 進数の CR/LF 文字です。

于 2008-10-31T18:11:56.137 に答える
8

一方で、便利なトリックがあり
ます。複数の文字列を TStrings に保持する場合は、次の例のように TStrings の Text プロパティを使用するだけです。

Label1.Caption := Memo1.Lines.Text;

そして、複数行のラベルを取得します...

于 2008-10-31T19:32:15.257 に答える
8

または、^M+^J ショートカットも使用できます。すべて好みの問題です。「CTRL-CHAR」コードはコンパイラによって変換されます。

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

^M と ^J の間の + を取り除くことができますが、コンパイラから警告が表示されます (ただし、コンパイルは正常に行われます)。

于 2008-10-31T20:18:23.230 に答える
3

プラットフォームに依存しない方法は「sLineBreak」です: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

Write('Hello' + sLineBreak + 'World!');

于 2015-11-30T13:41:06.390 に答える
0
ShowMessage('Hello'+Chr(10)+'World');
于 2009-04-09T14:52:21.440 に答える
0

私は Delphi のコピーを手元に持っていませんが、wordwrap プロパティを true に設定し、autosize プロパティを false に設定すると、ラベルを作成するサイズで配置したテキストをラップするはずです。特定の場所で改行したい場合は、上記の設定をしてテキストエディタから貼り付けるとうまくいくかもしれません

お役に立てれば。

于 2008-11-01T17:01:23.970 に答える