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