Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi StringGrid im QuickReport (https://www.delphipraxis.net/14191-stringgrid-im-quickreport.html)

Moin34 4. Jan 2004 13:57


StringGrid im QuickReport
 
Moin,

und ein frohes neues

ich beschäftige mich erst seit kurzem mit delphi und stehe da neben den 100 anderen fragen einer besonders gegenüber...

kann ich einen stringgrid 1 zu 1 in einem quickreport anzeigen und ausdrucken lassen ?

wenn ja....wie ?

:gruebel:

kiar 4. Jan 2004 14:01

Re: StringGrid im QuickReport
 
wie es mit qquickreport geht kann ich dir nicht sagen, aber stringgrid drucken in google hat mit 187 vorschläge gebracht und manche sehr gute

MrSpock 5. Jan 2004 16:45

Re: StringGrid im QuickReport
 
Hallo Moin34,

du kannst dir qrShape Komponenten nehmen und daraus aus Rechtecken eine Zeile des Stringgrids mit den entsprechenden qrDBText Komponenten aufbauen. Dann wird automatisch ein Grid draus, wenn du den Rahmen direkt an die Unter- und Oberkante des Detailbandes ausrichtest.

Moin34 5. Jan 2004 17:14

Re: StringGrid im QuickReport
 
Moin,

mal wieder das ging ja fix....
ich bedank mich ersteinmal für die schnellen antworten...
werde es mal ausprobieren.

wenn ich dem gleich eine kurze frage hinterherschieben darf...

wie sag ich dem "detail" das er für die nächste seite einen neuen detail-bereich machen soll ??

wie gesagt ich beschäftige mich erst seit kurzem mir delphi...

danke mal wieder..

Gruss

MrSpock 5. Jan 2004 17:59

Re: StringGrid im QuickReport
 
Hallo Moin34,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum (hatte ich beim vorigen Post vergessen zu erwähnen).

Wenn du die Datasource Eigenschaft des Reports auf die darzustellende Datenmenge verweisen lässt, kümmert sich Quickreport selbst darum, dass für jeden datensatz ein Detaiband gedruckt wird.

Moin34 5. Jan 2004 21:08

Re: StringGrid im QuickReport
 
Mh,... :gruebel:

ja, :stupid: , nicht das ich nun viel schlauer bin... aber probieren....

thanks for help

Moin34 10. Jan 2004 17:42

Re: StringGrid im QuickReport
 
Hallo,

danke auch für deine Hilfe Mr.Spock.

Dank des Forums und ein wenig Spielerei bin ich nun schon ein wenig weitergekommen.

Was mir aber noch zu schaffen macht, ist das darstellen von mehreren zeilen des
stringGrid´s im detailbereich des QuickReportes :

Ich Versuche es auf diese Weise :


q1.Caption := form1.KStringgrid1.Cells [1,z1];
q2.Caption := form1.KStringgrid1.Cells [2,z1];
q3.Caption := form1.KStringgrid1.Cells [3,z1];
q4.Caption := form1.KStringgrid1.Cells [4,z1];
q5.Caption := form1.KStringgrid1.Cells [5,z1];
q6.Caption := form1.KStringgrid1.Cells [6,z1];
q7.Caption := form1.KStringgrid1.Cells [7,z1];

q1 - q7 sind die Felder im Detailbereiches des Report, die nummern der spalten, z1 die zeile im form1 als variabe.


Die 1.Zeile wir dim Report auch dargestellt, bin ich damit etwa auf dem Falschen weg... ?

Was man hier im Forum findet muss doch auch ohne Printer.Canvas für den Detailbereich zu machen sein, oder ?

Vielleicht sollte ich dem noch hinzufügen das ich keine Datasource verwende...

MrSpock 11. Jan 2004 20:28

Re: StringGrid im QuickReport
 
Hallo Moin34,

kommen die Daten gar nicht aus einer Datenbank?

In diesem Fall musst du die OnNeedData Methode schreiben, die immer aufgerufen wird, wenn die nächste Detailzeile gedruckt werden soll.

grayfox 12. Jan 2004 00:40

Re: StringGrid im QuickReport
 
hallo moin!

versuch es mal so....

Code:
unit Mainprog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    EndeBtn: TButton;
    BitBtn1: TBitBtn;
    Grid1: TStringGrid;
    procedure EndeBtnClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses PrintDlgFrm;

{$R *.DFM}

procedure TForm1.EndeBtnClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  aWindowState: TWindowState;
begin
  aWindowState:= WindowState;
  try
    PrintFrm:= TPrintFrm.Create(self);
    PrintFrm.Init(Grid1);
    PrintFrm.QuickRep1.Preview;
  finally
    if PrintFrm <> nil then
      PrintFrm.Free;
    WindowState:= aWindowState;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
var
  aRow: ShortInt;
begin
  with Grid1 do begin
    Colwidths[0]:= 20;
    Colwidths[1]:= 80;
    Colwidths[2]:= 80;
    Colwidths[3]:= 80;
    Colwidths[4]:= 80;
    Cells[0,0]:= 'lfdNr';
    Cells[1,0]:= 'Art_Sorte';
    Cells[2,0]:= 'Art_Gruppe';
    Cells[3,0]:= 'Inhalt';
    Cells[4,0]:= 'Preis';
    for aRow:= 1 to RowCount-1 do begin
      Cells[0,aRow]:= IntToStr(aRow);
      Cells[1,aRow]:= 'Artikel ' + IntToStr(10000 + aRow);
      if (aRow mod 2) = 0 then
        Cells[2,aRow]:= 'Wein'
      else
        Cells[2,aRow]:= 'Sekt';
      Cells[3,aRow]:= '0,75 l';
      Cells[4,aRow]:= FloatToStr(4.20 + aRow);
    end;
  end;
end;

end.


------------------------------------------------------------------------------------------------

unit PrintDlgFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, QuickRpt, Qrctrls, Grids;

type
  TPrintFrm = class(TForm)
    QuickRep1: TQuickRep;
    PageFooterBand1: TQRBand;
    DetailBand1: TQRBand;
    PageHeaderBand1: TQRBand;
    QRLabel1: TQRLabel;
    QRLabel2: TQRLabel;
    QRLabel3: TQRLabel;
    QRLabel4: TQRLabel;
    QRSysData1: TQRSysData;
    QRLabel5: TQRLabel;
    ColumnHeaderBand1: TQRBand;
    QRLabel6: TQRLabel;
    QRLabel7: TQRLabel;
    QRLabel8: TQRLabel;
    QRLabel9: TQRLabel;
    QRLabel10: TQRLabel;
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
     ZeileNr: integer;
     maxZeilen: integer;
     maxSeiten: integer;
     aGrid: TStringGrid;
  public
    { Public-Deklarationen }
    procedure Init(DGrid: TStringGrid);
  end;

var
  PrintFrm: TPrintFrm;

implementation

{$R *.DFM}

procedure TPrintFrm.Init(DGrid: TStringGrid);
begin
  aGrid:= TStringGrid.Create(self);
  aGrid:= dGrid;
  maxZeilen:= aGrid.RowCount;
  QuickRep1.Prepare;
  maxSeiten:= QuickRep1.PageNumber;
  qrLabel10.Caption:= ' von ' + IntToStr(maxSeiten) + ' Seiten'
end;


procedure TPrintFrm.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  ZeileNr:= 0;
end;


procedure TPrintFrm.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  MoreData:= (ZeileNr < maxZeilen);
  if MoreData then begin
    QRLabel2.Caption:= aGrid.Cells[0,ZeileNr+1];
    QRLabel3.Caption:= aGrid.Cells[1,ZeileNr+1];
    QRLabel4.Caption:= aGrid.Cells[2,ZeileNr+1];
    QRLabel5.Caption:= aGrid.Cells[3,ZeileNr+1]
  end;
  inc(ZeileNr)
end;

procedure TPrintFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if aGrid <> nil then
    aGrid.Free;
end;

end.
damit sollte dein stringgrid problemlos ausgedruckt werden

mfg, stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz