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

Delphi Discussion :

FastReports sans base de données ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 222
    Par défaut FastReports sans base de données ?
    Bonjour à tous,
    ► pour les admin : le lien vers le forum d'entraide sur les générateurs d'états renvoie sur le forum Business Intelligence du coup j'ai posté ici.

    Suite à une question que je posais sur le forum sur imprimer un RichEdit en A4, ShaiLeTroll m'a fait remarquer que travailler avec un outil comme FastReports me faciliterai la vie.
    J'ai donc téléchargé la version gratuite de FR version VCL pour voir.
    C'est ma 1ere approche d'un générateur d'état ... et bien entendu, je suis dans la marre avec de l'eau jusqu'au cou !

    • Ma première question : Tous les tutos parlent de data provenant d'une base de données, moi j'ai un simple RichEdit sur une Form contenant un texte formaté RTF (en fait j'ai un mémo avec le code RTF que je reverse dans un TRichEdit via un StringStream pour avoir le formatage RTF), comment je peux verser le contenu de mon composant VCL dans le composant de FR ? ou dire à FR que ma data c'est RichEdit.Lines (ou un truc identique) ?

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Actuellement, je sais que tout FastReport est alimenté via un TClientDataSet, je n'ai pas mis le nez dans ce code que lors d'un petit bug à cause d'un nom de champ trop long (>30)

    Utilise TfrxRichView qui contient un RichEdit affecte lui le Stream utilise TfrxReport.OnGetValue
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 222
    Par défaut
    Merci ShaiLeTroll,

    Ah! surprise! en tapant TfrxRichView dans la barre de recherche des composants, il n'y est pas ...
    Le seul composant que j'ai dans FastReport VCL est frxRichObject qui n'est pas un composant visuel et ne possède pas d'événements.
    Il faut que je passe par frxReport ? dedans il y a un RichText Object mais sans événement OnGetValue ... punaise, ça commence mal

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par patrice@ Voir le message
    ► pour les admin : le lien vers le forum d'entraide sur les générateurs d'états renvoie sur le forum Business Intelligence du coup j'ai posté ici.
    Normal, car il y a plusieurs générateurs d'états. Au sein du forum Business Intelligence il y a Autres outils décisionnel et à l'intérieur on trouve FastReport

    Tous les tutos parlent de data provenant d'une base de données,
    Pas tous, mais là n'est pas le problème, on peut très bien ne pas utiliser de data d'une base de données et utiliser un frxuserdataset

    comment je peux verser le contenu de mon composant VCL dans le composant de FR ?
    La réponse je pense l'avoir donnée dans cette discussion toujours en utilisant un FrxuserDataset.

    une autre solution s'il ne s'agit que d'un seul richedit est d'accéder au composant,

    brouillon non testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TLireDat.frxReport1BeforePrint(Sender: TfrxReportComponent);
    var rich : TFrxRichview; // uses frxrich 
    begin
     begin
      rich:=frxReport1.FindComponent('Rich1') as TFrxRichview;
      if assigned(rich) then
        begin
          rich.RichEdit.lines:=RichEdit1.Lines;
        end;
    end;
    NB. il faudra poser un tfrxRichObject sur la forme

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Nom : Capture.PNG
Affichages : 228
Taille : 24,7 Ko

    dans mes différents essais, les couleurs et images n'apparaissent pas
    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
    procedure TLireDat.btnDialogClick(Sender: TObject);
    begin
    if opendialog1.Execute  then
     begin
       edit1.Text:=opendialog1.FileName;
       richedit1.Lines.LoadFromFile(opendialog1.FileName);
     end;
    end;
     
    procedure TLireDat.Button1Click(Sender: TObject);
    begin
    frxReport1.ShowReport();
    end;
     
    procedure TLireDat.frxReport1BeforePrint(Sender: TfrxReportComponent);
    var rich : TFrxRichview;
    begin
      rich:=frxReport1.FindComponent('Rich1') as TFrxRichview;
      if assigned(rich) then
        begin
          rich.RichEdit.lines:=RichEdit1.Lines;
        end;
    end;
    À ma décharge, c'est la première fois que j'utilise les TRichView et TFrxRichView. Il y a peut-être des subtilités que je n'ai pas utilisées.

    NOTE : si je code ainsi rich.RichEdit.Lines.LoadFromFile(opendialog1.FileName); à la place de rich.RichEdit.lines:=RichEdit1.Lines; les couleurs et dessin sont bien visibles dans l'état. La subtilité est donc à chercher les bonnes propriétés.
    Autre solution, passage par un stream
    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
    procedure TLireDat.frxReport1BeforePrint(Sender: TfrxReportComponent);
    var rich : TFrxRichview;
        aStream : TmemoryStream;
    begin
      rich:=frxReport1.FindComponent('Rich1') as TFrxRichview;
      if assigned(rich) then
        begin
          aStream:=TmemoryStream.Create;
          try
             RichEdit1.lines.SaveToStream(aStream);
             aStream.Position:=0;
             rich.RichEdit.Lines.LoadFromStream(aStream);
          finally
            aStream.Free;
          end;
        end;
    end;


    Je n'ai pas non plus tester un texte qui tiendrait sur plus d'une page (ce qui risque d'être un peu plus compliqué)

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    un problème de transfert PlainText du Lines ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RichEdit1.PlainText := False; // je ne sais jamais la bonne valeur, un cas c'est juste le texte nu dans l'autre le texte formaté
    MS := TMemoryStream.Create();
    try
      RichEdit1.Lines.SaveToStream(MS);
      MS.Seek(soFromBeginning, 0);
      rich.RichEdit.lines.LoadFromStream(MS);
    finally
      MS.Free();
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/03/2008, 18h07
  2. [MySQL] Sélection avec condition sans base de données
    Par covin85 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/04/2007, 10h08
  3. Postfix/imap Avec ou sans base de donnée
    Par manu7781 dans le forum Administration système
    Réponses: 1
    Dernier message: 10/04/2007, 15h30
  4. [Conception] Génération RSS sans base de données
    Par gb-ch dans le forum Langage
    Réponses: 9
    Dernier message: 16/03/2007, 18h11
  5. [CRYSTAL REPORT] Etat sans base de données
    Par chnickel dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/05/2004, 16h44

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