IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Remplacer le composant MEMO (texte plain) par RichEdit


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut Remplacer le composant MEMO (texte plain) par RichEdit
    Jusqu'à présent, j'ai utilisé le composant Memo pour fournir des informations sur: articles, clients ...
    La programmation était très simple ....
    Toutes ces informations sont gardées dans un fichier texte.
    On lit le fichier et on le stocke dans un array de texte.
    On fait une recherche pour sélectionner les lignes relatives à l'un des articles.
    Et enfin on ajoute les lignes trouvées au composant MEMO.

    Mais... Cela ne fonctionne pas avec RichEdit...

    J'ai créé le fichier RTF.
    J'ai répété les mêmes étapes: Lecture, selection des lignes et exposition sur le RichEdit
    Mais Impossible.
    Le format RTF est perdu...
    J'ai cherché chez Google... mais rien trouvé.
    Est-ce que quelqu'un sait comment faire?
    Ce serait intéressant...
    Merci ....

  2. #2
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Peut tu nous poster ton code stp ?
    Rien ne s'affiche dans ton RichEdit ?

    Merci

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut
    Merci de ta reponse...

    Mon code, pour les fichiers TEXT, bien sûr .......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TForm1.Button5Click(Sender: TObject);
    var
       i:integer;
       nIni,nFin:integer;
       sIni,sFin:string;
    begin
      //ouvre RTF et garde lignes dans array textoGrados
    leefichE('text.RTF', textoGrados, totallinG);
     
    sIni:='10000';sFin:='10001';  //produit 10000 à chercher
     
    nIni:=0;nFin:=0;    //numero lignes ini et fin
    for i:=1 to totalLinG do
       begin
       if ansipos(sIni,textoGrados^[i])>0 then nini:=i;
       if ansipos(sFin,textoGrados^[i])>0 then begin nFin:=i;break;end;
       end;
     
      // si trouvé... montre selection
    if (nIni>0)and(nFin>0) then
       begin
       richedit1.Clear;
       for i:=nIni+1 to nFin-1 do
             richedit1.Lines.add(textoGrados^[i]);
       end;
    end;
    Le résultat...
    Dans le RichEdit s'affiche le format RTF: le texte plus tous les caracters du formatage.

    Je pense qu'il faut trouver un autre code et se servir plutôt de...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RichEdit1.Text
    RichEdit1.SelStart
    RichEdit1.SelLength
    ....

    Stream???

    Mais je n'arrive pas à controler...

  4. #4
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Je pense qu'il y a plus simple pour lire un fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var Fichier : TStringList;
    begin
      Fichier:=TStringList.Create;
      Fichier.LoadFromFile('text.rtf');
     
      //Traitement
     
      Fichier.Free;
    end;
    Ensuite, il faut savoir qu'un fichier RTF contient plusieurs lignes en début de fichier permettant justement de stocker les différentes combinaisons de police, couleur et taille. Donc, si tu veux récuperer une ligne en plein milieu de ton fichier, tu dois aussi ajouter les quelques premieres lignes de ton fichier. Quand tu auras récupéré ces lignes (les premieres, plus celle qui t'interresse), tu n'as qu'a les affecter au composant RichEdit via la propriété Text.

    Par exemple, si tes lignes sont dans une StringList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Text:=MesLignes.Text;
    Si cela ne réponds pas a ta question, ou si tu n'y arrives pas, poste nous un morceau de ton fichier RTF (au moins le début et la ligne que tu veux extraire).

    Voila, Bonne chance

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Dans le RichEdit s'affiche le format RTF: le texte plus tous les caracters du formatage.
    ... Les caractères du formattage ne s'affichent que si la propriété PlainText du RichEdit a été basculée sur True : suffit de la basculer sur False dès la conception.

    Ensuite, on retrouve le texte sans les caractères de formattage rtf, dans la propriété RichEdit.Text et la propriété RichEdit.Lines[i] et dans lesquelles on retouve le caratère de tabulation, l'espace, et les caractères de fin de ligne (#13#10).

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut
    Salut...

    Je dois remercier l'idée de Mick...
    Pourquoi on perdait le format des lignes sélectionnées?
    Parce qu'elles ont besoin de l'information de l'entête du fichier RTF.
    Mais quelles sont ces lignes?
    J'ai constaté que leur taille varie de un à l'autre RTF.
    J'ai donc utilisé l'astuce suivante ...
    Au début du fichier RTF j'ai mis une marque: INIFILE.
    Les lignes qui sont au-dessus (environ 40) sera l'en-tête.
    Et les lignes entre chaque numéro sera la description du produit.

    IMPORTANT!
    Il faut laisser une ligne vide au-dessus et en dessous de chaque signal (marque), dans la rédaction du texte dans Word. Juste à titre de précaution ....
    Eh bien, voilà le code ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    procedure TForm1.Button1Click(Sender: TObject);
    var
      nfin,nIni: integer;
      nIniFile,i : integer;
      FichRTF,mislineas : TStringList;
    begin
      FichRTF:=TStringList.Create;
      mislineas:=TStringList.Create;
      FichRTF.LoadFromFile('TEXT.RTF');
     
      nIniFile:=0;  //fin de l'entête
      nIni:=0;       //ligne debut selection
      nFin:=0;      // fin selection
     
          //cherche les 3 lignes
      for i:=0 to FichRTF.Count-1 do
        begin
        if AnsiPos('INIFILE', FichRTF[i])>0 then nIniFile := i;
        if AnsiPos('12345', FichRTF[i])>0 then nIni := i;
        if AnsiPos('12346', FichRTF[i])>0 then begin nFin := i;break;end;
        end;
     
      if (nIniFile=0)or(nIni=0)or(nFin=0) then showmessage ('Problème');
     
           //l'entête
      for i:=0 to nIniFile-1 do
           mislineas.add(FichRTF.Strings[i]);
     
           //le texte du produit 12345
      for i:=nIni+1 to nFin-1 do
           mislineas.add(FichRTF.Strings[i]);
     
           //Et enfin meslignes --> RichEdit
      RichEdit1.Text:=mislineas.Text;
     
     
    end;
    Merci a tous...
    Si vous avez des corrections... je serai ravi.

  7. #7
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Dans le RichEdit s'affiche le format RTF: le texte plus tous les caracters du formatage.
    ... Les caractères du formattage ne s'affichent que si la propriété PlainText du RichEdit a été basculée sur True : suffit de la basculer sur False dès la conception.
    Non, lors de l'affectation d'une chaine a la propriété Text du RichEdit, si cette chaine est au format RTF, elle sera convertie automatiquement en texte formatté, quelque soit l'état de PlainText. (Testé sous D2005)

    Citation Envoyé par Gilbert Geyer Voir le message
    Ensuite, on retrouve le texte sans les caractères de formattage rtf, dans la propriété RichEdit.Text et la propriété RichEdit.Lines[i] et dans lesquelles on retouve le caratère de tabulation, l'espace, et les caractères de fin de ligne (#13#10).
    Pas exactement : RichEdit.Text ne contient pas les caracteres de formattage, c'est vrai. Mais avec le RichEdit.Lines, si tu fais un RichEdit.Lines.SaveToStream, ton stream contiendra les caracteres de formattage, si PlainText vaut false...

    Voila

    Petite précision pour Jusaso : Si ton application est destinée a tourner sous Vista, donne le nom COMPLET de ton fichier. Sous Vista, les chemins absolu ne fonctionnent pas tout le temps ...

    Et libere tes variables (MaList.Free)

Discussions similaires

  1. [XSLT] Remplacer element d'un fichier xml par du texte
    Par ALAMI2009 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/11/2009, 15h09
  2. Remplacer mon composant Chart par un composant TMS Chart ?
    Par Bruno13 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 15/09/2008, 17h13
  3. remplacer les composants fastnet par indy
    Par ddrmax dans le forum C++Builder
    Réponses: 0
    Dernier message: 13/07/2008, 01h07
  4. Réponses: 3
    Dernier message: 16/01/2008, 16h32
  5. Réponses: 3
    Dernier message: 30/09/2006, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo