Chaine longueur fixe [Résolu]

Signaler
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Bonjour,

A tout hasard, existe-t'il une fonction toute faite qui formate un texte sur x caractères ?
Exemple : si je veux afficher sur 3 caractères dans une liste box, les trois nombres suivants 1, 25 et 330 en leur ajoutant des espaces devant ?
(j'ai fait une fonction maison, mais ne perdons pas une occasion de s'instruire...)

Simon

22 réponses

Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
la fonction format doit le permettre. Il me semble que Format('%.3d', [25]) doit t'afficher '025'
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Si, si. Format() te permet de faire ça pour des chaînes.

Et, pour info, il y a aussi FormatFloat() pour les nombres (accepte aussi les entiers).
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Salut,

oui, avec Format, les spécificateurs width et prec sont utilisables, même si le résultat est surprenant avec les chaînes de caractères.

Voici un petit code de démonstration (j'avais un peu de temps à tuer).
Il suffit de placer un Memo et 2 Buttons sur une fiche et de remplir les évènements OnCreate et OnClick sans oublier la procedure GenerateDummyStrings.
Pas besoin de se fatiguer pour la disposition, tout se met en place dans OnCreate (j'avais du temps à tuer, je vous dis...).

{ génération d'une liste de chaînes dont la longueur varie aléatoirement de 1 à Length }
procedure GenerateDummyStrings(const Count: Integer; Strings: TStrings);
const
  Length = 9;
var
  i, j: Integer;
  L: Integer;
  Tmp: string;
begin
  Strings.Clear;
  for i := 1 to Count do
  begin
    L := Random(Length) + 1;
    Tmp := '';
    for j := 1 to L do
    begin
      Tmp := Tmp + (Char(Random(26) + 97));
    end;
    Strings.Add(Tmp);
  end;
end;

{ les chaînes seront alignées à droite, comme des chiffres }
procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
  i: Integer;
begin
  List := TStringList.Create;
  try
    { génération d'une liste de 100 chaînes }
    GenerateDummyStrings(100, List);
    for i := 0 to List.Count - 1 do
    begin
      List[i] := Format('%20.13s', [List[i]]);
    end;
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;

{ les chaînes seront alignées à gauche, c'est plus habituel }
procedure TForm1.Button2Click(Sender: TObject);
var
  List: TStringList;
  i: Integer;
  Inter, W: Integer;
const
  Interval = 20;
begin
  List := TStringList.Create;
  try
    { génération d'une liste de 100 chaînes }
    GenerateDummyStrings(100, List);
    for i := 0 to List.Count - 1 do
    begin
      W := Length(List[i]);
      Inter := Interval + W;
      List[i] := Format('%*.*s', [Inter, W, List[i]]);
    end;
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Width := 533;
  Height := 523;
  with Memo1 do
  begin
    Left := 0;
    Top := 0;
    Width := 385;
    Height := 481;
    Align := alLeft;
    ScrollBars := ssVertical;
    Font.Name := 'Courier New';
    Font.Size := 10;
    Clear;
  end;
  with Button1 do
  begin
    Left := 420;
    Top := 184;
  end;
  with Button2 do
  begin
    Left := 420;
    Top := 228;
  end;
  Randomize;
end;


Avec Delphi, tout devient possible

JP
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
ok, merci. J'ai bien jeté un oeil au tuto de f0xi sur l'instruction format, mais je ne pensais pas que le ".3" pouvait s'appliquer à des chaines. Je teste ça.


Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Ok, merci aussi Cari !

Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Pas mal !
Merci pour l'idée

Simon
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
« Pas besoin de se fatiguer pour la disposition... »


Ouais...
Mais 'faut quand même Copier/coller.
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Ouais...
Mais 'faut quand même Copier/coller


No problem...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Excellent !!!
Comment tu fais ça ?


Simon
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Excellent !!!
Comment tu fais ça ?


Heu... comment je fais quoi ?
Incorporer une image dans le post, tu veux dire ?
Ça le fait, hein ?
Une solution simple est d'uploader l'image sur un serveur dédié, ImageShack par exemple.
C'est gratuit.
Puis tu utilises les outils de mise en page fournis ici dans la barre au-dessus du post pour entrer l'adresse de l'image (adresse fournie par l'hébergeur).
That's all...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Ok, ça peut être utile pour des copies d'écran aussi...
Merci pour le truc

Simon
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Nous, c'est surtout pour les conneries qu'on trouve ça utile...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
J'avais bien compris Cari !
;)

Simon
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Moi j'ai rien compris.

Bostik c'est pourtant une marque sérieuse...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Simon
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17


«Une solution simple est d'uploader l'image sur un serveur dédié, ImageShack par exemple»


Pour une photo trouvée sur le Net, on peut aussi le faire directement, sans UpLoader :

1) Clic droit sur la photo.
2) Choisir "Propriétés'.
3) Copier l'URL
4) Coller l'URL de l'image dans l'outil de mise en page du post.
5) Héhéhé !
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Pour une photo trouvée sur le Net, on peut aussi le faire directement, sans UpLoader


Oui, ça s'appelle le hotlink
C'est plutôt à éviter, quoi.

Moi, ce que j'en dis...
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
J'ai appris un truc, là.

Mais ce que je ne comprends pas c'est qu'il n'y aurait plus de problème en passant par un site dédié comme tu le décris, korgis...
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16


Mais ce que je ne comprends pas c'est qu'il n'y aurait plus de problème en passant par un site dédié comme tu le décris, korgis...


Ben justement, c'est que le site est dédié.
C'est étudié pour, quoi...
Je crois savoir qu'ImageShack est le premier à avoir proposé ce service, depuis plusieurs années.
Sans entrer dans le détail du modèle économique, ça semble fonctionner ainsi :
- le service de base est gratuit mais limité,
- si on veut des prestations supplémentaires, c'est payant, diverses formule étant proposées (au mois, à l'année, sauvegardes et autres options "pro" à voir sur le site).
Après, il existe des prestations personnalisées pour les entreprises, certainement aussi des revenus publicitaires etc...
Je n'en sais guère plus.
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16