rm_dsgform.pas

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

PAS
2,142
字号
begin
  {$IFDEF USE_SYNEDIT}
  Gutter.Width := aWidth;
  {$ELSE}
  GutterWidth := aWidth;
  {$ENDIF}
end;

procedure TRMSynEditor.SetGroupUndo(aValue: Boolean);
begin
  {$IFDEF USE_SYNEDIT}
  if aValue then
    Options := Options + [eoGroupUndo]
  else
    Options := Options - [eoGroupUndo];
  {$ELSE}
  GroupUndo := aValue;
  {$ENDIF}
end;

procedure TRMSynEditor.SetUndoAfterSave(aValue: Boolean);
begin
  {$IFDEF USE_SYNEDIT}
  {$ELSE}
  UndoAfterSave := aValue;
  {$ENDIF}
end;

procedure TRMSynEditor.SetReservedForeColor(aValue: TColor);
begin
  {$IFDEF USE_SYNEDIT}
  if Self.Highlighter <> nil then
    Self.Highlighter.KeywordAttribute.Foreground := aValue;
  {$ELSE}
  Colors.Reserved.ForeColor := aValue;
  {$ENDIF}
end;

procedure TRMSynEditor.SetCommentForeColor(aValue: TColor);
begin
  {$IFDEF USE_SYNEDIT}
  if Self.Highlighter <> nil then
    Self.Highlighter.CommentAttribute.Foreground := aValue;
  {$ELSE}
  Colors.Comment.ForeColor := aValue;
  {$ENDIF}
end;

procedure TRMSynEditor.RMClearUndoBuffer;
begin
  {$IFDEF USE_SYNEDIT}
  Self.ClearUndo;
  {$ELSE}
  UndoBuffer.Clear;
  {$ENDIF}
end;

function TRMSynEditor.RMCanCut: Boolean;
begin
  {$IFDEF USE_SYNEDIT}
  Result := Self.SelAvail;
  {$ELSE}
  Result := CanCut;
  {$ENDIF}
end;

function TRMSynEditor.RMCanCopy: Boolean;
begin
  {$IFDEF USE_SYNEDIT}
  Result := Self.SelAvail;
  {$ELSE}
  Result := CanCopy;
  {$ENDIF}
end;

function TRMSynEditor.RMCanPaste: Boolean;
begin
  {$IFDEF USE_SYNEDIT}
  Result := Self.CanPaste;
  {$ELSE}
  Result := CanPaste;
  {$ENDIF}
end;

function TRMSynEditor.RMCanUndo: Boolean;
begin
  {$IFDEF USE_SYNEDIT}
  Result := Self.CanUndo;
  {$ELSE}
  Result := UndoBuffer.CanUndo;
  {$ENDIF}
end;

function TRMSynEditor.RMCanRedo: Boolean;
begin
  {$IFDEF USE_SYNEDIT}
  Result := Self.CanRedo;
  {$ELSE}
  Result := UndoBuffer.CanUndo;
  {$ENDIF}
end;

procedure TRMSynEditor.RMClipBoardCut;
begin
  {$IFDEF USE_SYNEDIT}
  Self.CutToClipboard;
  {$ELSE}
  ClipBoardCut;
  {$ENDIF}
end;

procedure TRMSynEditor.RMClipBoardCopy;
begin
  {$IFDEF USE_SYNEDIT}
  Self.CopyToClipboard;
  {$ELSE}
  ClipBoardCopy;
  {$ENDIF}
end;

procedure TRMSynEditor.RMClipBoardPaste;
begin
  {$IFDEF USE_SYNEDIT}
  Self.PasteFromClipboard;
  {$ELSE}
  ClipBoardPaste;
  {$ENDIF}
end;

procedure TRMSynEditor.RMDeleteSelected;
begin
  {$IFDEF USE_SYNEDIT}
  {$ELSE}
  DeleteSelected;
  {$ENDIF}
end;

procedure TRMSynEditor.RMUndo;
begin
  {$IFDEF USE_SYNEDIT}
  Self.Undo;
  {$ELSE}
  UndoBuffer.Undo;
  {$ENDIF}
end;

procedure TRMSynEditor.RMRedo;
begin
  {$IFDEF USE_SYNEDIT}
  Self.Redo;
  {$ELSE}
  UndoBuffer.Undo;
  {$ENDIF}
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMToolbarComponent }

const
  ButtonWidth = 28;

