vladocb
Messages postés29Date d'inscriptionjeudi 1 juin 2006StatutMembreDernière intervention15 février 2009
-
15 déc. 2008 à 14:44
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
16 déc. 2008 à 11:59
bonjour tout le monde
et un rebonjour particulier a cantador , sans oublier delphiprog qui ne s'est pas encore manifesté comme il a promis !
bref !
voila j'ai un DBGrid a qui j'applique des filtre et je voudrai faire une impression pour chaque résultat d'un filtre , ma question est : comment faire ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 15 déc. 2008 à 16:52
bonsoir,
Pour l'impression, il existe un composant qui permet d'imprimer la copie d'écran directe :
TdxComponentPrinter, mais il n'est pas free..
En dehors de cet exemple, tu peux aussi créer un état avec QuickReport ou RaveReport et introduire des composants DB qui exécuteront la même requête filtrée et reproduiront la liste de tes enregistrements.
Tu peux également faire une exportation dans un fichier (.csv) par SaveToFile
qui s'ouvrira très bien sous EXCEL.
cs_jeanemarre
Messages postés5Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention24 avril 2010 15 déc. 2008 à 21:15
Bonsoir,
Pour imprimer simplement un dbgrid j'utilise cette procédure, trouvée me semble-t-il sur ce site :
Procedure Tform5.PrtDBGrid(Grid:TDBGrid; PrtTitle, PrtText:string);
Type
TCols=Array[0..20] of integer;
Var
Rapport:Integer;
// r:longint;
c:longint;
cols:^TCols;
y:integer;
MargeLeft,Margetop,MargeRight:integer;
StrDate:String;
TextDown:integer;
Procedure VerticalLines;
Var
c:LongInt;
begin
With Printer.Canvas do begin
For c:=0 to Grid.FieldCount-1 do begin
MoveTo(Cols^[c],MargeTop+TextDown);
LineTo(Cols^[c],y);
end;
MoveTo(MargeRight,MargeTop+TextDown);
LineTo(MargeRight,y);
end;
end;
Procedure PrintTitles;
Var
c:longint;
begin
With Printer.Canvas do begin
For c:=0 to Grid.FieldCount-1 do TextOut(Cols^[c]+10,y+10,Grid.Columns[c].Title.Caption);
inc(y,TextDown);
MoveTo(MargeLeft,y); LineTo(MargeRight,y);
end;
end;
Procedure PrintRow;//(r:longint);
Var
c:longint;
begin
With Printer.Canvas do begin
For c:=0 to Grid.FieldCount-1 do TextOut(Cols^[c]+10,y+10,Grid.Fields[c].AsString);
inc(y,TextDown);
MoveTo(MargeLeft,y); LineTo(MargeRight,y);
end;
end;
Procedure Entet;
begin
With Printer.Canvas do begin
Font.Style:=[fsBold];
Brush.Color:=clSilver;
FillRect(Rect(MargeLeft,y,MargeRight,y+TextDown));
MoveTo(MargeLeft,y); LineTo(MargeRight,y);
PrintTitles;//Row(0);
Brush.Color:=clWhite;
Font.Style:=[];
end;
end;
begin
Screen.Cursor:=crHourGlass;
GetMem(Cols,Grid.FieldCount*SizeOf(Integer));
StrDate:='Imprimé le '+DateToStr(Date);
With Printer do begin
Rapport:=PageWidth div Grid.Width;
Title:=PrtTitle;
BeginDoc;
With Canvas do begin
Font:=Grid.Font;
TextDown:=TextHeight(StrDate)*3 div 2;
end;
MargeLeft:=PageWidth div 25;
MargeTop :=PageHeight div 25;
MargeRight:=PageWidth-MargeLeft;
{ calcul des Cols }
Cols^[0]:=MargeLeft;
For c:=1 to Grid.FieldCount-1 do begin
Cols^[c]:=Cols^[c-1]+Grid.Columns[c-1].Width*Rapport;
end;
Entet;
Grid.DataSource.DataSet.First;
While not Grid.DataSource.DataSet.EOF do begin
// For r:=1 to Grid.DataSource.DataSet.RecordCount-1 do begin
PrintRow;//(r);
if y>=(PageHeight-MargeTop) then begin
VerticalLines;
NewPage;
Entet;
end;
Grid.DataSource.DataSet.Next;
end;
VerticalLines;
EndDoc;
end;
FreeMem(Cols);
Screen.Cursor:=crDefault;
end;
vladocb
Messages postés29Date d'inscriptionjeudi 1 juin 2006StatutMembreDernière intervention15 février 2009 16 déc. 2008 à 08:54
merci pour vos réponses
j'appliquerai , et je vous mettrai au courant !
pardonnez mon retard a vous répondre, puisque je ne programmes pas au bureau, je le fais comme passion at home, comme je suis un informaticien de l'ancienne génération (Clliper, Dbase, TurboPascal...) alors j'essaies de me mettre a niveau grace a vous, les membres de Delphifr.
merci encore.
Vous n’avez pas trouvé la réponse que vous recherchez ?