Come faccio a includere un carattere di nuova riga in una stringa in Delphi?


97

Voglio creare una stringa che si estende su più righe da assegnare a una proprietà Didascalia etichetta. Come si fa a Delphi?

Risposte:


174

Nel System.pas (che viene utilizzato automaticamente) è definito quanto segue:

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

Questo è da Delphi 2009 (notare l'uso di AnsiChar e AnsiString). (Ritorno a capo aggiunto da me.)

Quindi, se vuoi fare il wrapping della tua TLabel, assicurati che AutoSize sia impostato su true, quindi usa il codice seguente:

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

Funziona in tutte le versioni di Delphi da quando è stato introdotto sLineBreak, che credo fosse Delphi 6.


33

Ecco un approccio ancora più breve:

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

15

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

#13#10 sono i caratteri CR / LF in decimale


8

Oppure puoi usare anche la scorciatoia ^ M + ^ J. È tutta una questione di preferenza. i codici "CTRL-CHAR" vengono tradotti dal compilatore.

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

Puoi togliere il + tra ^ M e ^ J, ma poi riceverai un avviso dal compilatore (ma compilerà comunque bene).


7

A lato, un trucco che può essere utile:
se tieni le tue più stringhe in una TStrings, devi solo usare la proprietà Text delle TStrings come nell'esempio seguente.

Label1.Caption := Memo1.Lines.Text;

E otterrai la tua etichetta multilinea ...


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

Non ho una copia di Delphi a portata di mano, ma sono abbastanza certo che se imposti la proprietà wordwrap su true e la proprietà autosize su false dovrebbe avvolgere qualsiasi testo che metti alla dimensione che crei per l'etichetta. Se si desidera l'interruzione di riga in un determinato punto , potrebbe funzionare se si impostano le impostazioni precedenti e si incolla da un editor di testo .

Spero che questo ti aiuti.


-2

A volte non voglio ingombrare il mio spazio codice, specialmente per un'etichetta statica. Per averlo definito con il modulo, inserisci il testo dell'etichetta nel modulo, quindi fai clic con il pulsante destro del mouse in un punto qualsiasi dello stesso modulo. Scegli "Visualizza come testo". Ora vedrai tutti gli oggetti come progettati, ma solo come testo. Scorri verso il basso o cerca il tuo testo. Quando lo trovi, modifica la didascalia in modo che assomigli a:

Caption = "Riga 1" # 13 "Riga 2" # 13 "Riga 3"

# 13 significa un ordinale 13 o ASCII per il ritorno a capo. Chr (13) è la stessa idea, CHR () cambia il numero in un tipo ordinale.

Notare che non ci sono punti e virgola in questo particolare aspetto di Delphi, e "=" viene utilizzato al posto di ": =". Il testo di ogni riga è racchiuso tra virgolette singole.

Al termine, fai di nuovo clic con il pulsante destro del mouse e scegli "Visualizza come modulo". È ora possibile eseguire qualsiasi formattazione come grassetto, giustificazione a destra, ecc. Non è possibile modificare nuovamente il testo sul modulo o si perdono le interruzioni di riga.

Uso anche "Visualizza come testo" per più modifiche in cui voglio solo scorrere e fare sostituzioni, ecc. Veloce.

Dave


La risposta accettata è diretta al punto, proprio come la domanda. Questa risposta, al contrario, aggiunge più di quanto richiesto; peggio ancora: in modo non così chiaro.
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;

Formattare il codice e aggiungere una descrizione di come questo risolve il problema.
Blastfurnace
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.