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

  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)

  8. #8
    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
    Bonjour,

    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
    ... Quelle idée saugrenue que de vouloir affecter une chaîne du format RTF à la propriété Text alors que l'intérêt du RichEdit est qu'il gère tout le charabia de formattage RTF dans une arrière boutique de variables privées ce qui fait que les variables publiques (propriété text et Lines) en sont débarassées et rendent le texte lisible.

    Pas exactement : ... Mais avec le RichEdit.Lines, si tu fais un RichEdit.Lines.SaveToStream, ton stream contiendra les caracteres de formattage, si PlainText vaut false...
    ... Ben ça confirme simplement que les caractères de formattage sont stockés dans des variables privées et que les mecs qui ont codé le Lines.SaveTo n'ont pas oublié de sauver les caractères de formattage en même temps que le Text des Lines.

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

  9. #9
    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
    ... Quelle idée saugrenue que de vouloir affecter une chaîne du format RTF à la propriété Text alors que l'intérêt du RichEdit est qu'il gère tout le charabia de formattage RTF dans une arrière boutique de variables privées ce qui fait que les variables publiques (propriété text et Lines) en sont débarassées et rendent le texte lisible.
    Mais lors de l'affectation de ta chaine a la propriété Text de ton composant, elle est automatiquement convertie et interprétée, et stockée comme il faut dans les variables privées dédiées. La preuve est que si tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RichEdit1.Text:=MaChaineRTF;
    ShowMessage(RichEdit1.Text);
    le showmessage t'affichera le texte inclus dans ta chaine RTF, et non pas "MaChaineRTF"

    A+

    Mick605

  10. #10
    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
    Re-salut,

    Ben, oui mais je ne vois pas l'intérêt de faire RichEdit1.Text:=MaChaineRTF

    Moi je me contente de faire :
    - soit RichEdit1.Text:=MaChaineEnStringNONRTF,
    - soit Richedit1.Lines.LoadFromFile('MonFichier.RTF')
    et le ShowMessage(RichEdit1.Text) m'affichera le texte sans le charabia RTF.

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

  11. #11
    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
    Re-salut,

    Ben, oui mais je ne vois pas l'intérêt de faire RichEdit1.Text:=MaChaineRTF

    Moi je me contente de faire :
    - soit RichEdit1.Text:=MaChaineEnStringNONRTF,
    - soit Richedit1.Lines.LoadFromFile('MonFichier.RTF')
    et le ShowMessage(RichEdit1.Text) m'affichera le texte sans le charabia RTF.

    A+.
    C'est vrai. Tout ca pour dire que les deux méthodes sont équivalentes puisque elles donnent le meme résultat ... J'espere que jusaso a obtenu les informations qu'il désirait ^^

    Allez, a+

    Mick605

  12. #12
    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
    Bonjour,

    J'espere que jusaso a obtenu les informations qu'il désirait
    ... Dans son dernier message il a dit :
    Au début du fichier RTF j'ai mis une marque: INIFILE.
    autrement dit, il est parti sur une sorte de bidouillage ... mais qui marche peut-être vu qu'il ne participe plus à la discussion.

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

  13. #13
    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
    Bonjour...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J`espere que jusaso a obtenu les informations qu`il désirait
    Oui, sûrement... j'ai obtenu les informations désirées.
    Je remercie une fois de plus l'aide de Mick...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... autrement dit, il est parti sur une sorte de bidouillage ... mais qui marche peut-être vu qu`il ne participe plus à la discussion.
    Non, je ne suis pas parti....
    Pardon si je ne participe pas a la discussion... je croyais que c'était une discussion à deux. Ou plutôt un monologue de Gilbert...

    Encore merci de votre forum.
    A bientôt...

  14. #14
    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
    autrement dit, il est parti sur une sorte de bidouillage ... mais qui marche peut-être vu qu'il ne participe plus à la discussion.
    C'est vrai que c'est un peu un bidouillage, mais je pense qu'il vaut mieux un bidouillage qu'il comprends, qu'une bonne solution qu'il ne comprend pas. Au début, j'était pareil. Je faisais plein de trucs bizarres, et au fur et a mesure que j'apprennais des techniques, j'arrivais a voir comment les modifier et les ameliorer ^^.

    Enfin bref, a+, je vais arreter de polluer la discussion ^^

    Mick605

  15. #15
    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
    Re-salut,

    Exact, c'est forgeant qu'on devient forgeron.

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

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