Problème de lignes décalées dans un Mémo ou un RichEdit ?? [Résolu]

Signaler
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020
-
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020
-
Bonjour à tous;
J'apprends à utiliser un Memo et un RichEdit.
J'ai saisi du texte dans mon fichier texte de la façon suivante:
aaa bbb cccccccccc
aaaa bbbbbb ccccc
aa bbbbbbbbb ccccccc
aaaaa bbbbbbb cccc

voici ma procédure pour lire mon fichier (*.txt):
const
  Fichier = 'Texte.txt';

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo.Clear;
AssignFile(FichierText, ExtractFilePath(Application.ExeName)+Fichier);
Reset(FichierText);
While Not EOF(FichierText) Do
  Begin
    Readln(FichierText, Texte);
    Memo.Lines.Add(Texte);
  End;
  CloseFile(FichierText);
End;


Mais, voici le résultat dans mon Mémo ou dans mon RichEdit:
aaa bbb cccccccccc
aaaa bbbbbb ccccc
aa bbbbbbbbb ccccccc
aaaaa bbbbbbb cccc

(ça fait pareil dans le corps du message...)

Pourquoi ai-je ce problème ?
Comment le résoudre, pour que tous soit aligné, comme dans mon fichier ?.
aaa bbb cccccccccc
aaaa bbbbbb ccccc
aa bbbbbbbbb ccccccc
aaaaa bbbbbbb cccc

Chaque colonne fait 28 caractères au total, j'ai essayé avec moins de caractères, mais, le problème reste le même.

Quelqu'un pourrait-il m'aider à résoudre mon problème ?.

En vous remerciant d'avance;
Bien cordialement à tous.
Excalibur_56

9 réponses

Messages postés
14749
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 septembre 2020
433
Bonjour

le site supprime tous les espaces qu'il juge inutile.
Du coup tes trois exemples apparaissent pareils.

Pour qu'on voit la différence, il faut utiliser les balises de code, en choisissant xml (ou autre)
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020

Bonjour;
Merci de l'info, j'avais pas vu
merci
Messages postés
30742
Date d'inscription
samedi 12 mai 2007
Statut
Webmaster
Dernière intervention
18 septembre 2020
2
Bonsoir,

La simple balise code fait le travail
aaa              bbb                   cccccccccc
aaaa bbbbbb ccccc
aa bbbbbbbbb ccccccc
aaaaa bbbbbbb cccc
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020

oui, merci
je ne savais pas que mon texte aurait dû être dans les balise de codes,
cordialement
Salut,
Je ne suis pas sur de bien comprendre la question...
Un problème d'alignement ???
Si c'est graphique peut-être mettre le TFont.Name du memo en Police "Consolas" qui a une police à chasse fixe...mais je me trompe peut-être sur ta vrai problématique...
@+
Messages postés
1721
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
30 août 2020
3
Salut,
et pourquoi ne pas utiliser la méthode :
Memo.LoadFromFile(FichierText)

?

--
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020

Bonjour Jappee;
Merci pour ta réponse, je connais cette méthode, j'ai essayé cette façon,
mais, le résultat est le même.
J'arrive à lire une colonne par une colonne.
mais quand je veux lire les trois colonnes en même temps, elles sont toujours décalées.
Comme ça:
aa               bb                      cc
aaaa                 bbbb                      cccc
aaaaaa                      bbbbbb                      cccccc 

je lis mon fichier de la façon suivante:
const
  Fichier = 'Texte.txt';
  Tabulation : Integer = 28;

var
  Form1: TForm1;
  FichierText: TextFile;
  Texte, LeFichier: String;

While Not EOF(FichierText) Do
  begin
    Readln(FichierText, Texte);
    Espace:= (pos(' ', Texte));
    Col1:= Trim(Copy(Texte, 1, Espace -1));
    Col2:= Trim(copy(Texte, Espace, Length(Texte)-Espace*2 -2));
    Col3:= Trim(copy(Texte, Tabulation *2, Length(Texte)));
    inc(NbrLigne);
