2014-05-06 3 views
-1

Je note avec le texte en 2 lignes commeLongueur de la chaîne dans la note

 
aaaa : dsfdsfdsffsf 
bbbbbbbbb : fgdfgff 

Je voudrais obtenir « : » en même ligne - un sous l'autre comme

 
aaaa  :dsfsfd 
bbbbbbbb :ghjghjgjhjg 

J'utilise Delphi et code. J'ai essayé d'utiliser SetLength mais je ne sais pas comment.

+2

Vous devriez mieux utiliser une grille pour cela –

+0

Cela n'a vraiment rien à voir avec un mémo, juste avec des chaînes. Et c'est très trivial à effectuer. –

+0

@JerryDodge Je pense que vous avez mal interprété la question. Le fait que le texte soit affiché dans un mémo (ou du moins dans un contrôle visible) est un détail assez important. – GolezTrol

Répondre

4

Définissez la police du mémo sur une police à espacement fixe comme Courier New. De cette façon, chaque caractère aura la même largeur, et vous pouvez l'utiliser pour aligner les textes ou afficher les arts ASCII dans le mémo.

Vous pouvez également utiliser une listview ou un stringgrid, qui prend en charge l'affichage du texte dans les colonnes. Pour votre but, c'est probablement la meilleure option.

Si vous décidez de coller avec le mémo, alors en dehors de la définition de la police, vous devrez faire toutes les chaînes avant les deux points de la même largeur. Vous pouvez utiliser une simple fonction de remplissage pour cela. Un bel exemple est donné sur SwissDelphiPages:

function RightPad(S: string; Ch: Char; Len: Integer): string; 
var 
    RestLen: Integer; 
begin 
    Result := S; 
    RestLen := Len - Length(s); 
    if RestLen < 1 then Exit; 
    Result := StringOfChar(Ch, RestLen) + S; 
end; 

Vous pouvez donc l'utiliser comme ceci:

Memo.Lines.Add(RightPad('some_string', ' ', 20) + ':' + some_string); 
3

Pour formater les chaînes que vous pouvez utiliser System.SysUtils.Format

procedure Output(const AStr1, AStr2 : string; AWidth : Integer); 
begin 
    Writeln(Format('%-*.*s : %s', [AWidth, AWidth, AStr1, AStr2])); 
end; 

procedure Main; 
begin 
    Output('aaaa', 'dsfdsfdsffsf', 9); 
    Output('bbbbbbbbb', 'fgdfgff', 9); 
end; 

sortie dans la console sera

 
aaaa  : dsfsfd 
bbbbbbbbbb : ghjghjgjhjg 

Pour publier cette sortie dans un TMemo, vous devez sélectionner un monospaced font.

Une meilleure option consiste à utiliser une grille avec 2 colonnes.

0

Je suppose que vous devez faire deux fois l'itération sur toutes les lignes: d'abord pour connaître la longueur maximale de la chaîne avant le ":". Ensuite, vous devez faire le traitement afin d'obtenir le ":" décalé individuellement. Pour cette deuxième itération, utilisez une approche du montré précédemment dans les autres réponses.

Questions connexes