constructor TRMToolbarComponent.Create(AOwner: TComponent);

  procedure _CreateBandsMenu;
  var
    bt: TRMBandType;
    item: TMenuItem;
  begin
    FBandsMenu := TPopupMenu.Create(AOwner);
    FBandsMenu.AutoHotkeys := maManual;
    FBandsMenu.OnPopup := OnBandMenuPopup;

    for bt := rmbtReportTitle to rmbtCrossFooter do
    begin
      item := TMenuItem.Create(FBandsMenu);
      item.Caption := RMBandNames[TRMBandType(bt)];
      item.Tag := Ord(bt);
      item.OnClick := OnAddBandEvent;
      FBandsMenu.Items.Add(item);
    end;
  end;

begin
  inherited Create(AOwner);
  FDesignerForm := TRMCustomDesignerForm(AOwner);
  FOldPageType := -1;
  Parent := FDesignerForm;
  BevelInner := bvLowered; //bvNone;
  BevelOuter := bvNone;
  Align := alLeft;
  ClientWidth := ButtonWidth + 2;
  FControlIndex := 3;

  FImageList := TImageList.Create(Self);
  FImageList.Width := 24;
  FImageList.Height := 24;
  FPopupMenuComponent := TPopupMenu.Create(Self);
  FPopupMenuComponent.AutoHotkeys := maManual;
  FPopupMenuComponent.Images := FImageList;

  FBtnNoSelect := TSpeedButton.Create(Self);
  with FBtnNoSelect do
  begin
    Parent := Self;
    Flat := True;
    Glyph.LoadFromResourceName(hInstance, 'RM_ComponentNoSelect');
    SetBounds(1, 1, ButtonWidth, ButtonWidth);
    AllowAllUp := True;
    GroupIndex := 1;
    OnClick := OnOB1ClickEvent;
    Tag := -1;
    ShowHint := True;
    RMSetStrProp(FBtnNoSelect, 'Hint', rmRes + 132);
  end;

  {$IFDEF USE_TB2K}
  FBtnUp := TSpeedButton.Create(Self);
  {$ELSE}
  FBtnUp := TRMToolbarButton.Create(Self);
  {$ENDIF}
  with FBtnUp do
  begin
    Parent := Self;
    Flat := True;
    Glyph.LoadFromResourceName(hInstance, 'RM_MYSPINUP');
    SetBounds(1, FBtnNoSelect.Top + FBtnNoSelect.Height, ButtonWidth, 16);
    Tag := -1;
    {$IFNDEF USE_TB2K}
    Repeating := True;
    {$ENDIF}
    OnClick := OnBtnUpClickEvent;
  end;

  {$IFDEF USE_TB2K}
  FBtnDown := TSpeedButton.Create(Self);
  {$ELSE}
  FBtnDown := TRMToolbarButton.Create(Self);
  {$ENDIF}
  with FBtnDown do
  begin
    Parent := Self;
    Flat := True;
    Glyph.LoadFromResourceName(hInstance, 'RM_MYSPINDOWN');
    SetBounds(1, Self.Height - 16, ButtonWidth, 16);
    Tag := -1;
    {$IFNDEF USE_TB2K}
    Repeating := True;
    {$ENDIF}
    OnClick := OnBtnDownClickEvent;
  end;

  _CreateBandsMenu;
  OnResize := OnResizeEvent;
end;

destructor TRMToolbarComponent.Destroy;
begin
  inherited;
end;

const
  DefaultControlBmps: array[0..4] of string = ('RM_ComponentMemo', 'RM_ComponentCalcMemo',
    'RM_ComponentPicture', 'RM_ComponentShape', 'RM_ComponentSubReport');
  DefaultControlTyps: array[0..4] of byte = (rmgtMemo, rmgtCalcMemo, rmgtPicture, rmgtShape,
    rmgtSubReport);
  DefaultControlHints: array[0..4] of Integer = (rmRes + 133, rmRes + 137, rmRes + 135,
    SInsShape, rmRes + 136);

