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 :

Comment créer dynamiquement un filigrane dans 1 état FastReport et delphi 10


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Points : 17
    Points
    17
    Par défaut Comment créer dynamiquement un filigrane dans 1 état FastReport et delphi 10
    Salut à tous.
    Je dois créer un état où les pages ont des filigranes. L'utilisateur final désire modifier ces filigranes périodiquement.
    J'utilise fastreport 5 et delphi 10. La licence de fastreport que j'ai ne donne pas la possibilité à l'utilisateur final de modifier l'état à domicile.
    Je tiens offrir cette possibilité de créer ces filigranes par mon application pour chaque état concerné.
    Je bute.

    Voici le code de mes tentatives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Var
      Page: TfrxReportPage;
    begin
     Page:= TfrxReportPage.Create(frxReport1);
     Page.BackPicture.LoadFromFile('c:\Gicl_Pro\Images\Photo\photo.jpg');
    end;
    Quelqu'un a-t-il une idée?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Sérieusement, ce code ne correspond à rien, vous créez une nouvelle page alors que la page se doit d'être existante.

    Je n'ai jamais travaillé sur les filigranes et, comme j'ai une version enregistrée, je laisse la main du design aux utilisateurs. Mais lors de mes premières approches de fastreport (version Delphi de base donc) j'avais pu remarquer que cela fonctionnait un peu comme Rave quand on voulait faire des modifications "hors version enregistrée".

    Donc le principe serait de :
    Charger le fichier fr (si besoin)
    et trouver la/les pages à modifier (pas créer une nouvelle page)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var aPage : TFrxReportPage;
        i : Integer;
    begin
    if opendialog1.execute then
     begin
      for i:=1 to frxreport1.PagesCount-1 do
       begin
        aPage:=TFrxReportPage(frxreport1.Pages[i]);
        if not Apage.BackPicture.isEmpty then  // ou tout autre test
           aPage.BackPicture.LoadFromFile(Opendialog1.FileName);
       end;
     end;
    dans ce code mon état se compose de plusieurs types de pages, seule la première a un filigrane
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Si ces filigranes sont du texte, le plus simple serait d'ajouter un champ texte et de le lier à une variable (menu Report -> Variables).

    Ensuite pas code sur l'événement OnGetValue pour une variable nommée Watermark :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Report1GetValue(const VarName: string; var Value: Variant);
    begin
      if SameText(VarName, 'Watermark') then
        Value := 'Confidentiel';
    end;
    Le seul truc ennuyeux est qu'il n'est pas possible d'appliquer une transparence au texte

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Andnotor Voir le message
    Si ces filigranes sont du texte, le plus simple serait d'ajouter un champ texte et de le lier à une variable (menu Report -> Variables).
    Selon la demande de delphiketou, LoadFromFile('c:\Gicl_Pro\Images\Photo\photo.jpg') ce n'est pas le cas.
    Le seul truc ennuyeux est qu'il n'est pas possible d'appliquer une transparence au texte
    Du coup tu me fais douter, pas sur le filigrane en tant que telle mais sur cette "transparence" J'ai un cas qu'il faut que je migre (de rave à fastreport) il va falloir que je me penche là-dessus

    [Edit] Ouf ! Ce devait être pour un Halloween en retard
    Nom : Capture.PNG
Affichages : 654
Taille : 14,0 Ko
    à moins que tu veuilles parler de la couche Alpha du texte ? Auquel cas il "suffit" de ne pas utiliser les couleurs prédéfinies et d'indiquer la couleur en Hexa i.e.
    Nom : Capture.PNG
Affichages : 648
Taille : 24,4 Ko
    (c'est la version FMX de fastReport, je ne sais si la version VCL est en AlphaColor ou en simple RGB ... À vérifier)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    J'aurai peut être fait un code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.FormActivate(Sender: TObject);
    var
      Page1: TfrxReportPage ;
    begin
      Page1:= TfrxReportPage(frxReport1.FindObject('Page1'));
      Page1.BackPicture.LoadFromFile('i2.bmp');
      frxReport1.PrepareReport(true)   ;
      frxReport1.ShowPreparedReport ;
    end;
    note : Filigrane est un mot masculin ...

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    note : Filigrane est un mot masculin ...
    bien vu, une fôte que mon correcteur automatique (Language tool) n'a pas signalé.

    Pour le code, oui bien sûr le tien est plus simple, en fait je voulais :
    1. Voir s'il était possible d'utiliser des filigranes différents en fonction des pages OK
    2. Tester quelques conditions (je n'ai reporté que Apage.BackPicture.isEmpty) OK
    3. Faire des enchainements de pages avec données Non Fait


    Pour en revenir aux couleurs, la version fastreport VCL que j'ai testé (5.2 pro) n'aime pas du tout la couche Alpha qu'en est-il de la dernière version ? Aucune idée mais j'ai plus l'impression que c'est un problème VCL que FastReport sensu-stricto
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Je ne parlais pas du remplissage d'un objet texte (qui peut être None) mais bien de la (semi-)transparence de l'objet lui-même, une propriété Opacity.

    Citation Envoyé par SergioMaster Voir le message
    à moins que tu veuilles parler de la couche Alpha du texte ? Auquel cas il "suffit" de ne pas utiliser les couleurs prédéfinies et d'indiquer la couleur en Hexa
    Ce qui n'est pas possible en VCL (v6.2.1 par Get-It).

    Par contre la couche alpha d'un png est correctement traitée. Le mieux dans le cas d'un filigrane "image" serait donc de l'insérer par code dans l'événement OnEndDoc (il sera ainsi par dessus le texte et les images) :
    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
    procedure TForm1.frxReport1EndDoc(Sender: TObject);
    var
      P :TfrxReportPage;
      i :integer;
     
    begin
      with frxReport1 do
      begin
        Preview.Lock;
     
        try
          for i := 0 to PreviewPages.Count -1 do
          begin
            P := TfrxReportPage(PreviewPages.Page[i]);
     
            with TfrxPictureView.Create(P) do
            begin
              Align  := baClient;
              Center := TRUE;
              Picture.LoadFromFile('Demo.png');
            end;
     
            PreviewPages.ModifyPage(i, P);
          end;
     
        finally
          Preview.UnLock;
        end;
      end;
    end;

    Nom : FastReport.jpg
Affichages : 595
Taille : 23,7 Ko

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Points : 17
    Points
    17
    Par défaut
    Bonjour chers amis de Delphi.

    Tard vaut mieux que jamais.-> Mon post vient un peu tard...

    Mais je tiens à remercier tous pour l'assistance. Surtout ALWEBER, ça a marché 5 sur 5.
    Merci.

    Excusez moi pour la digression ; comment et pourquoi clôturer une discussion? A qui cela revient ?

  9. #9
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Citation Envoyé par delphiketou Voir le message
    Excusez moi pour la digression ; comment et pourquoi clôturer une discussion? A qui cela revient ?
    Il faut cliquer sur le bouton qui doit apparaitre pour celui qui a créé la discussion ( donc vous ), ce bouton est affichée tout en bas de la discussion

    EDIT : et bien voila, cela a été fait

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par delphiketou Voir le message
    Excusez-moi pour la digression ; comment et pourquoi clôturer une discussion?
    Si par clôturer il est entendu : indiquer que la discussion est résolu cela sert à ceux qui feront des recherches sur le même sujet, sachant que c'est résolu, ils pousseront un ouf de soulagement
    par contre s'il s'agit de verrouiller la discussion (plus d'ajout possible) je pense que seul un modérateur puisse le faire.

    À qui cela revient ?
    De le faire ? Normalement à la personne qui a initié la discussion. Néanmoins les modérateurs (dont je fais partie) ont le droit de le faire pour le bien de la communauté dont acte.

    Nota Bene : plusser sur le(s) post(s) qui a (ont) été utile(s) est aussi un bon moyen d'indiquer quelle(s) solution(s) a(ont) été retenue(s) ou sa(leur) pertinence.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Points : 17
    Points
    17
    Par défaut
    Ok, compris.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/12/2009, 19h41
  2. [Hibernate] Comment créer dynamiquement un fetching plan
    Par mauvais_karma dans le forum Hibernate
    Réponses: 15
    Dernier message: 08/08/2005, 09h40
  3. [.NET][CR] Comment afficher une image blob dans un état ?
    Par moucrack dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/06/2005, 13h49
  4. Comment créer un champs " BOOLEAN " dans ACCESS ?
    Par Didier100 dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/10/2004, 11h15

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