Impression du quadrillage d'un stringgrid

arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007 - 26 janv. 2007 à 09:59
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007 - 1 févr. 2007 à 11:23
Bonjour a tous je fait une apllication dans la quel a la fin je doit imprimer un "tableau" mais ils me faut obligatoirement que le quadrillage de la stringgrid qui aparet a l'écran se retrouve aussi sur la feuille une fois imprimer.

voila si vous avez un bout de code je suis prenneur.

a mon avis ca doit se jouer au niveau de l'impression et pas avant enfin je pense.

merci d'avance!!

12 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
26 janv. 2007 à 11:05
Salut,

L'impression avec Delphi se fait en dessinant sur le Canvas de "Printer" (déclaré dans unité printers).
exemple :
     with Printer do 
     begin
         BeginDoc;   // début impression
         Canvas.Font.Color:= clRed;
         Canvas.TextOut(300,300, 'Bonjour');
         EndDoc; // fin impression
     end;
Ainsi présenté, cela parait fort simple, mais il faut prendre en compte la résolution de l'imprimante, les dimensions de la page, le nombre de lignes par pages (pour faire un saut de page au bon moment), la hauteur d'une ligne compte tenu de la fonte employée + idéalement convertir les pixels en millimètres. En effet le TextOut(300,300...) imprimera le texte à un pouce du bord gauche (avec résolution imprimante 300 dpi) mais à 1/2 pouce du bord gauche (avec résolution 600dpi). 
Si tu n'es pas découragé par tout ce travail à faire, voici un lien qui explique très bien l'impression en Delphi. Il y a même le moyen de faire un aperçu avant impression.

http://alphomega.developpez.com/imprimer/

A +
Thierry   
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
26 janv. 2007 à 11:30
L'impression je la fait déja j'utilise un petit bout de code qui m'imprime toute se que je veut sauf qu'il doit y avoir un paramétre ou qqc d'autre pour imprimer le quadrillage du string grid.
mais les informations qui se trouve a l'intérieur du stringgrid je les imprimes bien me manque juste le quadrillage. :s

merci de ta reponsse .
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
26 janv. 2007 à 11:46
Je ne comprend pas ta notion de  "paramètre".
Puisque tu parles d'un code pour imprimer, c'est que tu travailles avec Printer.Canvas.
Donc sur ce canvas, tu dessines ce que tu veux... dont des lignes :
Canvas.MoveTo(300,300);
Canvas.LineTo(300,1000);

Thierry
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
26 janv. 2007 à 17:13
Oui escuse moi si je me suis mal exprimé.

oui j'utilise bien printer.canvas
je vais tt de suite tester cette solution avec
Canvas.MoveTo(300,300);
Canvas.LineTo(300,1000);

 merci ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
26 janv. 2007 à 17:55
Haaaaaaaaaaaaaaaaaa merci thWilliam
j'y arrive je pensse que je vait pourvoir y arrivé avec ca

ca fait pls depuis que je cherché :p
merci encore
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
29 janv. 2007 à 13:54
C'est bon j'ai réussit a imprimer tt mon quadrillage de stringgrid ca fait plaisir :p

thWilliam ou qq1 d'autre
peut'on changer l'épésseur des ligne ?

encore merci pour les réponses !!
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
29 janv. 2007 à 14:03
c'est bon j'ai parlé trop vite j'avais déja fait en plus
je donne la solution au cas ou qq1 voudrais
Printer.canvas.Pen.Width := 7  ;

voila merci a tous !!
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
29 janv. 2007 à 14:11
Salut,

Pour l'épaisseur des lignes :   Canvas.Pen.Width:2; // par défaut 1
Pour la couleur des lignes :
   Canvas.Pen.Color:= clRed;
A définir évidemment avant d'employer LineTo.
 
Remarque : vois si tu es satisfait de l'impression de grosses lignes, car Pen.Width a tendance à arrondir les bouts de la ligne. Sinon, autre solution, c'est de dessiner un rectangle (cfr aide Delphi : les méthodes 'Rectangle' et 'FillRect' de TCanvas).

A +
Thierry
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
30 janv. 2007 à 09:39
merci thWilliam tt marche bien pour mon quadrillage :)

aurait tu une idée mettre une couleur dans une colonne ( la grisée)

car j'y arrive mais tjr le même probléme a l'impression la couleur n'aparait pas!

merci d'avance ^^
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
30 janv. 2007 à 11:40
Salut.

La solution la plus simple :
var
  MyRect: TRect;

Canvas.Brush.Color:= clSilver;  // couleur du fond
Canvas.Font.Color:= clBlack;   // couleur du texte
MyRect:= Rect(100,100,300,200);
Canvas.TextRect(MyRect, 10, 20,  'Bonjour');

Pourquoi employer TextRect au lieu de TextOut ? pour avoir la couleur de fond sur toute la largeur de la colonne, et non pas uniquement sur la largeur du texte.
MyRect représente les coordonnées left,top,right,bottom de la "cellule" à imprimer.
Les coordonnées Left et Right ne changent pas pour la même colonne. Tu dois à chaque changement de ligne modifier Top et Bottom. 

