📄 rm_formreport.pas
字号:
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 + -