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:
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.