델파이4, 퀵레포트3.0.3, 윈98을 쓰고
자료값은 db에서 부르는게 아니라 소켓을 통해 받은값을 바로 스트링그리드에 뿌려주고
그값을 퀵레포트를 통해 보여주고 있습니다.
//스트링 그리드를 레포트로 출력하기
procedure TFmReportFormat.StringGridQReport(GRD:TStringGrid; Title:String);
var
i,j, Fcnt, Rcnt, margin : Integer;
QRSGval : Array of TQRLabel ;
DetailBand, FooterBand : TQRBand;
begin
Fcnt := GRD.ColCount ;
Rcnt := GRD.RowCount ;
SetLength(QRSGval,Fcnt);
QRtitle.Caption := Title ;
DetailBand := TQRBand.Create(FmReportFormat);
DetailBand.Parent := QuickRep;
DetailBand.BandType := rbDetail;
DetailBand.Size.Height := 4;
FooterBand := TQRBand.Create(FmReportFormat);
FooterBand.Parent := QuickRep;
FooterBand.BandType := rbPageFooter;
FooterBand.Frame.DrawTop := TRUE;
FooterBand.Size.Height := 1;
QRLabel.Caption := '총 건수 : ' + intTostr(Rcnt - 2);
for i := 0 to Rcnt -1 do
begin
margin := 5 ;
for j:= 0 to fcnt -1 do
begin
if i = 0 then
begin
DetailBand.Frame.DrawTop := TRUE;
DetailBand.Frame.DrawBottom := TRUE;
DetailBand.Size.Height := 5;
end;
if i = 50 then QuickRep.NewPage;
QRSGval[j] := TQRLabel.Create(FmReportFormat);
QRSGval[j].Parent := DetailBand ;
QRSGval[j].Caption := GRD.Cells[j,i] ;
QRSGval[j].Top := i * 15 ;
QRSGval[j].Left := margin ;
margin := margin + GRD.ColWidths[j] + 5 ;
end;
end;
FmDisplayReport := TFmDisplayReport.create(application);
FmDisplayReport.Show;
QuickRep.preview;
end;
이와같이 하는데 값이 a4용지 한장만 출력되고 그다음에는 나오지 않습니다.
아마도 db를 안써고 라벨에다가 바로 값을 뿌려줘서 그러는것 같은데
그럴경우 newpage라는 함수를 써서 다음장에 값을 보여주고 싶은데
어떻게 써야하는지 모르겠습니다.
많은 도움바랍니다.
아마 아래소스는 퀴리포드 중에서 before print 이벤트나 before previwe 이벤트에
서 처리하면 아래 소스로도 다음 페이지에 출력이 됩니다.
오정섭 wrote:
> 델파이4, 퀵레포트3.0.3, 윈98을 쓰고
> 자료값은 db에서 부르는게 아니라 소켓을 통해 받은값을 바로 스트링그리드에 뿌려주고
> 그값을 퀵레포트를 통해 보여주고 있습니다.
>
> //스트링 그리드를 레포트로 출력하기
> procedure TFmReportFormat.StringGridQReport(GRD:TStringGrid; Title:String);
> var
> i,j, Fcnt, Rcnt, margin : Integer;
> QRSGval : Array of TQRLabel ;
> DetailBand, FooterBand : TQRBand;
> begin
> Fcnt := GRD.ColCount ;
> Rcnt := GRD.RowCount ;
>
> SetLength(QRSGval,Fcnt);
> QRtitle.Caption := Title ;
>
> DetailBand := TQRBand.Create(FmReportFormat);
> DetailBand.Parent := QuickRep;
> DetailBand.BandType := rbDetail;
> DetailBand.Size.Height := 4;
>
> FooterBand := TQRBand.Create(FmReportFormat);
> FooterBand.Parent := QuickRep;
> FooterBand.BandType := rbPageFooter;
> FooterBand.Frame.DrawTop := TRUE;
> FooterBand.Size.Height := 1;
> QRLabel.Caption := '총 건수 : ' + intTostr(Rcnt - 2);
>
> for i := 0 to Rcnt -1 do
> begin
> margin := 5 ;
> for j:= 0 to fcnt -1 do
> begin
> if i = 0 then
> begin
> DetailBand.Frame.DrawTop := TRUE;
> DetailBand.Frame.DrawBottom := TRUE;
> DetailBand.Size.Height := 5;
> end;
> if i = 50 then QuickRep.NewPage;
> QRSGval[j] := TQRLabel.Create(FmReportFormat);
> QRSGval[j].Parent := DetailBand ;
> QRSGval[j].Caption := GRD.Cells[j,i] ;
> QRSGval[j].Top := i * 15 ;
> QRSGval[j].Left := margin ;
> margin := margin + GRD.ColWidths[j] + 5 ;
> end;
> end;
> FmDisplayReport := TFmDisplayReport.create(application);
> FmDisplayReport.Show;
> QuickRep.preview;
> end;
>
> 이와같이 하는데 값이 a4용지 한장만 출력되고 그다음에는 나오지 않습니다.
> 아마도 db를 안써고 라벨에다가 바로 값을 뿌려줘서 그러는것 같은데
> 그럴경우 newpage라는 함수를 써서 다음장에 값을 보여주고 싶은데
> 어떻게 써야하는지 모르겠습니다.
> 많은 도움바랍니다.