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