Delphiの文字列に改行文字を含めるにはどうすればよいですか?


97

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

回答:


174

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であったと思います。


33

これはさらに短いアプローチです:

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


8

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

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

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


7

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

Label1.Caption := Memo1.Lines.Text;

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


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;

3

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

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



0

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

お役に立てれば。


-2

特に静的ラベルの場合は、コードスペースが乱雑になりたくないことがあります。フォームで定義するだけの場合は、フォームにラベルテキストを入力してから、同じフォームの任意の場所を右クリックします。「テキストとして表示」を選択します。すべてのオブジェクトが設計どおりに表示されますが、テキストとしてのみ表示されます。下にスクロールするか、テキストを検索します。見つかったら、キャプションを編集して、次のようにします。

キャプション= 'Line 1'#13'Line 2 '#13'Line 3'

#13は、序数13、または改行のASCIIを意味します。Chr(13)も同じ考えですが、CHR()は数値を序数型に変更します。

Delphiのこの特定のファセットにはセミコロンがなく、「:=」ではなく「=」が使用されていることに注意してください。各行のテキストは一重引用符で囲まれています。

完了したら、もう一度右クリックして[フォームとして表示]を選択します。これで、太字、右揃えなどの書式設定を行うことができます。フォームのテキストを再編集できなくなるか、改行が失われます。

また、スクロールして置換などを行いたい複数の変更に対して「テキストとして表示」を使用しています。

デイブ


受け入れられた回答は、質問と同じように、要点を直接示しています。逆に、この答えは、求められた以上のものを追加します。さらに悪いことに、それほど明確ではありません。
ranieribt 2017

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

コードをフォーマットし、これが問題を解決する方法の説明を追加してください。
高炉2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.