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


97

Je souhaite créer une chaîne qui s'étend sur plusieurs lignes à attribuer à une propriété de légende d'étiquette. Comment cela se fait-il dans Delphi?

Réponses:


174

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

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

Ceci est de Delphi 2009 (notez l'utilisation d'AnsiChar et AnsiString). (Fin de ligne ajouté par moi.)

Donc, si vous souhaitez rendre votre TLabel wrap, assurez-vous que 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.


33

Voici une approche encore plus courte:

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

15

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

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


8

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 retirer le + entre ^ M et ^ J, mais vous obtiendrez alors un avertissement du compilateur (mais il compilera toujours correctement).


7

Sur le côté, une astuce qui peut être utile:
si vous tenez vos multiples chaînes dans un TStrings, il vous suffit d'utiliser la propriété Text des TStrings comme dans l'exemple suivant.

Label1.Caption := Memo1.Lines.Text;

Et vous obtiendrez votre étiquette multiligne ...


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

Je n'ai pas de copie de Delphi sous la main, mais je suis assez certain que si vous définissez la propriété wordwrap sur true et la propriété autosize sur false, cela devrait envelopper tout texte que vous le mettez à la taille que vous créez pour l'étiquette. Si vous souhaitez effectuer un saut de ligne à un certain endroit, cela peut fonctionner si vous définissez les paramètres ci-dessus et collez à partir d'un éditeur de texte .

J'espère que cela t'aides.


-2

Parfois, je ne veux pas encombrer mon espace de code, en particulier pour une étiquette statique. Pour simplement le définir avec le formulaire, entrez le texte de l'étiquette sur le formulaire, puis cliquez avec le bouton droit n'importe où sur le même formulaire. Choisissez "Afficher sous forme de texte". Vous verrez maintenant tous les objets tels qu'ils ont été conçus, mais uniquement sous forme de texte. Faites défiler vers le bas ou recherchez votre texte. Lorsque vous le trouvez, modifiez la légende pour qu'elle ressemble à quelque chose comme:

Légende = 'Ligne 1' # 13'Ligne 2 '# 13'Ligne 3'

# 13 signifie un ordinal 13, ou ascii pour le retour chariot. Chr (13) est la même idée, CHR () change le nombre en un type ordinal.

Notez qu'il n'y a pas de point-virgule dans cette facette particulière de Delphi, et "=" est utilisé à la place de ": =". Le texte de chaque ligne est placé entre guillemets simples.

Une fois que vous avez terminé, cliquez à nouveau avec le bouton droit de la souris et choisissez «Afficher sous forme de formulaire». Vous pouvez maintenant faire n'importe quel formatage tel que gras, justifié à droite, etc. Vous ne pouvez tout simplement pas rééditer le texte sur le formulaire ou vous perdrez vos sauts de ligne.

J'utilise également "Afficher sous forme de texte" pour de multiples changements où je veux juste faire défiler et faire des remplacements, etc. Rapide.

Dave


La réponse acceptée est directe, tout comme la question. Cette réponse, au contraire, ajoute plus que ce qui a été demandé; pire encore: d'une manière pas si claire.
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;

Veuillez formater votre code et ajouter une description de la façon dont cela résout le problème.
Blastfurnace
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.