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

📄 cgridrep.pas

📁 TGridRep Component (1.0) -- by WeiYF, 2000.06.15 该组件实现网格模式的QuickRpt报表打印组件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
procedure TGridRep.SetPageFooter(value: string);
begin
  if (value<>FPageFooterLabel.Caption) then FPageFooterLabel.Caption := value;
end;

procedure TGridRep.SetPageHeaderFont(value: TFont);
begin
  FPageHeaderFont.Assign(value);
end;

procedure TGridRep.SetPageTitleFont(value: TFont);
begin
  FPageTitleFont.Assign(value);
end;

procedure TGridRep.PageHeaderFontChanged(Sender: TObject);
begin
  FPageHeaderLabel.Font := FPageHeaderFont;
end;

procedure TGridRep.PageTitleFontChanged(Sender: TObject);
begin
  FPageTitleLabel.Font := FPageTitleFont;
end;

procedure TGridRep.ColHeaderFontChanged(Sender: TObject);
var i: integer;
begin
  for i:=0 to MAX_COL_NUM-1 do begin
    FColHeaderLabels[i].Font := FColHeaderFont;
  end;
end;

procedure TGridRep.PageFooterFontChanged(Sender: TObject);
begin
  FPageFooterLabel.Font := FPageFooterFont;
end;

procedure TGridRep.PageNoFontChanged(Sender: TObject);
begin
  FPageNoLabel.Font := FPageNoFont;
end;

procedure TGridRep.PageTimeFontChanged(Sender: TObject);
begin
  FPageTimeLabel.Font := FPageTimeFont;
end;

procedure TGridRep.ChangeColDetailBand(iCol: integer);
begin
  FColDetailLabels[iCol].Font := FColDetailFonts[iCol];
end;

procedure TGridRep.ColDetail00FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(0);
end;

procedure TGridRep.ColDetail01FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(1);
end;

procedure TGridRep.ColDetail02FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(2);
end;

procedure TGridRep.ColDetail03FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(3);
end;

procedure TGridRep.ColDetail04FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(4);
end;

procedure TGridRep.ColDetail05FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(5);
end;

procedure TGridRep.ColDetail06FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(6);
end;

procedure TGridRep.ColDetail07FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(7);
end;

procedure TGridRep.ColDetail08FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(8);
end;

procedure TGridRep.ColDetail09FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(9);
end;

procedure TGridRep.ColDetail10FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(10);
end;

procedure TGridRep.ColDetail11FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(11);
end;

procedure TGridRep.ColDetail12FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(12);
end;

procedure TGridRep.ColDetail13FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(13);
end;

procedure TGridRep.ColDetail14FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(14);
end;

procedure TGridRep.ColDetail15FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(15);
end;

procedure TGridRep.ColDetail16FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(16);
end;

procedure TGridRep.ColDetail17FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(17);
end;

procedure TGridRep.ColDetail18FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(18);
end;

procedure TGridRep.ColDetail19FontChanged(Sender: TObject);
begin
  ChangeColDetailBand(19);
end;

procedure TGridRep.SetColHeaderFont(value: TFont);
begin
  FColHeaderFont.Assign(value);
end;

function TGridRep.GetColDetailFonts(index: integer): TFont;
begin
  result := FColDetailFonts[index];
end;

procedure TGridRep.SetColDetailFonts(index: integer; value: TFont);
begin
  FColDetailFonts[index].Assign(value);
end;

procedure TGridRep.SetPageFooterFont(value: TFont);
begin
  FPageFooterFont.Assign(value);
end;

procedure TGridRep.SetPageNoFont(value: TFont);
begin
  FPageNoFont.Assign(value);
end;

function TGridRep.GetColLengths(index: integer): integer;
begin
  result := FColLengths[index];
end;

procedure TGridRep.SetColLengths(index: integer; value: integer);
begin
  FColLengths[index] := QR.TextWidth(FColHeaderLabels[index].Font,
         Copy(sSample,1,value)) +4-COL_SID_SIZ;
end;

function TGridRep.GetColAligns(index: integer): TAlignment;
begin
  result := FColAligns[index];
end;

procedure TGridRep.SetColAligns(index: integer; value: TAlignment);
begin
  if (FColAligns[index] <> value) then begin
    FColAligns[index] := value;
    FColHeaderLabels[index].Alignment := FColAligns[index];
    FColDetailLabels[index].Alignment := FColHeaderLabels[index].Alignment;
  end;
end;

procedure TGridRep.InitGridRep(iColCnt:integer; bHavingGrid: boolean);
var
  i,w,iLeft,hh : integer;
