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

Langage Delphi Discussion :

Passer à une nouvelle page en QuickReport


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Points : 44
    Points
    44
    Par défaut Passer à une nouvelle page en QuickReport
    Bonjour à toutes et à tous,

    J'ai fait un programme qui imprime plusieurs QRCode sur la même page, pour cela j'ai utilisé une boucle qui parcoure la requête qui renvoie les éléments dont les QRCode doivent être générés. Pour imprimer le tout, j'ai eu recours à QuickReport, j'ai juste déclaré un tableau de QRImage, et à chaque tour de la boucle, l'image du QRCode générée est assignée à nouveau QRImage, ce qui donne à la fin une feuille avec des QRCode bien rangés en ligne et en colonnes, seul problème restant, celui du saut de page. En effet, je n'arrive pas à trouver le moyen pour que mon programme change de page automatiquement dès que la page courante est remplie. J'ai essayé avec les QRBand, mais il faut toujours laisser une marge en haut, ce qui ne m'arrange pas trop, et puis je n'ai pas trop su pour quel type de QRCode opter, voici mon code source :


    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
    50
    51
    52
    53
    54
    55
    56
    57
     procedure TImprGrp.ImprGr();
    var
    Tab: array[0..1000] of TQRImage;
    Tab2: array[0..1000] of TQRLabel;
    i: integer;
    begin
    i:=0;
    Xg:=78;
    Yg:=12;
    bmp:= TBitmap.Create;
     
    Try with ADOQuery4 do
    begin
    ADOQuery4.Active:=true;
    ADOQuery4.First;
    while not ADOQuery4.Eof
    do
    begin
    ZintBarcodeComponent1.Barcode.Data:='N° d''inventaire : '+ADOQuery4.FieldByName('Num_Inventaire').AsString;
    ZintBarcodeComponent1.Barcode.Scale:=1;
    ZintBarcodeComponent1.Barcode.GetBarcode(bmp);
    //Le QRImage qui affiche le QRCode
    Tab[i]:=TQRImage.Create(QuickRep1);
    Tab[i].Parent:=QuickRep1;
    Tab[i].Left:=Xg;
    Tab[i].Top:=Yg;
    Tab[i].Picture.Bitmap:=bmp;
    //Le QRLabel qui affiche un texte sous l'image
    Tab2[i]:=TQRLabel.Create(QuickRep1);
    Tab2[i].Parent:=QuickRep1;
    Tab2[i].Left:=Xg;
    Tab2[i].Top:=Yg+107;
    Tab2[i].Caption:=ADOQuery4.FieldByName('Num_Inventaire').AsString;
    //On incrémente le compteur
    i:=i+1;
    //Simple série de test pour laisser de la marge entre les images
    if(Xg<600)
    then Xg:=Xg+261
    else if(Yg<1000)
    then
    begin
    Xg:=78;
    Yg:=Yg+141;
    end 
    else
    begin
    QuickRep1.NewPage; //ça ne marche pas, un message d'erreur est généré et si je l'enlève, ça réimprime sur les premiers
    Xg:=78;
    Yg:=12;
    end;
    next;
    end;
    end;
    Finally
    QuickRep1.Preview;
    end; 
    end;
    Sur ma form, j'ai juste mis un composant QuickReport, J'ai mis son HasTitle à true juste parce que ça ne s'imprimait pas, le QRBand du title en lui même a un Height de 0 et il n'y a aucun composant là dessus.

    Remarque : J'espère qu'il n'y aura pas d’ambiguïté entre les préfixe QRCode et QRImage le premier voulant dire "Quick Response Code" et le second fait référence bien évidement à Quick Report, le composant ZintBarcode est également complètement indépendant de Quick report, j'ai juste récupéré son image sur un BitMap pour pouvoir ensuite l'afficher via un QRImage.

    Je vous remercie d'avance pour toute réponse ou aide, je remercie également toute personne qui essayera de m'aider même s'elle ne me répond pas.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    il faudrait aussi voir le source du quickreport (dfm) .

    A mon avis il y a beaucoup de confusions/erreurs

    J'ai essayé avec les QRBand, mais il faut toujours laisser une marge en haut,
    de fait cela dépend des imprimantes, laisser des marges réduit le risque de perte de caractères à cause des marges de l'imprimante (sur certaines elles sont immuables)

    J'ai fait un programme qui imprime plusieurs QRCode sur la même page, pour cela j'ai utilisé une boucle qui parcoure la requête qui renvoie les éléments dont les QRCode doivent être générés.
    c'est donc 'un état détail simple' qu'il faut faire

    principes :
    poser un quickreport sur la forme
    clic droit sur ce quickreport puis options du menu Paramètre des l'Etat
    (C'est dans cet écran paramètres que l'on peut modifier les marges et donc par exemple les mettre à 0) , c 'est surtout,également ici que l'on indiquera le nombre de colonnes
    cocher ensuite , sur ce même écran , bande détail et indiquer la hauteur souhaitée
    appliquer et OK
    poser ensuite un QRdbtext et un QRImage
    Dans les propriétés du Quickreport , indiquer le dataset (ici ADOQuery4)
    propriété du QRDBText DataField=Num_Inventaire
    Datasource=ADOQuery4;
    soit dans l'evènement BeforePrint de la bande détail gérer l'image

    code fait à la volée
    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 TForm.Quickrep1Beforeprint
    ....
    begin
    ADOQuery4.Active:=false;  // au cas où déjà ouvert
    ADOQuery4.Active:=True;  // se repositionne au début
    end;
     
    procedure TForm1.DetailBand1BeforePrint(Sender : TQRCustomBand; var PrintBand : Boolean);
    var abmp : TBitmap;
    begin
      abmp:=TBitmap.Create;
      try
         ZintBarcodeComponent1.Barcode.Data:='N° d''inventaire : '+ADOQuery4.FieldByName('Num_Inventaire').AsString;
         ZintBarcodeComponent1.Barcode.Scale:=1;
         ZintBarcodeComponent1.Barcode.GetBarcode(bmp);
        //ci dessous , à vérifier c'est peut être un assign qu'il faut faire
        QRImage1.Picture.Bitmap:=abmp;   // on pourait même peut être se passer de abmp 
         // ZintBarcodeComponent1.Barcode.GetBarcode(QRImage1.Picture.Bitmap); à vérifier
      finally
        abmp.free;
     end;
    end;
    et voilà une édition de haut en bas et de gauche à droite , sauts de page gérés
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Points : 44
    Points
    44
    Par défaut Résolu
    Merci beaucoup pour votre aide, ça marche très bien.

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

Discussions similaires

  1. [VB] Passer à une nouvelle page
    Par Tunisiano87 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/11/2010, 18h38
  2. passer un parametre _get pour charger une nouvelle page
    Par samspitz dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 04/12/2008, 12h53
  3. Ouvrir un lien dans une nouvelle page
    Par freud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/11/2005, 15h20
  4. [CR10] Comment savoir si c'est une nouvelle page ?
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 23/09/2005, 19h18
  5. popup : ouverture d'une nouvelle page
    Par kikou33 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/08/2005, 18h07

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