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

📄 rm_formreport.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 5 页
字号:
end;

procedure TRMGridNumOptions.SetNumber(Value: Integer);
begin
  if Value >= 0 then
    FNumber := Value;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMScaleOptions}

constructor TRMScaleOptions.Create;
begin
  inherited Create;
  FCenterOnPageH := False;
  FCenterOnPageV := False;
  FFitPageWidth := False;
  FFitPageHeight := False;
  FScaleMode := rmsmAdjust;
  FScaleFactor := 100;
end;

procedure TRMScaleOptions.Assign(Source: TPersistent);
begin
  inherited Assign(Source);
  CenterOnPageH := TRMScaleOptions(Source).CenterOnPageH;
  CenterOnPageV := TRMScaleOptions(Source).CenterOnPageV;
  FitPageWidth := TRMScaleOptions(Source).FitPageWidth;
  FitPageHeight := TRMScaleOptions(Source).FitPageHeight;
  ScaleMode := TRMScaleOptions(Source).ScaleMode;
  ScaleFactor := TRMScaleOptions(Source).ScaleFactor
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMGroupItem}

constructor TRMGroupItem.Create(Collection: TCollection);
begin
  inherited Create(Collection);
  FFormNewPage := False;
end;

procedure TRMGroupItem.Assign(Source: TPersistent);
begin
  if Source is TRMGroupItem then
  begin
  end
  else
    inherited Assign(Source);
end;

function TRMGroupItem.GetReport: TComponent;
begin
  if Assigned(Collection) and (Collection is TRMGroupItems) then
    Result := TRMGroupItems(Collection).Report
  else
    Result := nil;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMGroupItems}

constructor TRMGroupItems.Create(aReport: TComponent);
begin
  inherited Create(TRMGroupItem);
  FReport := aReport;
end;

function TRMGroupItems.Add: TRMGroupItem;
begin
  Result := TRMGroupItem(inherited Add);
end;

function TRMGroupItems.GetItem(Index: Integer): TRMGroupItem;
begin
  Result := TRMGroupItem(inherited GetItem(Index));
end;

procedure TRMGroupItems.SetItem(Index: Integer; Value: TRMGroupItem);
begin
  inherited SetItem(Index, Value);
end;

function TRMGroupItems.GetOwner: TPersistent;
begin
  Result := FReport;
end;

procedure TRMGroupItems.Update(Item: TCollectionItem);
begin
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMMasterDatalBandOptions}

constructor TRMMasterDataBandOptions.Create;
begin
  inherited Create;
  FLinesPerPage := 0;
  FColumns := 1;
  FColumnWidth := 200;
  FColumnGap := 20;
  FNewPageAfter := False;
  FHeight := -1;
end;

procedure TRMMasterDataBandOptions.Assign(Source: TPersistent);
begin
  inherited Assign(Source);
  LinesPerPage := TRMMasterDataBandOptions(Source).LinesPerPage;
  Columns := TRMMasterDataBandOptions(Source).Columns;
  ColumnWidth := TRMMasterDataBandOptions(Source).ColumnWidth;
  ColumnGap := TRMMasterDataBandOptions(Source).ColumnGap;
  FNewPageAfter := TRMMasterDataBandOptions(Source).NewPageAfter;
  FHeight := TRMMasterDataBandOptions(Source).Height;
  FReprintColumnHeaderOnNewColumn := TRMMasterDataBandOptions(Source).ReprintColumnHeaderOnNewColumn;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMGridFontOptions}

constructor TRMGridFontOptions.Create;
begin
  inherited Create;
  FUseCustomFontSize := False;
  FFont := TFont.Create;
end;

destructor TRMGridFontOptions.Destroy;
begin
  FFont.Free;
  inherited Destroy;
end;

procedure TRMGridFontOptions.Assign(Source: TPersistent);
begin
  inherited Assign(Source);
  FUseCustomFontSize := TRMGridFontOptions(Source).FUseCustomFontSize;
  Font.Assign(TRMGridFontOptions(Source).Font);
end;

procedure TRMGridFontOptions.SetFont(Value: TFont);
begin
  FFont.Assign(Value);
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMPageAggr }

