Bagaimana cara menyertakan karakter baris baru dalam string di Delphi?

97

Saya ingin membuat string yang mencakup beberapa baris untuk ditetapkan ke properti Label Caption. Bagaimana ini dilakukan di Delphi?

Brendan
sumber

Jawaban:

174

Di System.pas (yang secara otomatis digunakan), berikut ini didefinisikan:

const
  sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
               {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};

Ini dari Delphi 2009 (perhatikan penggunaan AnsiChar dan AnsiString). (Garis bungkus ditambahkan oleh saya.)

Jadi jika Anda ingin membuat bungkus TLabel Anda, pastikan AutoSize disetel ke true, lalu gunakan kode berikut:

label1.Caption := 'Line one'+sLineBreak+'Line two';

Bekerja di semua versi Delphi sejak sLineBreak diperkenalkan, yang saya yakini adalah Delphi 6.

Jim McKeeth
sumber
33

Inilah pendekatan yang lebih pendek:

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

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

#13#10 adalah karakter CR / LF dalam desimal

Brendan
sumber
8

Atau Anda juga dapat menggunakan pintasan ^ M + ^ J. Semua masalah preferensi. kode "CTRL-CHAR" diterjemahkan oleh kompiler.

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

Anda dapat menghilangkan + di antara ^ M dan ^ J, tetapi kemudian Anda akan mendapatkan peringatan dari kompilator (tetapi masih akan dikompilasi dengan baik).

skamradt.dll
sumber
7

Di sampingnya, trik yang bisa berguna:
Jika Anda menahan beberapa string dalam TString, Anda hanya perlu menggunakan properti Teks TString seperti pada contoh berikut.

Label1.Caption := Memo1.Lines.Text;

Dan Anda akan mendapatkan label multi-baris ...

Francesca
sumber
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;
Jessé Catrinck
sumber
0
ShowMessage('Hello'+Chr(10)+'World');
kebiruan
sumber
0

Saya tidak memiliki salinan Delphi, tapi saya cukup yakin jika Anda menyetel properti wordwrap ke true dan properti autosize ke false itu harus membungkus teks apa pun yang Anda taruh pada ukuran yang Anda buat labelnya. Jika Anda ingin mengganti baris di tempat tertentu maka itu mungkin berhasil jika Anda mengatur pengaturan di atas dan menempelkannya dari editor teks .

Semoga ini membantu.

Toby Allen
sumber
-2

Terkadang saya tidak ingin mengacaukan ruang kode saya, terutama untuk label statis. Untuk menentukannya dengan formulir, masukkan teks label pada formulir, lalu klik kanan di mana saja pada formulir yang sama. Pilih "Lihat sebagai Teks". Anda sekarang akan melihat semua objek seperti yang dirancang, tetapi hanya sebagai teks. Gulir ke bawah atau cari teks Anda. Saat Anda menemukannya, edit teksnya, sehingga terlihat seperti:

Keterangan = 'Baris 1' # 13' Baris 2 '# 13' Baris 3'

# 13 berarti ordinal 13, atau ascii untuk kereta kembali. Chr (13) adalah ide yang sama, CHR () mengubah angka menjadi tipe ordinal.

Perhatikan bahwa tidak ada titik koma di segi Delphi tertentu ini, dan "=" digunakan daripada ": =". Teks untuk setiap baris diapit tanda kutip tunggal.

Setelah Anda selesai, klik kanan sekali lagi dan pilih "Lihat sebagai Formulir". Anda sekarang dapat melakukan pemformatan apa pun seperti tebal, rata kanan kiri, dll. Anda tidak dapat mengedit ulang teks pada formulir atau Anda akan kehilangan jeda baris.

Saya juga menggunakan "Lihat sebagai Teks" untuk beberapa perubahan di mana saya hanya ingin menggulir dan melakukan penggantian, dll. Cepat.

Dave

Dave Sonsalla
sumber
Jawaban yang diterima langsung ke intinya, seperti pertanyaannya. Jawaban ini, sebaliknya, menambahkan lebih dari yang diminta; lebih buruk lagi: dengan cara yang tidak begitu jelas.
ranieribt
-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;
boodyman28
sumber
Harap format kode Anda dan tambahkan beberapa deskripsi tentang bagaimana ini menyelesaikan masalah.
Blastfurnace