Impression Grid filtré

vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009 - 15 déc. 2008 à 14:44
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 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 ?

apprendre !

6 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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.

cantador
0
cs_jeanemarre Messages postés 5 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 24 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];

     TextOut(MargeLeft,MargeTop,PrtText);
     TextOut(MargeRight-TextWidth(StrDate),MargeTop,StrDate);
     y:=MargeTop+TextDown;

     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;

j'appelle cette procédure comme cela :

PrtDBGrid(tonDbGrid,'', tontitre)

J'espère que cela te fera avancer

Bon courage

Jeanemarre
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2008 à 22:19
La voie royale restant bien sûr l'état beaucoup plus souple et 
pouvant être agrémenté par des formes et des images.

cantador
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 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.  
0

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

Posez votre question
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
16 déc. 2008 à 08:58
au fait cantador

tu dis "La voie royale restant bien sûr l'état...." j'ai pas compris !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 déc. 2008 à 11:59
..............r)"'éà, a"prg ag) oahgoh=h)o('o h'a(oa'( okpp)////

sous entendu
c'est la meilleure alternative..

cantador
0
Rejoignez-nous