📄 rm_formreport.pas
字号:
end;
procedure TRMCustomGridReport.DesignReport;
begin
_InternalShowReport(3);
end;
procedure TRMCustomGridReport.BuildReport;
begin
_InternalShowReport(0);
end;
procedure TRMCustomGridReport.OnAfterPreviewPageSetup(Sender: TObject);
begin
ChangePageLayout(TRMPageSetting(Sender));
BuildReport;
end;
function TRMCustomGridReport.PageHeaderFooterSetup: Boolean;
var
tmpForm: TRMFormEditorHF;
begin
Result := False;
tmpForm := TRMFormEditorHF.Create(nil);
try
tmpForm.memHeaderLeft.Lines.Assign(PageHeaderMsg.LeftMemo);
tmpForm.memHeaderCenter.Lines.Assign(PageHeaderMsg.CenterMemo);
tmpForm.memHeaderRight.Lines.Assign(PageHeaderMsg.RightMemo);
tmpForm.memHeaderLeft.Font.Assign(PageHeaderMsg.Font);
tmpForm.memHeaderCenter.Font.Assign(PageHeaderMsg.Font);
tmpForm.memHeaderRight.Font.Assign(PageHeaderMsg.Font);
tmpForm.memFooterLeft.Lines.Assign(PageFooterMsg.LeftMemo);
tmpForm.memFooterCenter.Lines.Assign(PageFooterMsg.CenterMemo);
tmpForm.memFooterRight.Lines.Assign(PageFooterMsg.RightMemo);
tmpForm.memFooterLeft.Font.Assign(PageFooterMsg.Font);
tmpForm.memFooterCenter.Font.Assign(PageFooterMsg.Font);
tmpForm.memFooterRight.Font.Assign(PageFooterMsg.Font);
tmpForm.memTitle.Lines.Assign(PageCaptionMsg.TitleMemo);
tmpForm.memTitle.Font.Assign(PageCaptionMsg.TitleFont);
tmpForm.memCaptionLeft.Lines.Assign(PageCaptionMsg.CaptionMsg.LeftMemo);
tmpForm.memCaptionCenter.Lines.Assign(PageCaptionMsg.CaptionMsg.CenterMemo);
tmpForm.memCaptionRight.Lines.Assign(PageCaptionMsg.CaptionMsg.RightMemo);
tmpForm.memCaptionLeft.Font.Assign(PageCaptionMsg.CaptionMsg.Font);
tmpForm.memCaptionCenter.Font.Assign(PageCaptionMsg.CaptionMsg.Font);
tmpForm.memCaptionRight.Font.Assign(PageCaptionMsg.CaptionMsg.Font);
if tmpForm.ShowModal = mrOK then
begin
Result := True;
PageHeaderMsg.LeftMemo.Assign(tmpForm.memHeaderLeft.Lines);
PageHeaderMsg.CenterMemo.Assign(tmpForm.memHeaderCenter.Lines);
PageHeaderMsg.RightMemo.Assign(tmpForm.memHeaderRight.Lines);
PageHeaderMsg.Font.Assign(tmpForm.memHeaderLeft.Font);
PageFooterMsg.LeftMemo.Assign(tmpForm.memFooterLeft.Lines);
PageFooterMsg.CenterMemo.Assign(tmpForm.memFooterCenter.Lines);
PageFooterMsg.RightMemo.Assign(tmpForm.memFooterRight.Lines);
PageFooterMsg.Font.Assign(tmpForm.memFooterLeft.Font);
PageCaptionMsg.TitleMemo.Assign(tmpForm.memTitle.Lines);
PageCaptionMsg.TitleFont.Assign(tmpForm.memTitle.Font);
PageCaptionMsg.CaptionMsg.LeftMemo.Assign(tmpForm.memCaptionLeft.Lines);
PageCaptionMsg.CaptionMsg.CenterMemo.Assign(tmpForm.memCaptionCenter.Lines);
PageCaptionMsg.CaptionMsg.RightMemo.Assign(tmpForm.memCaptionRight.Lines);
PageCaptionMsg.CaptionMsg.Font.Assign(tmpForm.memCaptionLeft.Font);
end;
finally
tmpForm.Free;
end;
end;
function TRMCustomGridReport.PageSetup: Boolean;
var
tmpForm: TRMPageSetupForm;
begin
Result := False;
tmpForm := TRMPageSetupForm.Create(Application);
try
tmpForm.PageSetting.Title := PageLayout.Title;
tmpForm.PageSetting.DoublePass := PageLayout.DoublePass;
tmpForm.PageSetting.PageOr := PageLayout.PageOrientation;
tmpForm.PageSetting.MarginLeft := RMRound(RMToMMThousandths(PageLayout.LeftMargin, rmutScreenPixels) / 1000, 1);
tmpForm.PageSetting.MarginTop := RMRound(RMToMMThousandths(PageLayout.TopMargin, rmutScreenPixels) / 1000, 1);
tmpForm.PageSetting.MarginRight := RMRound(RMToMMThousandths(PageLayout.RightMargin, rmutScreenPixels) / 1000, 1);
tmpForm.PageSetting.MarginBottom := RMRound(RMToMMThousandths(PageLayout.BottomMargin, rmutScreenPixels) / 1000, 1);
tmpForm.PageSetting.PageWidth := PageLayout.Width;
tmpForm.PageSetting.PageHeight := PageLayout.Height;
tmpForm.PageSetting.PageSize := PageLayout.PageSize;
tmpForm.PageSetting.PageBin := PageLayout.PageBin;
tmpForm.PageSetting.PrinterName := PageLayout.PrinterName;
tmpForm.PageSetting.ColorPrint := PageLayout.ColorPrint;
tmpForm.PageSetting.ColCount := PageLayout.ColumnCount;
tmpForm.PageSetting.ColGap := RMFromScreenPixels(PageLayout.ColumnGap, rmutMillimeters);
if tmpForm.ShowModal = mrOk then
begin
ChangePageLayout(tmpForm.PageSetting);
Result := True;
end;
finally
tmpForm.Free;
end;
end;
procedure TRMCustomGridReport.ChangePageLayout(aPageSetting: TRMPageSetting);
begin
PageLayout.Title := aPageSetting.Title;
PageLayout.PrinterName := aPageSetting.PrinterName;
PageLayout.DoublePass := aPageSetting.DoublePass;
PageLayout.PageOrientation := aPageSetting.PageOr;
PageLayout.ColorPrint := aPageSetting.ColorPrint;
PageLayout.LeftMargin := Round(RMToScreenPixels(aPageSetting.MarginLeft * 1000, rmutMMThousandths));
PageLayout.TopMargin := Round(RMToScreenPixels(aPageSetting.MarginTop * 1000, rmutMMThousandths));
PageLayout.RightMargin := Round(RMToScreenPixels(aPageSetting.MarginRight * 1000, rmutMMThousandths));
PageLayout.BottomMargin := Round(RMToScreenPixels(aPageSetting.MarginBottom * 1000, rmutMMThousandths));
PageLayout.Width := aPageSetting.PageWidth;
PageLayout.Height := aPageSetting.PageHeight;
PageLayout.PageBin := aPageSetting.PageBin;
PageLayout.PageSize := aPageSetting.PageSize;
PageLayout.ColumnCount := aPageSetting.ColCount;
PageLayout.ColumnGap := RMToScreenPixels(aPageSetting.ColGap, rmutMillimeters);
end;
function TRMCustomGridReport.CreateReportFromGrid: Boolean;
begin
Result := False;
end;
procedure TRMCustomGridReport.SetGroups(Value: TRMGroupItems);
begin
FGroups.Assign(Value);
end;
function TRMCustomGridReport.GetReport: TRMGridReport;
begin
if FReport = nil then
begin
FReport := TRMGridReport.Create(RMDialogForm);
end;
Result := FReport;
end;
procedure TRMCustomGridReport.SetMasterDataBandOptions(Value: TRMMasterDataBandOptions);
begin
FMasterDataBandOptions.Assign(Value);
end;
procedure TRMCustomGridReport.SetGridNumOptions(Value: TRMGridNumOptions);
begin
FGridNumOptions.Assign(Value);
end;
procedure TRMCustomGridReport.SetPageLayout(Value: TRMPageLayout);
begin
FPageLayout.Assign(Value);
end;
procedure TRMCustomGridReport.SetGridFontOptions(Value: TRMGridFontOptions);
begin
FGridFontOptions.Assign(Value);
end;
procedure TRMCustomGridReport.AssignFont(aView: TRMMemoView; aFont: TFont);
var
liSaveColor: TColor;
begin
liSaveColor := aView.Font.Color;
aView.Font.Assign(aFont);
if rmgoUseColor in ReportOptions then
aView.Font.Color := liSaveColor;
end;
procedure TRMCustomGridReport.SetPageHeaderMsg(Value: TRMBandMsg);
begin
PageHeaderMsg.Assign(Value);
end;
procedure TRMCustomGridReport.SetPageFooterMsg(Value: TRMBandMsg);
begin
PageFooterMsg.Assign(Value);
end;
procedure TRMCustomGridReport.SetPageCaptionMsg(Value: TRMPageCaptionMsg);
begin
PageCaptionMsg.Assign(Value);
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMCustomFormReport }
constructor TRMCustomFormReport.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FReport := nil;
// FReportDataSet := nil;
FormWidth := TStringList.Create;
FReportOptions := [rmgoStretch, rmgoWordWrap, rmgoGridLines];
FReportSettings := TRMReportSettings.Create;
FGroups := TRMGroupItems.Create(Self);
FPageLayout := TRMPageLayout.Create;
FPageHeader := TRMPageHeaderFooter.Create;
FPageHeader.ParentFormReport := Self;
FPageFooter := TRMPageHeaderFooter.Create;
FPageFooter.ParentFormReport := Self;
FColumnFooter := TRMPageHeaderFooter.Create;
FColumnFooter.ParentFormReport := Self;
FScaleMode := TRMScaleOptions.Create;
FGridNumOptions := TRMGridNumOptions.Create;
FMasterDataBandOptions := TRMMasterDataBandOptions.Create;
FGridFontOptions := TRMGridFontOptions.Create;
FAutoBooleanString := '';
FRMDataSets := TList.Create;
end;
destructor TRMCustomFormReport.Destroy;
begin
ClearRMDataSets;
FReportSettings.Free;
FRMDataSets.Free;
FGroups.Free;
FPageLayout.Free;
FPageHeader.Free;
FPageFooter.Free;
FColumnFooter.Free;
FScaleMode.Free;
FGridNumOptions.Free;
if RMDialogForm <> nil then
FReport.Free;
// FReportDataSet.Free;
FormWidth.Free;
FMasterDataBandOptions.Free;
FGridFontOptions.Free;
inherited Destroy;
end;
procedure TRMCustomFormReport.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
begin
if AComponent = FDataSet then
FDataSet := nil
else if AComponent = FDetailDataSet then
FDetailDataSet := nil;
end;
end;
procedure TRMCustomFormReport.AssignFont(aView: TRMMemoView; aFont: TFont);
var
liSaveColor: TColor;
begin
liSaveColor := aView.Font.Color;
aView.Font.Assign(aFont);
if rmgoUseColor in ReportOptions then
aView.Font.Color := liSaveColor;
end;
procedure TRMCustomFormReport.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 TRMCustomFormReport.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 TRMCustomFormReport.ClearRMDataSets;
var
i: Integer;
begin
for i := 0 to FRMDataSets.Count - 1 do
TRMDBDataSet(FRMDataSets[i]).Free;
FRMDataSets.Clear;
end;
function TRMCustomFormReport.CalcWidth(aWidth: Integer): Integer;
begin
Result := aWidth;
if FScaleMode.ScaleMode = rmsmAdjust then
begin
if FScaleMode.ScaleFactor <> 100 then
Result := Round(aWidth * FScaleMode.ScaleFactor / 100);
end
end;
procedure TRMCustomFormReport.CalcRect(t: TRMView; ParentBand: TRMCustomBandView; aFormWidth: Integer);
var
liScale: Double;
procedure _ScaleView;
begin
t.spWidth := Round((t.spLeft + t.spWidth) * liScale) - Round(t.spLeft * liScale);
t.spHeight := Round((t.spTop + t.spHeight) * liScale) - Round(t.spTop * liScale);
t.spLeft := Round(t.spLeft * liScale);
t.spTop := ParentBand.spTop + Round(t.spTop * liScale) - Round(ParentBand.spTop * liScale);
if t is TRMCustomMemoView then
TRMMemoView(t).Font.Height := -Trunc(TRMMemoView(t).Font.Size * 96 / 72 * liScale);
end;
begin
t.spLeft := t.spLeft + OffsX;
t.spTop := t.spTop + OffsY;
liScale := FScaleMode.ScaleFactor / 100;
if FScaleMode.ScaleMode = rmsmAdjust then
begin
if FScaleMode.ScaleFactor <> 100 then
_ScaleView;
end
else
begin
if FScaleMode.FitPageWidth then //水平缩放
begin
liScale := PageWidth / aFormWidth;
_ScaleView;
end
else if (not HaveDetailBand) and FScaleMode.FitPageHeight then
begin
liScale := PageHeight / FormHeight;
_ScaleView;
end;
end;
if FScaleMode.CenterOnPageH then //水平居中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -