rm_reg.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 443 行

PAS
443
字号

{*****************************************}
{                                         }
{         Report Machine v2.0             }
{            Registration unit            }
{                                         }
{*****************************************}


unit RM_reg;

interface

{$I RM.inc}

procedure Register;

implementation

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  DB, Dialogs,
{$IFDEF Delphi6}
  DesignIntf, DesignEditors,
{$ELSE}
  DsgnIntf,
{$ENDIF}
  RM_Class, RM_Printer, RM_DataSet, RM_Designer, RM_PreView, RM_Utils, RM_Const,
  RM_Const1, RM_PageSetup, RM_Common,
  RM_AngLbl, RM_ChineseMoneyMemo, RM_RichEdit, RM_CheckBox, RM_Diagonal, RM_Ole,
  RM_DialogCtls, RM_BarCode, RM_AsBarView, RM_Cross,
  RMD_ReportExplorer, RM_DsgGridReport, RM_GridReport,
  RM_e_txt, RM_e_bmp, RM_e_emf, RM_e_wmf, RM_e_Tiff, RM_e_xls, RM_e_htm, RM_e_csv
{$IFDEF llPDFlib}, RM_E_llPDF{$ENDIF}
{$IFDEF RXGIF}, RM_e_gif{$ENDIF}
{$IFDEF JPEG}, RM_e_jpeg{$ENDIF}
  , RM_FormReport, RM_PDBGrid
{$IFDEF EHLib}, RM_PEHGrid{$ENDIF}
{$IFDEF TeeChart}, RM_Chart, RM_ChartUI, RM_PChart, RM_DBChart, RM_DBChartUI{$ENDIF}
{$IFDEF RX}, RM_RxRichEdit, RM_PRxCtls{$ENDIF}
{$IFDEF InfoPower}, RM_wwRichEdit, RM_PwwGrid{$ENDIF}
{$IFDEF DM_BDE}, RMD_BDE{$ENDIF}
{$IFDEF DM_ADO}, RMD_ADO{$ENDIF}
{$IFDEF DM_IBX}, RMD_IBX{$ENDIF}
{$IFDEF DM_DBX}, RMD_DBX{$ENDIF}
{$IFDEF DM_MIDAS}, RMD_MIDAS{$ENDIF}
  ;

{-----------------------------------------------------------------------}
type
  TRMReportEditor = class(TComponentEditor)
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;

  TRMDictionaryFileNameProperty = class(TStringProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;

  TRMIniFileNameProperty = class(TStringProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;

{ TRMFieldProperty }

  TRMFieldProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValueList(List: TStrings);
    procedure GetValues(Proc: TGetStrProc); override;
  end;

  { TRMRichEditStrings }
  TRMRichEditStrings = class(TClassProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;
  end;

  TRMPageLayoutProperty = class(TClassProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;

  TRMFormReportEditor = class(TComponentEditor)
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
    procedure DoShow;
  end;

  TRMGridReportEditor = class(TComponentEditor)
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
    procedure DoShow;
  end;

{-----------------------------------------------------------------------}
{-----------------------------------------------------------------------}
{ TRMReportEditor }

function TRMReportEditor.GetVerbCount: Integer;
begin
  Result := 1;
end;

function TRMReportEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := RMLoadStr(SDesignReport);
  end;
end;

procedure TRMReportEditor.ExecuteVerb(Index: Integer);

  procedure _DoDesign;
  begin
    TRMReport(Component).DesignReport;
    if TRMReport(Component).StoreInDFM then
    begin
      if TRMReport(Component).ComponentModified then
        Designer.Modified;
    end;
  end;

begin
  case Index of
    0: _DoDesign;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMDictionaryFileNameProperty }

procedure TRMDictionaryFileNameProperty.Edit;
var
  liOpenDlg: TOpenDialog;
begin
  liOpenDlg := TOpenDialog.Create(nil);
  liOpenDlg.FileName := GetValue;
  liOpenDlg.Filter := 'ReportMachine Dictionary Files (*.rmd)|*.rmd';
  liOpenDlg.Options := liOpenDlg.Options + [ofPathMustExist, ofFileMustExist];
  try
    if liOpenDlg.Execute then SetValue(liOpenDlg.FileName);
  finally
    liOpenDlg.Free;
  end;
end;

function TRMDictionaryFileNameProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog, paRevertable];
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMIniFileNameProperty }

procedure TRMIniFileNameProperty.Edit;
var
  liOpenDlg: TOpenDialog;
begin
  liOpenDlg := TOpenDialog.Create(nil);
  liOpenDlg.FileName := GetValue;
  liOpenDlg.Filter := 'Ini File (*.ini)|*.ini';
  liOpenDlg.Options := liOpenDlg.Options + [ofPathMustExist, ofFileMustExist];
  try
    if liOpenDlg.Execute then SetValue(liOpenDlg.FileName);
  finally
    liOpenDlg.Free;
  end;
end;

function TRMIniFileNameProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog, paRevertable];
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMFieldProperty}

function TRMFieldProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TRMFieldProperty.GetValueList(List: TStrings);
var
  lReport: TComponent;
begin
  if (GetComponent(0) = nil) then Exit;

  lReport := nil;
  if (GetComponent(0) is TRMGroupItem) then
    lReport := (GetComponent(0) as TRMGroupItem).Report;

  if lReport <> nil then
  begin
  	if lReport is TRMCustomFormReport then
    begin
	    if TRMCustomFormReport(lReport).DataSet <> nil then
  	    TRMCustomFormReport(lReport).DataSet.GetFieldNames(List);
    end;
  end;
end;

procedure TRMFieldProperty.GetValues(Proc: TGetStrProc);
var
  i: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for i := 0 to Values.Count - 1 do Proc(Values[i]);
  finally
    Values.Free;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMRichEditStrings}
type
  THackDesigner = class(TRMReportDesigner)
  end;

  THackRMPageHeaderFooter = class(TRMPageHeaderFooter)
  end;

function TRMRichEditStrings.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes + [paDialog] - [paSubProperties];
end;

procedure TRMRichEditStrings.Edit;
var
  Stream: TStringStream;
begin
  if RMDesignerClass <> nil then
  begin
    RMDesigner := TRMReportDesigner(RMDesignerClass.NewInstance);
    RMDesigner.Create(nil);
    THackDesigner(RMDesigner).FReport := THackRMPageHeaderFooter(GetComponent(0)).ParentFormReport.Report;
  end;

  with TRMRichForm.Create(Application) do
  begin
    try
      Stream := TStringStream.Create('');
      TStrings(GetOrdValue).SaveToStream(Stream);
      Stream.Position := 0;
      Editor.Lines.LoadFromStream(Stream);
      case ShowModal of
        mrOk:
          begin
            Stream.Position := 0;
            Editor.Lines.SaveToStream(Stream);
            Stream.Position := 0;
            TStrings(GetOrdValue).LoadFromStream(Stream);
            Modified;
          end;
      end;
      Stream.Free;
    finally
      if RMDesignerClass <> nil then
      begin
        RMDesigner.Free;
        RMDesigner := nil;
      end;
      Free;
    end;
  end;
end;

{-----------------------------------------------------------------------}
{-----------------------------------------------------------------------}
{ TRMPageLayoutProperty }

function TRMPageLayoutProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;

procedure TRMPageLayoutProperty.Edit;
var
  tmpForm: TRMPageSetupForm;
  tmp: TRMPageLayout;
begin
  tmp := TRMPageLayout(GetOrdValue);
  tmpForm := TRMPageSetupForm.Create(Application);
  try
    tmpForm.PageSetting.Title := tmp.Title;
    tmpForm.PageSetting.DoublePass := tmp.DoublePass;
    tmpForm.PageSetting.PageOr := tmp.PageOrientation;
    tmpForm.PageSetting.MarginLeft := RMRound(RMToMMThousandths(tmp.LeftMargin, rmutScreenPixels) / 1000, 1);
    tmpForm.PageSetting.MarginTop := RMRound(RMToMMThousandths(tmp.TopMargin, rmutScreenPixels) / 1000, 1);
    tmpForm.PageSetting.MarginRight := RMRound(RMToMMThousandths(tmp.RightMargin, rmutScreenPixels) / 1000, 1);
    tmpForm.PageSetting.MarginBottom := RMRound(RMToMMThousandths(tmp.BottomMargin, rmutScreenPixels) / 1000, 1);
    tmpForm.PageSetting.PageWidth := tmp.Width;
    tmpForm.PageSetting.PageHeight := tmp.Height;
    tmpForm.PageSetting.PageSize := tmp.PageSize;
    tmpForm.PageSetting.PageBin := tmp.PageBin;
    tmpForm.PageSetting.PrinterName := tmp.PrinterName;
    tmpForm.PageSetting.ColorPrint := tmp.ColorPrint;
    tmpForm.PageSetting.ColCount := tmp.ColumnCount;
    tmpForm.PageSetting.ColGap := RMFromScreenPixels(tmp.ColumnGap, rmutMillimeters);
    if tmpForm.ShowModal = mrOk then
    begin
      tmp.Title := tmpForm.PageSetting.Title;
      tmp.PrinterName := tmpForm.PageSetting.PrinterName;
      tmp.DoublePass := tmpForm.PageSetting.DoublePass;
      tmp.PageOrientation := tmpForm.PageSetting.PageOr;
      tmp.ColorPrint := tmpForm.PageSetting.ColorPrint;

      tmp.ColumnCount := tmpForm.PageSetting.ColCount;
      tmp.ColumnGap := RMToScreenPixels(tmpForm.PageSetting.ColGap, rmutMillimeters);
      tmp.LeftMargin := Round(RMToScreenPixels(tmpForm.PageSetting.MarginLeft * 1000, rmutMMThousandths));
      tmp.TopMargin := Round(RMToScreenPixels(tmpForm.PageSetting.MarginTop * 1000, rmutMMThousandths));
      tmp.RightMargin := Round(RMToScreenPixels(tmpForm.PageSetting.MarginRight * 1000, rmutMMThousandths));
      tmp.BottomMargin := Round(RMToScreenPixels(tmpForm.PageSetting.MarginBottom * 1000, rmutMMThousandths));

      tmp.Width := tmpForm.PageSetting.PageWidth;
      tmp.Height := tmpForm.PageSetting.PageHeight;
      tmp.PageBin := tmpForm.PageSetting.PageBin;
      tmp.PageSize := tmpForm.PageSetting.PageSize;
      Modified;