begin
  iColCount := iColCnt;
  if (iColCount<=0) then iColCount := 1;

  bGrid := bHavingGrid;
  with ColumnHeaderBand do begin
    Frame.DrawTop := bGrid;//False;
    Frame.DrawBottom := bGrid;//False;
    Frame.DrawLeft := bGrid;//False;
    Frame.DrawRight := bGrid;//False;
  end;
  with ColDetailBand do begin
    Frame.DrawLeft := bGrid;//False;
    Frame.DrawRight := bGrid;//False;
  end;

  for i:=iColCount to MAX_COL_NUM-1 do begin
    FColHeaderLabels[i].Enabled := false;
    FColDetailLabels[i].Enabled := FColHeaderLabels[i].Enabled;
    FColHeaderLines[i].Enabled := false;
    FColDetailLines[i].Enabled := FColHeaderLines[i].Enabled;
  end;
  iLeft := 0;
  for i:=0 to iColCount-1 do begin
    FColHeaderLabels[i].Enabled := true;
    FColDetailLabels[i].Enabled := FColHeaderLabels[i].Enabled;

    if (FColLengths[i]>0) then w := FColLengths[i]
    else w := ColDetailBand.Width div iColCount;
    FColHeaderLabels[i].Left := iLeft+COL_SID_SIZ;
    FColDetailLabels[i].Left := FColHeaderLabels[i].Left;
    iLeft := iLeft+w;

    FColHeaderLabels[i].Width := w-COL_SID_SIZ;
    FColDetailLabels[i].Width := FColHeaderLabels[i].Width;

    FColHeaderLines[i].Enabled := bGrid;
    FColDetailLines[i].Enabled := FColHeaderLines[i].Enabled;
    FColHeaderLines[i].Left := FColHeaderLabels[i].Left-2;
    FColDetailLines[i].Left := FColHeaderLines[i].Left;

    FColHeaderLabels[i].Alignment := FColAligns[i];
    FColDetailLabels[i].Alignment := FColHeaderLabels[i].Alignment;
  end;
  FColHeaderLines[0].Enabled := false;
  FColDetailLines[0].Enabled := FColHeaderLines[0].Enabled;

  hh := FPageHeaderLabel.Height;
  if (hh<FPageNoLabel.Height) then hh := FPageNoLabel.Height;
  PageHeaderBand.Height := hh+8;
  TitleBand.Height := FPageTitleLabel.Height+8;
  hh := FPageFooterLabel.Height;
  if (hh<FPageTimeLabel.Height) then hh := FPageTimeLabel.Height;
  PageFooterBand.Height := hh+8;

  hh := 0;
  for i:=0 to iColCount-1 do
    if (hh<FColDetailLabels[i].Height) then hh := FColDetailLabels[i].Height;
  ColDetailBand.Height := hh+ROW_TOP_SIZ+2;
  FColDetailBottomLine.Top := ColDetailBand.Height-1;
  for i:=0 to MAX_COL_NUM-1 do
    FColDetailLines[i].Height := ColDetailBand.Height;
  FColDetailBottomLine.Enabled := bGrid;

  ColumnHeaderBand.Height := FColHeaderLabels[0].Height+ROW_TOP_SIZ;
  for i:=0 to MAX_COL_NUM-1 do
    FColHeaderLines[i].Height := ColumnHeaderBand.Height;

  for i:=0 to iColCount-1 do FColLengths[i] := 0;
end;

procedure TGridRep.ShowPreview(cID: char; iColCnt:integer; bHavingGrid: boolean);
begin
  iPreview := 0;
  iRowCount := 0;
  iPageCount := 0;
  cGridID := cID;
  InitGridRep(iColCnt,bHavingGrid);

  //QR.ReportTitle := '打印控件';
  //有些打印机上打不了的原因
  QR.PreviewModal;
end;

procedure TGridRep.HandleNeedData(Sender: Tobject; var MoreData: boolean);
var
  i: integer;
  sTmp: string;
  bTmp: boolean;
begin
  if Assigned(FOnNeedData)=true then begin
     for i:=0 to iColCount-1 do begin
       FOnNeedData(self,cGridID,i,iRowCount+1,sTmp,bTmp);// cID: char; iCol,iRow: integer;
       FColDetailLabels[i].Caption := sTmp;
     end;
     MoreData := bTmp;
     if (MoreData) then iRowCount := iRowCount+1;
  end;
end;

procedure TGridRep.HandleAfterPreview(Sender: Tobject);
begin
  //iRowCount := 0;
end;

procedure TGridRep.HandleBeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean);
begin
  iRowCount := 0;
  iPreview := iPreview+1;
end;

procedure TGridRep.HandleStartPage(Sender: TCustomQuickRep);
begin
  if (bChinese) then
    FPageTimeLabel.Caption := FormatDateTime('yyyy/mm/dd hh:nn', Now)+'   打印'
  else FPageTimeLabel.Caption := FormatDateTime('yyyy/mm/dd hh:nn:ss', Now);
  if (iPreview<2) then begin
    if (bChinese) then
      FPageNoLabel.Caption := '第'+IntToStr(Sender.PageNumber)+'页'
    else FPageNoLabel.Caption := 'Page '+IntToStr(Sender.PageNumber);
    iPageCount := iPageCount+1;
  end
  else begin
    if (bChinese) then
      FPageNoLabel.Caption := '第'+IntToStr(Sender.PageNumber)+'页'+'   '
                          +'共'+IntToStr(iPageCount)+'页'
    else FPageNoLabel.Caption := 'Page ' + IntToStr(Sender.PageNumber)
                          +'/'+IntToStr(iPageCount);
  end;
end;

end.

⌨️ 快捷键说明

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