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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| // ============================================================================
// Fonction échelle définissant les dimensions physiques du tableau imprimé
// ============================================================================
Function Echelle(R : integer; rapport : real) : integer;
begin
Echelle := round(R * rapport);
end;
// ============================================================================
// Procédure d'impression du tableau
// ============================================================================
procedure PrintGrid(SGrid: TStringGrid ; RF,CF: integer);
var
Nucol : Integer;
TR : TRect;
LargeurCol : array[0..25] of integer;
PosCol : array[0..25] of integer;
Nbligne : integer;
Pscale : integer;
PosLigne : Integer;
HauteurLigne : nteger;
PosDepart : integer;
rapport : real;
SautLigne : Integer;
margeGauche,
I : integer;
begin
margeGauche := 10;
rapport := 4; // définit le facteur d'échelle du tableau
// Calculer position et taille colonne en fonction de la destination
For Nucol := 0 to sGrid.Colcount - 1 do
LargeurCol[Nucol] := sGrid.ColWidths[Nucol]; // taille colonne
PosCol[0] := margeGauche;
For Nucol := 1 to sGrid.Colcount - 1 do
PosCol[Nucol] := PosCol[Nucol - 1] + sGrid.ColWidths[Nucol-1] - 1; // position des colonnes
For Nucol := 0 to sGrid.Colcount - 1 do // adapte le stringGrid à la destinatinon
begin
LargeurCol[Nucol] := Echelle(LargeurCol[Nucol], rapport);
posCol[Nucol] := Echelle(posCol[Nucol], rapport);
end;
For I := 1 to sGrid.Rowcount - 1 do
Sgrid.RowHeights[i] := Sgrid.RowHeights[i] + 2;
// Impression
printer.BeginDoc ;
with printer.canvas do
begin
// Imprimer le titre, puis le tableau
// D'abord le titre
Pen.Color := clBlack;
Font.Name := 'Arial';
Brush.Color := clwhite;
SautLigne := Sgrid.RowHeights[1];
Font.Height := -(Echelle(Sgrid.RowHeights[1] div 2, rapport));
PosDepart := SautLigne;
Font.Style := [fsBold, fsUnderline];
TextOut(Echelle(margeGauche * 2, rapport), Echelle(PosDepart, rapport), 'Titre');
// Puis le tableau
Font.Style := [];
PosLigne := PosDepart + SautLigne;
Pscale := PosLigne;
HauteurLigne := Pscale + Sgrid.RowHeights[1] + 1;
For Nbligne := 0 to sGrid.RowCount - 1 do // imprime le tableau ligne par ligne
begin
For Nucol := 0 to sGrid.ColCount - 1 do
begin
TR := Rect(PosCol[Nucol], Echelle(PosLigne, rapport), PosCol[Nucol] + LargeurCol[Nucol], Echelle(HauteurLigne, rapport));
TextRect(TR,PosCol[Nucol] + Echelle(4, rapport), Echelle(PosLigne, rapport) + Echelle(2, rapport), sGrid.Cells[Nucol,NbLigne]);
FrameRect(TR);
end;
PosLigne := HauteurLigne - 1;
HauteurLigne := PosLigne + Sgrid.RowHeights[Nbligne + 1];
end;
end;
Printer.EndDoc ;
For I:=0 to sGrid.Rowcount - 1 do
Sgrid.RowHeights[i] := Sgrid.RowHeights[i] - 2;
end; |
Partager