procedure TRMPageAggr.Assign(Source: TPersistent);
begin
  inherited Assign(Source);
  if Source is TRMPageAggr then
  begin
    FAutoTotal := TRMPageAggr(Source).AutoTotal;
    FTotalFields := TRMPageAggr(Source).TotalFields;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}

constructor TRMGridPageAggrOptions.Create;
begin
  inherited Create;
  FPageSum := TRMPageAggr.Create;
  FPageSumTotal := TRMPageAggr.Create;
end;

destructor TRMGridPageAggrOptions.Destroy;
begin
  FPageSum.Free;
  FPageSumTotal.Free;
  inherited Destroy;
end;

procedure TRMGridPageAggrOptions.Assign(Source: TPersistent);
begin
  inherited Assign(Source);
  if Source is TRMPageAggr then
  begin
    FPageSum.Assign(TRMGridPageAggrOptions(Source).PageSum);
    FPageSumTotal.Assign(TRMGridPageAggrOptions(Source).PageSumTotal);
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMReportSettings }

constructor TRMReportSettings.Create;
begin
  inherited;
  FShowProgress := True;
  FInitialZoom := pzDefault;
  FPreviewButtons := [pbZoom, pbLoad, pbSave, pbPrint, pbFind, pbPageSetup, pbExit];
  FShowPrintDialog := True;
  FModifyPrepared := False;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMCustomGridReport }

constructor TRMCustomGridReport.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FReport := nil;
  FAutoBooleanString := '';
  FGridFixedCols := 0;
  FReportOptions := [rmgoStretch, rmgoWordWrap, rmgoGridLines];

  FReportSettings := TRMReportSettings.Create;
  FGroups := TRMGroupItems.Create(Self);
  FPageLayout := TRMPageLayout.Create;
  FPageHeaderMsg := TRMBandMsg.Create;
  FPageFooterMsg := TRMBandMsg.Create;
  FPageCaptionMsg := TRMPageCaptionMsg.Create;

  FGridNumOptions := TRMGridNumOptions.Create;
  FMasterDataBandOptions := TRMMasterDataBandOptions.Create;
  FGridFontOptions := TRMGridFontOptions.Create;

  FRMDataSets := TList.Create;
end;

destructor TRMCustomGridReport.Destroy;
begin
  if RMDialogForm <> nil then
    FreeAndNil(FReport);

  ClearRMDataSets;
  FreeAndNil(FRMDataSets);

  FreeAndNil(FReportSettings);
  FreeAndNil(FGroups);
  FreeAndNil(FPageLayout);
  FreeAndNil(FPageHeaderMsg);
  FreeAndNil(FPageFooterMsg);
  FreeAndNil(FPageCaptionMsg);

  FreeAndNil(FGridNumOptions);
  FreeAndNil(FMasterDataBandOptions);
  FreeAndNil(FGridFontOptions);

  inherited Destroy;
end;

procedure TRMCustomGridReport.SetMemoViewFormat(aView: TRMMemoView; aField: TField);
begin
  if aField = nil then Exit;

  if aField.DataType in [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency,
    ftBCD, ftBytes, ftVarBytes, ftAutoInc{$IFDEF COMPILER4_UP}, ftLargeint{$ENDIF}] then
  begin
  	if TNumericField(aField).DisplayFormat <> '' then
	    aView.DisplayFormat := 'N' + TNumericField(aField).DisplayFormat;
  end
  else if aField.DataType in [ftDate, ftDateTime] then
  begin
  	if TDateTimeField(aField).DisplayFormat <> '' then
	    aView.DisplayFormat := 'D' + TDateTimeField(aField).DisplayFormat;
  end
  else if aField.DataType in [ftTime] then
  begin
  	if TDateTimeField(aField).DisplayFormat <> '' then
	    aView.DisplayFormat := 'T' + TDateTimeField(aField).DisplayFormat;
  end
  else if aField.DataType in [ftBoolean] then
  begin
  	if TBooleanField(aField).DisplayValues <> '' then
	    aView.DisplayFormat := 'B' + TBooleanField(aField).DisplayValues;
  end;
end;

