ฉันจะรวมอักขระขึ้นบรรทัดใหม่ในสตริงใน Delphi ได้อย่างไร


96

ฉันต้องการสร้างสตริงที่ครอบคลุมหลายบรรทัดเพื่อกำหนดให้กับคุณสมบัติ Label Caption สิ่งนี้ทำได้อย่างไรใน Delphi?

คำตอบ:


173

ใน System.pas (ซึ่งจะถูกใช้โดยอัตโนมัติ) มีการกำหนดสิ่งต่อไปนี้:

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

มาจาก Delphi 2009 (โปรดสังเกตการใช้ AnsiChar และ AnsiString) (เพิ่มบรรทัดโดยฉัน)

ดังนั้นหากคุณต้องการตัด TLabel ของคุณตรวจสอบให้แน่ใจว่าได้ตั้งค่าขนาดอัตโนมัติเป็นจริงจากนั้นใช้รหัสต่อไปนี้:

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

ใช้งานได้กับ Delphi ทุกเวอร์ชันตั้งแต่เปิดตัว sLineBreak ซึ่งฉันเชื่อว่า Delphi 6




8

ด้านข้างเคล็ดลับที่มีประโยชน์:
หากคุณถือหลาย ๆ สตริงใน TStrings คุณก็ต้องใช้คุณสมบัติ Text ของ TStrings ดังตัวอย่างต่อไปนี้

Label1.Caption := Memo1.Lines.Text;

และคุณจะได้รับฉลากหลายบรรทัด ...


8

หรือคุณสามารถใช้ทางลัด ^ M + ^ J ก็ได้เช่นกัน ทั้งหมดเป็นเรื่องของความชอบ โค้ด "CTRL-CHAR" ถูกแปลโดยคอมไพเลอร์

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

คุณสามารถนำ + ออกไประหว่าง ^ M และ ^ J ได้ แต่จากนั้นคอมไพเลอร์จะได้รับคำเตือน (แต่คอมไพเลอร์จะยังคงคอมไพล์ได้ดี)


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;



0

ฉันไม่มีสำเนาของ Delphi อยู่ในมือ แต่ฉันค่อนข้างมั่นใจถ้าคุณตั้งค่าคุณสมบัติ wordwrap เป็น true และคุณสมบัติ autosize เป็น false ควรตัดข้อความใด ๆ ที่คุณใส่ตามขนาดที่คุณสร้างป้ายกำกับ หากคุณต้องการที่จะแบ่งบรรทัดในสถานที่หนึ่งแล้วมันอาจจะทำงานถ้าคุณตั้งค่าดังกล่าวข้างต้นและวางจากโปรแกรมแก้ไขข้อความ

หวังว่านี่จะช่วยได้


-2

บางครั้งฉันไม่ต้องการทำให้พื้นที่โค้ดของฉันรกโดยเฉพาะอย่างยิ่งสำหรับฉลากแบบคงที่ หากต้องการกำหนดด้วยแบบฟอร์มให้ป้อนข้อความป้ายกำกับในแบบฟอร์มจากนั้นคลิกขวาที่ใดก็ได้ในแบบฟอร์มเดียวกัน เลือก "ดูเป็นข้อความ" ตอนนี้คุณจะเห็นวัตถุทั้งหมดตามที่ออกแบบไว้ แต่เป็นข้อความเท่านั้น เลื่อนลงหรือค้นหาข้อความของคุณ เมื่อคุณพบแล้วให้แก้ไขคำบรรยายภาพเพื่อให้ดูเหมือนว่า:

คำบรรยาย = 'บรรทัด 1' # 13' บรรทัด 2 '# 13' บรรทัด 3'

# 13 หมายถึงลำดับ 13 หรือ ascii สำหรับการกลับรถ Chr (13) เป็นแนวคิดเดียวกัน CHR () เปลี่ยนตัวเลขเป็นประเภทลำดับ

โปรดทราบว่าไม่มีเครื่องหมายอัฒภาคในด้านนี้ของ Delphi โดยเฉพาะและใช้ "=" แทน ": =" ข้อความสำหรับแต่ละบรรทัดอยู่ในเครื่องหมายคำพูดเดี่ยว

เมื่อเสร็จแล้วให้คลิกขวาอีกครั้งแล้วเลือก "View as Form" ขณะนี้คุณสามารถจัดรูปแบบใด ๆ เช่นตัวหนาจัดชิดขวา ฯลฯ คุณไม่สามารถแก้ไขข้อความในแบบฟอร์มซ้ำได้ไม่เช่นนั้นคุณจะสูญเสียตัวแบ่งบรรทัด

ฉันยังใช้ "ดูเป็นข้อความ" สำหรับการเปลี่ยนแปลงหลาย ๆ อย่างที่ฉันแค่ต้องการเลื่อนดูและทำการเปลี่ยน ฯลฯ อย่างรวดเร็ว

เดฟ


คำตอบที่ยอมรับนั้นตรงประเด็นเช่นเดียวกับคำถาม ในทางกลับกันคำตอบนี้กลับเพิ่มมากกว่าที่ถูกถาม แย่กว่านั้น: ในทางที่ไม่ชัดเจนนัก
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;

โปรดจัดรูปแบบรหัสของคุณและเพิ่มคำอธิบายเกี่ยวกับวิธีการแก้ปัญหา
Blastfurnace
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.