rm_designer.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 2,241 行 · 第 1/5 页

PAS
2,241
字号

    btnFontUnderline: TRMToolbarButton;
    ToolbarSep9711: TRMToolbarSep;
    btnTextAlignCenter: TRMToolbarButton;
    btnFontBold: TRMToolbarButton;
    btnFontItalic: TRMToolbarButton;
    btnTextAlignVCenter: TRMToolbarButton;
    btnTextAlignLeft: TRMToolbarButton;
    HlB1: TRMToolbarButton;
    btnTextAlignTop: TRMToolbarButton;
    btnTextAlignRight: TRMToolbarButton;
    btnTextAlignH: TRMToolbarButton;
    btnTextAlignBottom: TRMToolbarButton;
    ToolbarSep9713: TRMToolbarSep;
    ToolbarSep9714: TRMToolbarSep;
    ToolbarSep9715: TRMToolbarSep;
    ToolbarSep9716: TRMToolbarSep;
    ToolbarSep9718: TRMToolbarSep;
    btnInsertFields: TRMToolbarButton;

    FOpenFiles: TStringList;
    FHRuler, FVRuler: TRMDesignerRuler;
    FcmbFont: TRMFontComboBox;
    FcmbFontSize: TRMComboBox97 {TComboBox};
    FBtnFontColor: TRMColorPickerButton;

    FCurDocName, FCaption: string;
    FOldFactor: Integer;
    FUndoBusy: Boolean;

    procedure padSearchFindClick(Sender: TObject);
    procedure padSearchReplaceClick(Sender: TObject);
    procedure padSearchFindAgainClick(Sender: TObject);

    procedure ToolBarPopMenuPopup(Sender: TObject);

    procedure InsertFieldsClick(Sender: TObject);
    procedure OnFieldsDialogCloseEvnet(Sender: TObject);
    procedure ShowFieldsDialog(aVisible: Boolean);

    procedure Localize;
    function GetFirstSelected: TRMView;
    procedure SetObjectsID;
    procedure SaveIni;
    procedure LoadIni;
    function GetSelectionStatus: TSelectionStatus;
    function FileSave: Boolean;
    function FileSaveAs: Boolean;
    procedure CreateDefaultPage;
    procedure OnFindReplaceView(Sender: TObject);

    procedure SetCurDocName(Value: string);
    procedure OnpadAutoArrangeClick(Sender: TObject);
    procedure OnInspBeforeModify(Sender: TObject; const aPropName: string);
    procedure OnInspAfterModify(Sender: TObject; const aPropName, aPropValue: string);
    procedure InspSelectionChanged(ObjName: string);
    procedure InspGetObjects(List: TStrings);
    procedure FillInspFields;
    procedure SelectObject(ObjName: string);

    procedure ClearUndoBuffer;
    procedure ClearRedoBuffer;
    procedure ReleaseAction(aActionRec: PRMUndoRec);
    procedure AddAction(aBuffer: PRMUndoBuffer; aAction: TRMUndoAction; aList: TList);
    procedure Undo(aBuffer: PRMUndoBuffer);

    procedure GB1Click(Sender: TObject);
    procedure GB2Click(Sender: TObject);
    procedure GB3Click(Sender: TObject);
    procedure HlB1Click(Sender: TObject);
    function GetScript: TStrings;
    procedure SetScript(Value: TStrings);

    procedure SetOpenFileMenuItems(const aNewFile: string);

    procedure OnDockRequestDockEvent(Sender: TObject; Bar: TRMCustomDockableWindow; var Accept: Boolean);
    procedure ScrollBox1Resize(Sender: TObject);
    {$IFDEF Delphi4}
    procedure OnFormMouseWheelUpEvent(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    procedure OnFormMouseWheelDownEvent(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    {$ENDIF}

    procedure OpenFile(aFileName: string);
    function RectTypEnabled: Boolean;
    function FontTypEnabled: Boolean;
    function ZEnabled: Boolean;
    function CutEnabled: Boolean;
    function CopyEnabled: Boolean;
    function PasteEnabled: Boolean;
    function DelEnabled: Boolean;
    function EditEnabled: Boolean;
    function RedoEnabled: Boolean;
    function UndoEnabled: Boolean;
    procedure MoveObjects(dx, dy: Integer; Resize: Boolean);
  protected
    procedure SelectAll;
    procedure EnableControls; override;
    procedure ShowPosition; override;
    procedure DoFormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); override;

    function GetModified: Boolean; override;
    procedure SetModified(Value: Boolean); override;
    procedure SetFactor(Value: Integer); override;
    function GetDesignerRestrictions: TRMDesignerRestrictions; override;
    procedure SetDesignerRestrictions(Value: TRMDesignerRestrictions); override;
  public
    { Public declarations }
    function Objects: TList;
    procedure BeforeChange; override;
    procedure AfterChange; override;
    function InsertDBField: string; override;
    function InsertExpression: string; override;
    procedure MemoViewEditor(t: TRMView); override;
    procedure PictureViewEditor(t: TRMView); override;
    procedure RMFontEditor(Sender: TObject); override;
    procedure RMDisplayFormatEditor(Sender: TObject); override;
    procedure RMCalcMemoEditor(Sender: TObject); override;

    procedure SetPageTabs; override;
    procedure UnselectAll; override;
    procedure SelectionChanged(aRefreshInspProp: Boolean); override;
    procedure SetCurPage(Value: Integer); override;
    procedure ResetSelection; override;
    procedure ShowContent; override;
    procedure SetRulerOffset; override;
    procedure AddUndoAction(aAction: TRMUndoAction); override;
    procedure ShowObjMsg; override;
    procedure ShowEditor; override;

    procedure ShowMemoEditor(Sender: TObject);

    property CurDocName: string read FCurDocName write SetCurDocName;
    property SelStatus: TSelectionStatus read GetSelectionStatus;
    property Script: TStrings read GetScript write SetScript;
  end;

implementation

{$R *.DFM}

uses
  Registry, RM_Const, RM_Const1, RM_Utils, RM_EditorMemo, RM_EditorBand, RM_EditorGroup,
  RM_EditorCrossBand, RM_EditorPicture, RM_EditorHilit, RM_EditorFrame, RM_EditorField,
  RM_EditorExpr, RM_PageSetup, RM_EditorReportProp, RM_DesignerOptions, RM_Printer, RM_About,
  RM_EditorFormat, RM_EditorDictionary, RM_EditorFindReplace, RM_EditorTemplate,
  RM_EditorCalc, RM_EditorBandType,
  RM_Wizard, RM_WizardNewReport;

type
  THackView = class(TRMView)
  end;

  THackPage = class(TRMCustomPage)
  end;

  THackReportPage = class(TRMReportPage)
  end;

  THackReport = class(TRMReport)
  end;

const
  crPencil = 11;
  DefaultPopupItemsCount = 9;

  TAG_SetFrameTop = 1;
  TAG_SetFrameLeft = 2;
  TAG_SetFrameBottom = 3;
  TAG_SetFrameRight = 4;
  TAG_BackColor = 5;
  //  TAG_FrameStyle = 6;

  TAG_SetFontName = 7;
  TAG_SetFontSize = 8;

  TAG_FontBold = 9;
  TAG_FontItalic = 10;
  TAG_FontUnderline = 11;

  TAG_HAlignLeft = 12;
  TAG_HAlignCenter = 13;
  TAG_HAlignRight = 14;
  TAG_HAlignEuqal = 15;

  TAG_FrameSize = 16;
  TAG_FontColor = 17;
  TAG_FrameColor = 19;

  TAG_SetFrame = 20;
  TAG_NoFrame = 21;

  TAG_FrameStyle1 = 25;
  TAG_FrameStyle2 = 26;
  TAG_FrameStyle3 = 27;
  TAG_FrameStyle4 = 28;
  TAG_FrameStyle5 = 29;
  TAG_FrameStyle6 = 30;

  TAG_VAlignTop = 31;
  TAG_VAlignCenter = 32;
  TAG_VAlignBottom = 33;

var
  FDesignerComp: TRMDesigner;
  FEditAfterInsert: Boolean;

type
  TRMScrollBox = class(TScrollBox)
  private
    FOnkeyDown: TKeyEvent;
    procedure CNKeydown(var Message: TMessage); message CN_KEYDOWN;
  protected
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnkeyDown: TKeyEvent read FOnkeyDown write FOnkeyDown;
  end;

constructor TRMScrollBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TabStop := True; //使之能获得焦点
end;

procedure TRMScrollBox.CNKeydown(var Message: TMessage);
begin
  case TWMKey(Message).CharCode of
    VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_TAB:
      begin
        Exit; //如果让他自己处理的话就会失去焦点,必须中断才能把消息传到WM_KeyDown
      end;
  else
    inherited;
  end;
end;

procedure TRMScrollBox.KeyDown(var Key: Word; Shift: TShiftState);
begin
  if Assigned(FOnkeyDown) then
  begin
    FOnkeyDown(Self, key, Shift);
  end;
  inherited;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMDesigner}