function TRMCustomGridReport.AddRMDataSet(const aDataSet: TDataSet): TRMDBDataSet;
var
  i: Integer;
  liComponent: TComponent;

  function _CreateDataSet: TRMDBDataSet;
  var
    liDataSet: TRMDBDataSet;
    i: Integer;
    str: string;
  begin
    liDataSet := TRMDBDataSet.Create(RMDialogForm);
    liDataSet.DataSet := aDataSet;
    FRMDataSets.Add(liDataSet);
    i := 1;
    while True do
    begin
      str := 'RMGridDataSet' + IntToStr(i);
      if RMDialogForm.FindComponent(str) = nil then
      begin
        liDataSet.Name := str;
        Break;
      end;
      Inc(i);
    end;
    Result := liDataSet;
  end;

begin
  for i := 0 to FRMDataSets.Count - 1 do
  begin
    if TRMDBDataSet(FRMDataSets[i]).DataSet = aDataSet then
    begin
      Result := TRMDBDataSet(FRMDataSets[i]);
      Exit;
    end;
  end;

  for i := 0 to RMDialogForm.ComponentCount - 1 do
  begin
    liComponent := RMDialogForm.Components[i];
    if (liComponent is TRMDBDataSet) and (TRMDBDataSet(liComponent).DataSet = aDataSet) then
    begin
      Result := TRMDBDataSet(liComponent);
      Exit;
    end;
  end;

  Result := _CreateDataSet;
end;

procedure TRMCustomGridReport.ClearRMDataSets;
var
  i: Integer;
begin
  for i := 0 to FRMDataSets.Count - 1 do
    TRMDBDataSet(FRMDataSets[i]).Free;
  FRMDataSets.Clear;
end;

procedure TRMCustomGridReport._InternalShowReport(aFlag: Integer);
var
	lPage: TRMGridReportPage;
begin
  ClearRMDataSets;
  Report.ModalPreview := True;
  Report.OnBeforePrintBand := nil;
  FReport.ModalPreview := TRUE;
  try
    FReport.ReportInfo.Title := PageLayout.Title;
    FReport.InitialZoom := FReportSettings.FInitialZoom;
    FReport.PreviewButtons := FReportSettings.FPreviewButtons;
    FReport.Preview := FReportSettings.FPreview;
    FReport.ShowProgress := FReportSettings.FShowProgress;
    FReport.ModifyPrepared := FReportSettings.FModifyPrepared;
    FReport.ShowPrintDialog := FReportSettings.FShowPrintDialog;
    FReport.ReportInfo.Title := FReportSettings.FReportTitle;
    if rmgoRebuildAfterPageChanged in ReportOptions then
      THackReport(FReport).OnAfterPreviewPageSetup := OnAfterPreviewPageSetup
    else
      THackReport(FReport).OnAfterPreviewPageSetup := nil;

    FReport.Clear;
    with PageLayout do
    begin
      FReport.DoublePass := DoublePass;
      THackReport(FReport).PrinterName := PrinterName;
    end;

    if CreateReportFromGrid then
    begin
    	lPage := TRMGridReportPage(FReport.Pages[0]);
      lPage.UseHeaderFooter := True;
      lPage.PageHeaderMsg.Assign(PageHeaderMsg);
      lPage.PageFooterMsg.Assign(PageFooterMsg);
      lPage.PageCaptionMsg.Assign(PageCaptionMsg);

      try
        //        if (rmgoDisableControls in ReportOptions) and (MainDataSet <> nil) and (MainDataSet.DataSet <> nil) then
        //          MainDataSet.DataSet.DisableControls;
        case aFlag of
          1: FReport.ShowReport;
          2: FReport.PrintReport;
          3: FReport.DesignReport;
        end;
      finally
        //        if (rmgoDisableControls in ReportOptions) and (MainDataSet <> nil) and (MainDataSet.DataSet <> nil) then
        //          MainDataSet.DataSet.EnableControls;
      end;
    end;
  finally
  end;
end;

procedure TRMCustomGridReport.ShowReport;
begin
  _InternalShowReport(1);
end;

procedure TRMCustomGridReport.PrintReport;
begin
  _InternalShowReport(2);

⌨️ 快捷键说明

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