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 :

[RAVE] Comment visualiser un texte enrichi ? [FAQ]


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut [RAVE] Comment visualiser un texte enrichi ?
    Bonjour, à tous.

    J'ai déjà cherché dans la FAQ, et sur le net, mais je n'y ai trouvé aucune page sur le sujet (même dans l'aide contextuelle Rave pour Delphi 2005, ou sur le site de Nevrona).

    Je cherche à insérer dans un rapport le contenu d'un TRichEdit qui n'est pas en rapport avec quelque base de donnée, ou quel fichier existant que ce soit (le composant TRaveMemo ne permets pas de reproduire le formattage).

    Merci d'avance de vos précieux conseils ou liens..

    Amicalement,

    ARDILLER.

  2. #2
    Membre averti Avatar de chtiot
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 385
    Points : 403
    Points
    403

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Merci, je connais déjà.
    Merci de ta réponse.

    Cette procédure permets (à ma connaissance, et d'après ce que j'ai pu la tester) de créer un état à partir d'un RichEdit et de le faire apparaitre sur plusieurs pages de rapport s'il est trop long (et elle n'affiche pas les couleurs de fond différentes, seulement le formattage et la couleur du texte), elle ne permets pas d'encapsuler le RichEdit dans un composant visuel paramètrable (comme le TRaveMemo ou le TRaveDataMemo).
    En fait, je recherche l'équivalent rave du QRRichText de QuickReport.

    Le TRaveDataMemo contiens une propriètè nommée "ContainsRTF" qui permets probablement d'fficher les champs Blob de texte formattés d'une base de donnée, mais ceux que je souhaite afficher, ne se trouvent pas dans une DB.
    La solution qui consiste à créer sur le tas une base de données virtuelle acceuillant les Textes enrichis afin de les visualiser avec TRaveDataMemo est au-dessus de mes compétences (même si j'y ai pensé :-).

    Je continue à chercher, et ne manquerai pas d'en indiquer le résultat.
    Je reste ouvert à toutes suggestions.

    Amicalement,

    ARDILLER.

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    A tester

    Dans RaveReport :

    1- Tu crées un paramètre dans le RaveReport (MonParam)
    2- Tu poses un TRaveDataMemo que tu configure avec la propiété "ContainsRTF" à True.
    3- Tu assignes le paramètre à la propriété DataField du RaveDataMemo

    Dans Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        With RvProject1 do
        begin
          try
            Open;
            SetParam('MonParam',RichEdit.text); // il faut peut être testé des options différentes
          finally
            Close;
          end;
    Puis tu lances l'impression

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Excellente idée..
    Excellente idée, Malatar.

    J'ai essayé avec toutes les combinaisons possibles, et si j'obtiens le texte du RichEdit dans le TRaveDataMemo, il est Plain est pas formattté.

    Ce qui m'a amené à enviseager les chose avec un léger twist.
    J'ai sauvé le texte formatté du richEdit dans un Stream que j'ai transféré dans un memo simple afin d'obtenir le texte que l'on voit lorsqu'on ouvre un document *.rtf avec le notepad.
    Puis je l'ai passé en paramètre comme suit :

    Dans le concepteur Rave :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataMemo.ContainsRTF := True;
    DataMemo.DataField := Param.MonParam
    Dans le projet Delphi :

    Transférer le texte enrichi vers le memo :
    (Ce code n'est pas de mon fait je l'ai trouvé sur le Net)
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    function EditStreamOutCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): Longint; stdcall;
    var
    theStream: TStream;
    begin
    theStream := TStream(dwCookie);
    with theStream do
      begin
      if cb > 0 Then
      pcb := Write(pbBuff^, cb);
      Result := 0;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
        ////////////////////////////////////////////////////////////
        // Récupérer le Stream du RichEdit et le Transférer au Memo
        ////////////////////////////////////////////////////////////
        procedure GetStreamFromEditor;
        var aMemStream: TMemoryStream;
              procedure GetRTFSelection( aRichEdit: TRichEdit; iStream: TStream );
              var EStream: TEditStream;
              begin
              with EStream Do
                begin
                dwCookie:= Longint(iStream);
                dwError:= 0;
                pfnCallback:= EditStreamOutCallBack;
                end;
              // Recupère tout le Texte
              aRichedit.Perform( EM_STREAMOUT, SF_RTF ,  longint(@EStream));
              // Recupère la Sélection
              //aRichedit.Perform(EM_STREAMOUT, SF_RTF or SFF_SELECTION,  longint(@EStream));
              end;
        begin
          aMemStream := TMemoryStream.Create;
          try
            GetRTFSelection(RichEdit1, aMemStream );
            aMemStream.Position := 0;
            Memo1.Lines.LoadFromStream( aMemStream );
          finally
            aMemStream.Free;
          end;
        end;
     
    begin
    RichEdit1.Lines.LoadFromFile('C:\Texte Formatté.RTF');
    GetStreamFromEditor;
    end;
    ou encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RichEdit1.Lines.SaveToFile('Temp.rtf');
    Memo1.Lines.LoadFromFile('Temp.rtf');
    Ce qui donne quelque chose comme ceci :
    {\rtf1\ansi\ansicpg1252\deff0\deflang1036\deflangfe1041\deftab708{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fmodern\fprq1\fcharset128 MS Mincho;}}
    {\colortbl ;\red255\green0\blue0;\red255\green255\blue0;}
    \viewkind4\uc1\pard\cf1\f0\fs20 Bo\cf0\b r\highlight2 de\b0 aux\highlight0 \i le\i0\f1 \f0 :
    \par
    \par \tab\tab\tab\tab\tab\tab\tab
    \par }
    Ensuite la transmition du paramètre au DatadMemo (encore merci à toi):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    With RvProject1 do 
        begin 
          try 
            Open; 
            SetParam('MonParam', Memo1.text); 
          finally 
            Close; 
          end;
    Et bingo !
    Le texte apparait formattté, mais toujours sans les couleurs de fond différentes ("highlightN Texte surligné \highlight0 " dans le memo).
    Mais ne chipotons pas, c'est déjà un énorme pas en avant.

    Merci à tous vos conseils et ligne de code.

    Amicalement,

    ARDILLER.

    PS : Personnellement, je préfère QuickReport à Rave, mais il n'est plus déployé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Comment envoyer du texte enrichi(couleurs,style...)
    Par fdiedler dans le forum Windows Forms
    Réponses: 14
    Dernier message: 17/03/2005, 14h49
  2. [Rave] comment faire un état paramétré ?
    Par HRAICHI dans le forum Rave
    Réponses: 2
    Dernier message: 02/10/2003, 10h14
  3. comment ecrire du texte dans une window application
    Par gaut dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 16/07/2003, 10h23
  4. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 21h56

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