procedure TRMToolbarComponent.CreateObjects;
var
  liNeedCreate: Boolean;
  i: Integer;
  liNowTop: Integer;
  lAddInObjectInfo: TRMAddinObjectInfo;
  lButton: TSpeedButton;

  procedure _CreateBandObject;
  var
    i: Integer;
    liButton: TSpeedButton;
  begin
    FObjectBand := TSpeedButton.Create(Self);
    with FObjectBand do
    begin
      Parent := Self;
      Flat := True;
      SetBounds(1, liNowTop, ButtonWidth, ButtonWidth);
      Glyph.LoadFromResourceName(hInstance, 'RM_ComponentBand');
      Tag := rmgtBand;
      AllowAllUp := True;
      GroupIndex := 1;
      OnClick := OnButtonBandClickEvent;
      OnMouseDown := OnOB2MouseDownEvent;
      ShowHint := True;
      RMSetStrProp(FObjectBand, 'Hint', rmRes + 134);
      Inc(liNowTop, ButtonWidth);
    end;

    for i := Low(DefaultControlBmps) to High(DefaultControlBmps) do
    begin
      liButton := TSpeedButton.Create(Self);
      with liButton do
      begin
        Parent := Self;
        Flat := True;
        SetBounds(1, liNowTop, ButtonWidth, ButtonWidth);
        Glyph.LoadFromResourceName(hInstance, DefaultControlBmps[i]);
        Tag := DefaultControlTyps[i];
        AllowAllUp := True;
        GroupIndex := 1;
        OnClick := OnOB2ClickEvent;
        OnMouseDown := OnOB2MouseDownEvent;
        ShowHint := True;
        RMSetStrProp(liButton, 'Hint', DefaultControlHints[i]);
        if i = 0 then
          FBtnMemoView := liButton;
      end;
      Inc(liNowTop, ButtonWidth);
    end;
  end;

begin
  if FDesignerForm.Page is TRMDialogPage then
    liNeedCreate := FOldPageType <> 1
  else
    liNeedCreate := FOldPageType <> 2;

  if not liNeedCreate then Exit;

  FSelectedObjIndex := -1;
  while ControlCount > 3 do
    Controls[3].Free;

  FControlIndex := 3;
  liNowTop := FBtnUp.Top + FBtnUp.Height;
  if FDesignerForm.Page is TRMDialogPage then FOldPageType := 1 else FOldPageType := 2;

  FObjectBand := nil;
  if FOldPageType = 2 then
    _CreateBandObject;

  for i := 0 to RMAddInsCount - 1 do
  begin
    lAddInObjectInfo := RMAddIns(i);
    if lAddInObjectInfo.IsPage and
      (((FOldPageType = 1) and (lAddInObjectInfo.IsControl)) or
      ((FOldPageType = 2) and (not lAddInObjectInfo.IsControl))) then
    begin
      lButton := TSpeedButton.Create(Self);
      with lButton do
      begin
        Parent := Self;
        Flat := True;
        SetBounds(1, liNowTop, ButtonWidth, ButtonWidth);
        AllowAllUp := True;
        OnClick := OnOB2ClickEvent;

        if lAddInObjectInfo.Page <> '' then
        begin
          GroupIndex := 0;
          OnClick := OnOB2ClickEvent_1;
        end
        else
        begin
          OnClick := OnOB2ClickEvent;
          OnMouseDown := OnOB2MouseDownEvent;
          GroupIndex := 1;
        end;

        ShowHint := True;
        Glyph.LoadFromResourceName(Hinstance, lAddInObjectInfo.ButtonBmpRes);
        Tag := rmgtAddIn + i;
        Hint := lAddInObjectInfo.ButtonHint;
      end;
    end;
    Inc(liNowTop, ButtonWidth);
  end;

  RefreshControls;
end;

procedure TRMToolbarComponent.OnButtonBandClickEvent(Sender: TObject);
var
  lPoint: TPoint;
begin
  if FDesignerForm.AutoChangeBandPos then
  begin
    lPoint := Point(TSpeedButton(Sender).Left, TSpeedButton(Sender).Top + TSpeedButton(Sender).Height);
    lPoint := ClientToScreen(lPoint);
    FBandsMenu.Popup(lPoint.X, lPoint.Y);
  end
  else
  begin
  end;
end;

procedure TRMToolbarComponent.OnOB2ClickEvent(Sender: TObject);
begin
  FBtnNoSelect.Down := not TSpeedButton(Sender).Down;
end;

procedure TRMToolbarComponent.OnOB2MouseDownEvent(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDesignerForm.ObjRepeat := ssShift in Shift;
  FDesignerForm.FWorkSpace.Cursor := crDefault;
  FSelectedObjIndex := TSpeedButton(Sender).Tag;
end;

procedure TRMToolbarComponent.OnAddInObectMenuItemClick(Sender: TObject);
begin
  FBtnNoSelect.Down := False;
  FDesignerForm.ObjRepeat := False;
  FDesignerForm.FWorkSpace.Cursor := crDefault;
  FSelectedObjIndex := TMenuItem(Sender).Tag;
end;

procedure TRMToolbarComponent.OnOB2ClickEvent_1(Sender: TObject);
var
  i, j: Integer;
  lPage: string;
  lMenuItem: TMenuItem;
  lPoint: TPoint;
  lBmp: TBitmap;
begin
  lPage := RMAddIns(TSpeedButton(Sender).Tag - rmgtAddIn).Page;
  FPopupMenuComponent.Items.Clear;
  FImageList.Clear;

⌨️ 快捷键说明

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