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

StackOverflow https://stackoverflow.com/questions/254407

  •  05-07-2019
  •  | 
  •  

Question

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

Était-ce utile?

La solution

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};

Ceci est tiré de Delphi 2009 (notez l'utilisation de AnsiChar et AnsiString). (Le retour à la 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.

Autres conseils

Voici une approche encore plus courte:

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

my_string: = 'Bonjour,' + # 13 # 10 + 'monde!';

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

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

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

Vous pouvez enlever le + entre le ^ M et le ^ J, mais vous recevrez alors un avertissement du compilateur (mais ça compilera toujours très bien).

Sur le côté, une astuce qui peut être utile:
Si vous avez 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 ...

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;

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

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

ShowMessage('Hello'+Chr(10)+'World');

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 souhaitez changer de ligne à un endroit donné, cela fonctionnera peut-être si vous définissez les paramètres ci-dessus et collez-le à partir d'un éditeur de texte .

J'espère que cela vous aidera.

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 de la souris sur le même formulaire. Choisissez "Afficher sous forme de texte". Vous verrez maintenant tous les objets tels que conçus, mais sous forme de texte uniquement. Faites défiler la liste ou recherchez votre texte. Lorsque vous le trouvez, modifiez la légende afin qu'elle ressemble à ceci:

Caption = 'Ligne 1' # 13'Ligne 2 '# 13'Ligne 3'

N ° 13 signifie un ordinal 13 ou ascii pour le retour de 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é plutôt que ": =". Le texte de chaque ligne est entouré de guillemets simples.

Une fois que vous avez terminé, cliquez à nouveau avec le bouton droit de la souris et choisissez "Afficher en tant que formulaire". Vous pouvez maintenant effectuer toute mise en forme telle que gras, justifier à droite, etc. Vous ne pouvez tout simplement pas rééditer le texte sur le formulaire, sinon vous perdrez vos sauts de ligne.

J'utilise également " Afficher en tant que texte " pour les modifications multiples où je veux juste faire défiler et faire des remplacements, etc. Rapide.

Dave

 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top