A +
Thierry
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
1 févr. 2007 à 10:04
Bon voila mon dernier probleme ^^

je veut dans mon quadrillage que 2 colonne qui se situe au milieu n'apparaissent pas
donc dans ma boucle je dit que si la colonne est  =  18 alors
la couleur de mon crayon de dessin passe a blanc.
j'y arrive a le passé a blanc sauf que la ligne de droit de la colonne d'avant passe aussi en blanc :s

sa fait que les case de la colonne 17 ne sont pas fermer a droite.

je te met le bout de code et une tite imege pour mieux se rendre compte.
Bon j'arrive pas a mettre mon image je doit être mal dégourdit xD.
bref dit moi si tu voit de quoi je parle i si tu peut m'aider
merci d'avance^^

procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
var
 X1, X2 : Integer;
 Y1, Y2 : Integer;
 TmpI : Integer;
 F : Integer;
 TR : TRect;
begin
 Printer.Orientation := poLandscape;
 Printer.Title:=sTitle;
 Printer.BeginDoc;
 Printer.Canvas.Pen.Color:=0;
 Printer.Canvas.Font.Name:='Times New Roman';
 Printer.Canvas.Font.Size:=12;
 Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
 Printer.Canvas.TextOut(0, 0, Printer.Title);
{//------------------------------------------------------------------------------
Canvas.Brush.Color:= clSilver;  // couleur du fond
Canvas.Font.Color:= clBlack;   // couleur du texte
MyRect:= Rect(100,100,300,200);
Canvas.TextRect(MyRect, 10, 20,  'Bonjour');
}//------------------------------------------------------------------------------
 For F:=1 to sGrid.ColCount-1 do begin
   X1:=0;
   if F = 18 then
   Printer.Canvas.Pen.Color := $ffffff;
   Printer.Canvas.Brush.Color :=$C0C0C0;
      if F = 19 then
      Printer.Canvas.Pen.Color := $000000;
      Printer.Canvas.Brush.Color :=$ffffff;
          if F = 25 then
          Printer.Canvas.Pen.Color := $FFFFFF;
          Printer.Canvas.Brush.Color :=$C0C0C0;
               if F = 26 then
               Printer.Canvas.Pen.Color := $000000;
               Printer.Canvas.Brush.Color :=$ffffff;
   For TmpI:=1 to (F-1) do
     X1:=X1+5*(sGrid.ColWidths[TmpI]);
   Y1:=200;            //   Y1:=300;
   X2:=0;
   For TmpI:=1 to F do
     X2:=X2+5*(sGrid.ColWidths[TmpI]);
   Y2:=350;     //  Y2:=450;
   TR:=Rect(X1, Y1, X2-30, Y2);
   Printer.Canvas.Font.Style:=[fsBold];
   Printer.Canvas.Font.Size:=8;
   Printer.Canvas.TextRect(TR, X1+50, 250, sGrid.Cells[F, 0]);    //   250<<350
   Printer.Canvas.Font.Style:=[];
   Printer.canvas.Pen.Width := 7;       //épaisseur de la ligne
   Printer.Canvas.MoveTo(X1,Y1);          //1
   Printer.Canvas.LineTo(X2,Y1);
   Printer.Canvas.MoveTo(X1,Y1);          //2
   Printer.Canvas.LineTo(X1,Y2);
   Printer.Canvas.MoveTo(X2,Y2);          //3
   Printer.Canvas.LineTo(X2,Y1);
   //Printer.Canvas.MoveTo(X2,Y2);         //4
   //Printer.Canvas.LineTo(X1,Y2);
  
   For TmpI:=1 to sGrid.RowCount-1 do begin
     Y1:=140*TmpI + 200;                    //   Y1:=150*TmpI + 300;
     Y2:=140*(TmpI+1)+ 200;                 //    Y2:=150*(TmpI+1)+ 300;
     TR:=Rect(X1, Y1, X2-30, Y2);           //    TR:=Rect(X1, Y1, X2-30, Y2);
     Printer.Canvas.TextRect(TR, X1+50, Y1+25, sGrid.Cells[F, TmpI]);  //X1+50, Y1+50,
   Printer.Canvas.MoveTo(X1,Y1);          //1
   Printer.Canvas.LineTo(X2,Y1);
   Printer.Canvas.MoveTo(X1,Y1);          //2
   Printer.Canvas.LineTo(X1,Y2);
   Printer.Canvas.MoveTo(X2,Y2);          //3
   Printer.Canvas.LineTo(X2,Y1);
   Printer.Canvas.MoveTo(X2,Y2);          //4
   Printer.Canvas.LineTo(X1,Y2);
   end;
 end;
 Printer.EndDoc;
end;
0
arsenejeff Messages postés 12 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 22 février 2007
1 févr. 2007 à 11:23
Hééééééééééééééééééééé

c bon j'ai trouvé j'ai juste dit que quand il arrive a la colonne 18 il ne face rien
et ca marche
Ralala fini mon apllication ca fait plaisirrrrrrrrrrrrrrrrrrrrr!!!!!!!

encore merci pour ton aide thWilliam
0
Rejoignez-nous