arsenejeff
Messages postés12Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention22 février 2007
-
26 janv. 2007 à 09:59
arsenejeff
Messages postés12Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention22 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.
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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.
arsenejeff
Messages postés12Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention22 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
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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);
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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).
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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.
arsenejeff
Messages postés12Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention22 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);
arsenejeff
Messages postés12Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention22 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!!!!!!!