constructor TRMDesigner.Create(AOwner: TComponent);
begin
  //  if Assigned(FDesignerComp) then
  //    raise Exception.Create('You already have one TRMDesigner component');
  inherited Create(AOwner);

  FDesignerComp := Self;
  FOpenFileCount := 4;
  FDefaultDictionaryFile := '';
  FUseUndoRedo := True;
end;

destructor TRMDesigner.Destroy;
begin
  FDesignerComp := nil;
  inherited Destroy;
end;

procedure TRMDesigner.SetOpenFileCount(Value: Integer);
begin
  if (Value >= 0) and (Value <= 9) then
    FOpenFileCount := Value;
end;

procedure TRMDesigner.SetDesignerRestrictions(Value: TRMDesignerRestrictions);
begin
  FDesignerRestrictions := Value;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMToolbarAlign }

constructor TRMToolbarAlign.CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
begin
  inherited Create(AOwner);
  Dockedto := DockTo;
  //  Parent := Self;
  FDesignerForm := TRMDesignerForm(AOwner);
  BeginUpdate;
  DockRow := 2;
  DockPos := 10; //ToolbarBorder.DockPos + ToolbarBorder.Width;
  Name := 'ToolbarAlign';

  btnAlignLeft := TRMToolbarButton.Create(Self);
  with btnAlignLeft do
  begin
    ImageIndex := 0;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignLeftClick;
    AddTo := Self;
  end;
  btnAlignHCenter := TRMToolbarButton.Create(Self);
  with btnAlignHCenter do
  begin
    ImageIndex := 1;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignHCenterClick;
    AddTo := Self;
  end;
  btnAlignRight := TRMToolbarButton.Create(Self);
  with btnAlignRight do
  begin
    ImageIndex := 2;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignRightClick;
    AddTo := Self;
  end;
  btnAlignTop := TRMToolbarButton.Create(Self);
  with btnAlignTop do
  begin
    ImageIndex := 3;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignTopClick;
    AddTo := Self;
  end;
  btnAlignVCenter := TRMToolbarButton.Create(Self);
  with btnAlignVCenter do
  begin
    ImageIndex := 4;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignVCenterClick;
    AddTo := Self;
  end;
  btnAlignBottom := TRMToolbarButton.Create(Self);
  with btnAlignBottom do
  begin
    ImageIndex := 5;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignBottomClick;
    AddTo := Self;
  end;
  ToolbarSep9720 := TRMToolbarSep.Create(Self);
  with ToolbarSep9720 do
  begin
    AddTo := Self;
  end;

  btnAlignHSE := TRMToolbarButton.Create(Self);
  with btnAlignHSE do
  begin
    ImageIndex := 6;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignHSEClick;
    AddTo := Self;
  end;
  btnAlignVSE := TRMToolbarButton.Create(Self);
  with btnAlignVSE do
  begin
    ImageIndex := 7;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignVSEClick;
    AddTo := Self;
  end;
  ToolbarSep9721 := TRMToolbarSep.Create(Self);
  with ToolbarSep9721 do
  begin
    AddTo := Self;
  end;

  btnAlignHWCenter := TRMToolbarButton.Create(Self);
  with btnAlignHWCenter do
  begin
    ImageIndex := 8;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignHWCenterClick;
    AddTo := Self;
  end;
  btnAlignVWCenter := TRMToolbarButton.Create(Self);
  with btnAlignVWCenter do
  begin
    ImageIndex := 9;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignVWCenterClick;
    AddTo := Self;
  end;
  ToolbarSep9710 := TRMToolbarSep.Create(Self);
  with ToolbarSep9710 do
  begin
    AddTo := Self;
  end;

  btnAlignLeftRight := TRMToolbarButton.Create(Self);
  with btnAlignLeftRight do
  begin
    ImageIndex := 10;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignLeftRightClick;
    AddTo := Self;
  end;
  btnAlignTopBottom := TRMToolbarButton.Create(Self);
  with btnAlignTopBottom do
  begin
    ImageIndex := 11;
    Images := FDesignerForm.ImageListAlign;
    OnClick := btnAlignTopBottomClick;
    AddTo := Self;
  end;
  EndUpdate;

  Localize;