Memo1.Lines.Add(Col1+Col2+Col3);

Mais, elles sont décalées.
Memo1.Lines.Add(Col1); ou Col2, ou Col3, me rappelle la colonne alignée , mais si je rajoute une seule colonne, elles sont décalées.

Pourquoi, dans un Memo, ou dans un RicheEdit la mise en forme du fichier est supprimée ?.
Car j'ai essayé avec les deux composants , le résultat est le même.

Par contre, dans mon StringGrid, ça le fait à merveille !!!
inc(NbrLigne);
    StringGrid1.RowCount:= NbrLigne+1;
    StringGrid1.Cells[1, NbrLigne]:= Col1;
    StringGrid1.Cells[2, NbrLigne]:= Col2;
    StringGrid1.Cells[3, NbrLigne]:= Col3;

J'en suis vraiment satisfait.
j'ai essayé de les lire avant dans un TLsit, voir en espérant que la mise en forme ne soit pas modifiée, mais, en vain.
j'ai essayé aussi, d'enregistrer avec tabulation, et un bouton, le résultat à la lecture est le même, ... toujours aussi décevant.
Merci beaucoup pour ta proposition.

J'ai remarqué, que dans le composant, le décalage des colonnes est identique à :
tabulations - la longueur du texte.
La tabulation = 28, si le texte = 2 , l'espace sera de = 26.
ainsi de suite pour chacune des colonnes.
La colonne B est décalée par rapport à la longueur du texte de la colonne A et pareil pour la colonne C, décalée par rapport à la longueur du texte de la colonne B.

Donc, j'en déduit, qu'il faille d'abord, supprimer tous les espaces, puis, les rajouter afin
d' aligner les trois colonnes par du code.
mais, j'ai pas réussi... moi et les maths....

Merci à ceux qui ont passé du temps à me lire,
Bien cordialement à tous
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020

@ Yanb
Bonjour;
MERCiiiiiiiiiiiiiiiiiiiiiiiii !!!!!!!
bien !!!!!, super merci à toi !!!!!

De ce fait, la méthode de rappel de lecture Jappee, marche aussi, ainsi que la mienne.

Je ne savais pas que la police pouvais changer le graphisme. (???)
Y à t-il des tutos pour apprendre ce type de changements dû aux polices de caractères ???,

PROBLÈME RÉSOLU !!!!!

Bien cordialement à tous !!!!
Messages postés
257
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 août 2020
8
Salut,
J'avais donc bien compris la finalité du problème...
La police c'est quoi ? pour faire simple, c'est un glyphe, et à l'intérieur on a les lettres et les chiffres etc...représenté comme un tableau de dessin. Chacune des lettres à grossièrement une taille en hauteur et en largeur. Et si on veux que la largeur du "w" soit égal au "i" ou le "0" au "1" il faut alors avoir ce que l'on appel une chasse fixe (un alignement blanc devant et à l'arrière). Les polices les plus courantes en chasse fixe sont "Consolas", "Courier" pour Windows, "Monaco" pour Mac et "DejaVu sans Mono" pour linux. Elles peuvent être par exemple utile pour faire des tableaux de bits imprimer sans passer par des tableaux.
@+
Messages postés
37
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
22 juillet 2020

Bonjour;
merci pour ta réponse, effectivement, j'ai vu du code pour définir la hauteur de la police.
J'ai mis un FontDialog, et un bouton, effectivement, selon la police, l'affichage des lignes est décalé. J'ai vu que quelques polices autre que "consolas" pouvaient également convenir,
comme; Courrier, Courrier New, Fixedsys, Lucida console. Il n'y avait que ces quatre là.
(je les ai presque toutes essayées).
J'ai donc mis "Lucida console".
Cela à résolu mon problème.
Donc, si j'ai bien compris, avec les autres types de polices, il faudrait définir un alignement blanc devant et arrière, pour ne plus avoir ce décalage???. Peut-être trop compliqué à coder ???, non ??. à voir....

Merci à toi cs_yanb ainsi qu'à Japee de m'avoir répondu.