⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usearep.pas

📁 企业进销存管理系统
💻 PAS
字号:
unit uSeaRep;

interface

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

type
  TF_SeaRep = class(TForm)
    QuickRep1: TQuickRep;
    QRBand1: TQRBand;
    QRLabel1: TQRLabel;
    QRBand2: TQRBand;
    QRBand3: TQRBand;
    PageFooterBand1: TQRBand;
    QRSysData1: TQRSysData;
    QRSysData2: TQRSysData;
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure QRBand3BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
  private
    { Private declarations }
    FQry : TQuery;
    FPSelR: Boolean; // 是否选取了记录的列印范围
    FRecord: array of integer;  // 要列印的记录号 (FPSelR 为 True 时才有值)
    FFieldCount: integer;     //要列印的栏位数目
    FField: array of integer; //要列印的栏位顺序
  public
    { Public declarations }
    qrlFieldName : array [0..12] of TQRLabel;
    qrdbtFData: array [0..12] of TQRDBText;
    Property FPQry: TQuery read FQry write FQry;
    procedure QRCreate;
  end;

var
  F_SeaRep: TF_SeaRep;
  nRec : integer;  (* 列印的记录号, 用於选取了列印的记录范围时 *)

procedure SearchRepExc(const RepQry: TQuery; PSelR: Boolean; PSelRang: array of integer);


implementation

{$R *.DFM}

procedure SearchRepExc(const RepQry: TQuery; PSelR: Boolean; PSelRang: array of integer);
var
  i : integer;
begin
  if RepQry = nil then begin
     Application.MessageBox(PChar('没有输入要列印的资料表!'),PChar('错误'),MB_ICONERROR+MB_OK);
     Exit;
  end;

  F_SeaRep := TF_SeaRep.Create(Application);
  With F_SeaRep do begin
    FPSelR := PSelR;
    FPQry := RepQry;
    QuickRep1.DataSet := FPQry;
    if FPSelR then begin       (* 若选取列印的是记录范围, 则取所有的栏位 *)
       FFieldCount := FPQry.FieldCount;
       SetLength(FField, FFieldCount);
       for i := 0 to FFieldCount-1 do FField[i] := i;
       (* 取得所选的记录号 *)
       SetLength(FRecord,High(PSelRang)+1);
       for i := 0 to High(PSelRang) do FRecord[i] := PSelRang[i];
    end
    else begin                 (* 若选取列印的是栏位范围, 则取所选的栏位 *)
       FFieldCount := High(PSelRang) + 1;
       SetLength(FField, FFieldCount);
       for i := 0 to High(PSelRang) do FField[i] := PSelRang[i];
    end;
    QuickRep1.Preview;
    Free;
  end;
end;



procedure TF_SeaRep.QRCreate;
var
  RWidth,
  nIdx: integer;
begin
  RWidth := Trunc(QRBand1.Width / (FFieldCount));
  for nIdx := 0 to FFieldCount-1 do begin
    qrlFieldName[nIdx] := TQRLabel.Create(F_SeaRep);
    qrdbtFData[nIdx] := TQRDBText.Create(F_SeaRep);
    with qrlFieldName[nIdx] do begin
      Parent := QRBand2;
      AutoSize := True;
      Top := 15;
      if nIdx = 0 then      begin
        Left := 0;
        Width := RWidth+6; end
      else begin
        Left := RWidth * nIdx + 6;
        Width := RWidth - 6;
      end;
      Font.Style := [fsBold];

      Caption := FPQry.Fields[FField[nIdx]].FieldName;


    end;  // end of with
    qrdbtFData[nIdx].Parent := QRBand3;
    qrdbtFData[nIdx].AutoSize := True;
    qrdbtFData[nIdx].Top := 8;
    qrdbtFData[nIdx].Left := qrlFieldName[nIdx].Left;
    qrdbtFData[nIdx].DataSet := FPQry;

    qrdbtFData[nIdx].DataField := qrlFieldName[nIdx].Caption;
    
  end;   // end of for
end;



procedure TF_SeaRep.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  QRCreate;
  nRec := 0;    // 初始化列印的记录号
end;

procedure TF_SeaRep.FormDestroy(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to FFieldCount-1 do begin
    qrlFieldName[i].Free;
    qrdbtFData[i].Free;
  end;
end;

procedure TF_SeaRep.QRBand3BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin                             
  if not FPSelR then exit;    // 若选取列印的是栏位范围, 则退出
  PrintBand := ((FPQry.RecNo-1) = FRecord[nRec]);  // 否则判断是否选取了该记录
  if PrintBand then Inc(nRec); 
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -