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

📄 rm_editorformat.pas

📁 这是一个功能强大
💻 PAS
字号:

{*****************************************}
{                                         }
{          Report Machine v2.0            }
{              Format editor              }
{                                         }
{*****************************************}

unit RM_EditorFormat;

interface

{$I RM.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, RM_Class;

type
  TRMDisplayFormatForm = class(TRMObjEditorForm)
    btnOK: TButton;
    btnCancel: TButton;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    lstFolder: TListBox;
    lstType: TListBox;
    edtForamt: TEdit;
    edtDec: TEdit;
    edtSpl: TEdit;
    procedure edtSplEnter(Sender: TObject);
    procedure lstFolderClick(Sender: TObject);
    procedure lstTypeClick(Sender: TObject);
    procedure lstTypeDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    FDisplayFormat: TRMFormat;
    FDisplayFormatStr: string;

    procedure ShowPanels;
    procedure Localize;
  public
    { Public declarations }
    function ShowEditor(aView: TRMView): TModalResult; override;
    function Execute: string;

    property DisplayFormat: TRMFormat read FDisplayFormat write FDisplayFormat;
    property DisplayFormatStr: string read FDisplayFormatStr write FDisplayFormatStr;
  end;

implementation

{$R *.DFM}

uses RM_Utils, RM_const, RM_Const1;

const
  CategCount = 5;

type
  THackMemoView = class(TRMCustomMemoView)
  end;

function TRMDisplayFormatForm.Execute: string;
begin
  Result := '';
  if ShowModal = mrOK then
  begin
    case FDisplayFormat.FormatIndex1 of
      0: //字符型
        Result := '';
      1: //数字型
        begin
          Result := 'N';
          //DecimalSeparator := FDisplayFormat.FormatdelimiterChar;
          case FDisplayFormat.FormatIndex2 of
            0:
              Result := Result + '##0' + FDisplayFormat.FormatdelimiterChar +
                StringOfChar('#', FDisplayFormat.FormatPercent);
            1:
              Result := Result + 'F' + IntToStr(FDisplayFormat.FormatPercent);
            //Result := FloatToStrF(aValue, ffFixed, 15, FDisplayFormat.FormatPercent);
            2:
              Result := Result + '#,##0' + FDisplayFormat.FormatdelimiterChar +
                StringOfChar('#', FDisplayFormat.FormatPercent);
            3:
              Result := Result + 'N' + IntToStr(FDisplayFormat.FormatPercent);
              //Result := FloatToStrF(aValue, ffNumber, 15, FDisplayFormat.FormatPercent);
            4: Result := Result + FDisplayFormatStr;
          end;
        end;
      2: //日期型
        begin
          Result := 'D';
          if FDisplayFormat.FormatIndex2 > High(RMDateFormats) then
            Result := Result + FDisplayFormatStr
          else
            Result := Result + RMDateFormats[FDisplayFormat.FormatIndex2];
        end;
      3: //时间型
        begin
          Result := 'T';
          if FDisplayFormat.FormatIndex2 = 4 then
            Result := Result + FDisplayFormatStr
          else
            Result := Result + RMTimeFormats[FDisplayFormat.FormatIndex2];
        end;
      4: //逻辑型
        begin
          Result := 'B';
          if FDisplayFormat.FormatIndex2 = 4 then
            Result := Result + FDisplayFormatStr
          else
            Result := Result + RMFormatBoolStr[FDisplayFormat.FormatIndex2];
        end;
    end;
  end;
end;

function TRMDisplayFormatForm.ShowEditor(aView: TRMView): TModalResult;
var
  i: Integer;
  t: TRMView;
  liList: TList;
begin
  FDisplayFormat := THackMemoView(aView).FormatFlag;
  FDisplayFormatStr := TRMCustomMemoView(aView).DisplayFormat;
  Result := ShowModal;
  if Result = mrOk then
  begin
    RMDesigner.BeforeChange;
    liList := RMDesigner.PageObjects;
    for i := 0 to liList.Count - 1 do
    begin
      t := liList[i];
      if t.Selected and (t is TRMCustomMemoView) then
      begin
        THackMemoView(t).FDisplayFormat := FDisplayFormatStr;
        THackMemoView(t).FormatFlag := FDisplayFormat;
      end;
    end;
    RMDesigner.AfterChange;
  end;
end;

procedure TRMDisplayFormatForm.Localize;
begin
  Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  RMSetStrProp(Self, 'Caption', rmRes + 420);
  RMSetStrProp(Label1, 'Caption', rmRes + 422);
  RMSetStrProp(Label2, 'Caption', rmRes + 423);
  RMSetStrProp(Label3, 'Caption', rmRes + 424);

  btnOK.Caption := RMLoadStr(SOk);
  btnCancel.Caption := RMLoadStr(SCancel);
end;

{$WARNINGS OFF}

procedure TRMDisplayFormatForm.ShowPanels;
begin
  RMEnableControls([Label1, Label2, edtDec, edtSpl], lstFolder.ItemIndex = 1);
  if edtDec.Enabled then
  begin
    edtDec.Text := IntToStr(FDisplayFormat.FormatPercent);
    edtSpl.Text := FDisplayFormat.FormatdelimiterChar;
  end;

  RMEnableControls([Label3, edtForamt], lstType.ItemIndex = lstType.Items.Count - 1);
  if edtForamt.Enabled then
    edtForamt.Text := FDisplayFormatStr
  else
    edtForamt.Text := '';
end;
{$WARNINGS ON}

procedure TRMDisplayFormatForm.lstFolderClick(Sender: TObject);
var
  i: Integer;
begin
  lstType.Items.Clear;
  case lstFolder.ItemIndex of
    0: // 字符型
      begin
        lstType.Items.Add(RMLoadStr(SFormat11));
      end;
    1: // 数字型
      begin
        for i := 0 to RMFormatNumCount do
          lstType.Items.Add(RMLoadStr(SFormat21 + i));
      end;
    2: // 日期型
      begin
        for i := 0 to RMFormatDateCount do
          lstType.Items.Add(RMLoadStr(SFormat31 + i));
      end;
    3: // 时间型
      begin
        for i := 0 to RMFormatTimeCount do
          lstType.Items.Add(RMLoadStr(SFormat41 + i));
      end;
    4: // 逻辑型
      begin
        for i := 0 to RMFormatBooleanCount do
          lstType.Items.Add(RMLoadStr(SFormat51 + i));
      end;
  end;

  lstType.ItemIndex := 0;
  lstTypeClick(nil);
end;

procedure TRMDisplayFormatForm.lstTypeClick(Sender: TObject);
begin
  ShowPanels;
end;

procedure TRMDisplayFormatForm.edtSplEnter(Sender: TObject);
begin
  edtSpl.SelectAll;
end;

procedure TRMDisplayFormatForm.lstTypeDblClick(Sender: TObject);
begin
  if lstType.ItemIndex >= 0 then
    btnOK.Click;
end;

procedure TRMDisplayFormatForm.FormCreate(Sender: TObject);
begin
  Localize;
end;

procedure TRMDisplayFormatForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if ModalResult = mrOk then
  begin
    FDisplayFormat.FormatIndex1 := lstFolder.ItemIndex;
    FDisplayFormat.FormatIndex2 := lstType.ItemIndex;
    FDisplayFormat.FormatPercent := StrToIntDef(edtDec.Text, 0);
    if edtSpl.Text <> '' then
      FDisplayFormat.FormatdelimiterChar := edtSpl.Text[1]
    else
      FDisplayFormat.FormatdelimiterChar := '.';

    if edtForamt.Enabled then
      FDisplayFormatStr := edtForamt.Text;
  end;
end;

procedure TRMDisplayFormatForm.FormShow(Sender: TObject);
var
  i: Integer;
begin
  lstFolder.Items.Clear;
  for i := 0 to CategCount - 1 do
    lstFolder.Items.Add(RMLoadStr(SCateg1 + i));
  lstFolder.ItemIndex := FDisplayFormat.FormatIndex1;
  if lstFolder.ItemIndex < 0 then lstFolder.ItemIndex := 0;
  lstFolderClick(nil);
  lstType.ItemIndex := FDisplayFormat.FormatIndex2;
  if lstType.ItemIndex < 0 then lstType.ItemIndex := 0;
  lstTypeClick(nil);
end;

end.

⌨️ 快捷键说明

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