web-dev-qa-db-fra.com

Comment inclure un caractère de nouvelle ligne dans une chaîne dans Delphi?

Je souhaite créer une chaîne qui s'étend sur plusieurs lignes à affecter à une propriété Label Caption. Comment cela se fait-il à Delphes?

89
Brendan

Dans le fichier System.pas (qui est utilisé automatiquement), les éléments suivants sont définis:

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

C’est à partir de Delphi 2009 (notez l’utilisation de AnsiChar et AnsiString). (Ajout de ligne ajouté par moi.)

Donc, si vous voulez que votre TLabel soit renvoyé à la ligne, assurez-vous qu'AutoSize est défini sur true, puis utilisez le code suivant:

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

Fonctionne dans toutes les versions de Delphi depuis l'introduction de sLineBreak, qui, je crois, était Delphi 6.

164
Jim McKeeth

Voici une approche encore plus courte:

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

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

#13#10 est les caractères CR/LF en décimal

14
Brendan

Ou vous pouvez également utiliser le raccourci ^ M + ^ J. Tout est une question de préférence. les codes "CTRL-CHAR" sont traduits par le compilateur.

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

Vous pouvez enlever le + entre ^ M et ^ J, mais vous recevrez alors un avertissement du compilateur (mais la compilation sera quand même bien).

8
skamradt

Du côté, un truc qui peut être utile:
Si vous conservez plusieurs chaînes dans une TStrings, il vous suffit d'utiliser la propriété Text de la TStrings comme dans l'exemple suivant.

Label1.Caption := Memo1.Lines.Text;

Et vous aurez votre étiquette multiligne ...

7
François
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
Jessé Catrinck

La méthode agnostique de la plateforme serait 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

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

2
Wendigo

Je n'ai pas de copie de Delphi sous la main, mais je suis à peu près certain que si vous définissez la propriété wordwrap sur true et la propriété autosize sur false, le texte que vous placez à la taille de l'étiquette. Si vous voulez changer de ligne à un certain endroit, alors cela pourrait fonctionner si vous définissez les paramètres ci-dessus et collez-le à partir d'un éditeur de texte.

J'espère que cela t'aides.

0
Toby Allen
ShowMessage('Hello'+Chr(10)+'World');
0
SwallowIt