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

Résolu
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022 - 18 juin 2020 à 19:33
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022 - 19 juin 2020 à 17:59
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

Whismeril Messages postés 17805 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 septembre 2022 618
18 juin 2020 à 19:38
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)
0
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022
18 juin 2020 à 20:03
Bonjour;
Merci de l'info, j'avais pas vu
merci
0
noctambule28 Messages postés 31766 Date d'inscription samedi 12 mai 2007 Statut Webmaster Dernière intervention 13 février 2022 5
18 juin 2020 à 21:12
Bonsoir,

La simple balise code fait le travail
aaa              bbb                   cccccccccc
aaaa bbbbbb ccccc
aa bbbbbbbbb ccccccc
aaaaa bbbbbbb cccc
0
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022
18 juin 2020 à 21:29
oui, merci
je ne savais pas que mon texte aurait dû être dans les balise de codes,
cordialement
0
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...
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
Modifié le 19 juin 2020 à 09:45
Salut,
et pourquoi ne pas utiliser la méthode :
Memo.LoadFromFile(FichierText)

?

--
0
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022
19 juin 2020 à 11:20
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
0
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022
Modifié le 19 juin 2020 à 11:44
@ 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 !!!!
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 13
Modifié le 19 juin 2020 à 14:46
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.
@+
0
Excalibur_56 Messages postés 43 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 26 août 2022
19 juin 2020 à 17:59
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.
0