//        SetOrdValue(Longint(tmp));
    end;
  finally
    tmpForm.Free;
  end;
end;

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{ TRMFormReportEditor }

procedure TRMFormReportEditor.ExecuteVerb(Index: Integer);
begin
  DoShow;
end;

function TRMFormReportEditor.GetVerb(Index: Integer): string;
begin
  Result := RMLoadStr(SPreview);
end;

function TRMFormReportEditor.GetVerbCount: Integer;
begin
  Result := 1;
end;

procedure TRMFormReportEditor.DoShow;
begin
  TRMCustomFormReport(Component).ShowReport;
end;

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{ TRMGridReportEditor }

procedure TRMGridReportEditor.ExecuteVerb(Index: Integer);
begin
  DoShow;
end;

function TRMGridReportEditor.GetVerb(Index: Integer): string;
begin
  Result := RMLoadStr(SPreview);
end;

function TRMGridReportEditor.GetVerbCount: Integer;
begin
  Result := 1;
end;

procedure TRMGridReportEditor.DoShow;
begin
  TRMCustomGridReport(Component).ShowReport;
end;


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

procedure Register;
begin
  RegisterComponents('Report Machine',
    [TRMGridReport, TRMReport, TRMCompositeReport, TRMDBDataSet, TRMUserDataset,
    TRMAngledLabelObject, TRMRichObject, TRMCheckBoxObject, TRMOLEObject,
      TRMChineseMoneyObject, TRMDiagonalObject, TRMAsBarCodeObject, TRMCrossObject
{$IFDEF TurboPower}, TRMBarCodeObject{$ENDIF}
{$IFDEF TeeChart}, TRMChartObject, TRMDBChartObject{$ENDIF}
{$IFDEF RX}, TRMRxRichObject{$ENDIF}
{$IFDEF InfoPower}, TRMwwRichObject{$ENDIF}
    , TRMDialogControls, TRMPreview,
      TRMTextExport, TRMCSVExport, TRMBMPExport, TRMEMFExport, TRMWMFExport,
      TRMTiffExport, TRMXLSExport, TRMHTMExport
{$IFDEF llPDFlib}, TRMllPDFExport{$ENDIF}
{$IFDEF RXGIF}, TRMGIFExport{$ENDIF}
{$IFDEF JPEG}, TRMJPEGExport{$ENDIF}
    ]);

  RegisterComponents('RM Designer', [TRMGridReportDesigner, TRMDesigner, TRMDataDictionary, TRMReportExplorer
{$IFDEF DM_BDE}, TRMDBDEComponents{$ENDIF}
{$IFDEF DM_ADO}, TRMDADOComponents{$ENDIF}
{$IFDEF DM_IBX}, TRMDIBXComponents{$ENDIF}
{$IFDEF DM_DBX}, TRMDDBXComponents{$ENDIF}
{$IFDEF DM_MIDAS}, TRMDMidasComponents{$ENDIF}
    , TRMFormReport, TRMPrintDBGrid
{$IFDEF DecisionGrid}, TRMPrintDecision{$ENDIF}
{$IFDEF InfoPower}, TRMwwGridReport{$ENDIF}
{$IFDEF RX}, TRMPrintRxControls{$ENDIF}
{$IFDEF EHLib}, TRMPrintEHLib{$ENDIF}
//{$IFDEF DecisionGrid}, TRMPrintDecision{$ENDIF}
{$IFDEF TeeChart}, TRMPrintChart{$ENDIF}
    ]);

  RegisterComponentEditor(TRMReport, TRMReportEditor);
  RegisterPropertyEditor(TypeInfo(string), TRMSaveReportOptions, 'IniFileName', TRMIniFileNameProperty);
  RegisterPropertyEditor(TypeInfo(string), TRMDesigner, 'DefaultDictionaryFile', TRMDictionaryFileNameProperty);
  RegisterPropertyEditor(TypeInfo(TRMPageLayout), TRMCustomFormReport, 'PageLayout', TRMPageLayoutProperty);
  RegisterPropertyEditor(TypeInfo(TRMPageLayout), TRMCustomGridReport, 'PageLayout', TRMPageLayoutProperty);
  RegisterPropertyEditor(TypeInfo(string), TRMGroupItem, 'GroupFieldName', TRMFieldProperty);
  RegisterPropertyEditor(TypeInfo(TStrings), TRMPageHeaderFooter, 'Caption', TRMRichEditStrings);

  RegisterComponentEditor(TRMCustomFormReport, TRMFormReportEditor);
  RegisterComponentEditor(TRMCustomGridReport, TRMGridReportEditor);
end;

end.

⌨️ 快捷键说明

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