end;

procedure TRMToolbarAlign.Localize;
begin
  RMSetStrProp(btnAlignLeft, 'Hint', rmRes + 138);
  RMSetStrProp(btnAlignHCenter, 'Hint', rmRes + 139);
  RMSetStrProp(btnAlignHSE, 'Hint', rmRes + 140);
  RMSetStrProp(btnAlignHWCenter, 'Hint', rmRes + 141);
  RMSetStrProp(btnAlignRight, 'Hint', rmRes + 142);
  RMSetStrProp(btnAlignTop, 'Hint', rmRes + 143);
  RMSetStrProp(btnAlignVSE, 'Hint', rmRes + 144);
  RMSetStrProp(btnAlignVWCenter, 'Hint', rmRes + 145);
  RMSetStrProp(btnAlignVCenter, 'Hint', rmRes + 146);
  RMSetStrProp(btnAlignBottom, 'Hint', rmRes + 147);
  RMSetStrProp(btnAlignLeftRight, 'Hint', rmRes + 199);
  RMSetStrProp(btnAlignTopBottom, 'Hint', rmRes + 215);
end;

function TRMToolbarAlign.GetLeftObject: Integer;
var
  i: Integer;
  t: TRMView;
  x: Integer;
begin
  t := FDesignerForm.Objects[FDesignerForm.TopSelected];
  x := t.spLeft_Designer;
  Result := FDesignerForm.TopSelected;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      if t.spLeft_Designer < x then
      begin
        x := t.spLeft_Designer;
        Result := i;
      end;
    end;

⌨️ 快捷键说明

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