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

📄 featuresmain.pas

📁 DevExpress公司出品的Borland Delphi和C++ Builder的控件(包含完整源代码)。 ExpressSpreadSheet:交叉数据表格控件。 一款Delphi
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    Copy(SelectionRect, False);
end;

procedure TFeaturesMainForm.actCutExecute(Sender: TObject);
begin
  with cxSpreadBook.ActiveSheet do
    Copy(SelectionRect, True);
end;

procedure TFeaturesMainForm.actAutomaticCalcExecute(Sender: TObject);
begin
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.AutoRecalc := TCustomAction(Sender).Checked;
  if cxSpreadBook.AutoRecalc then
  begin
    cxSpreadBook.Recalc;
    cxSpreadBook.UpdateControl;
  end;
end;

procedure TFeaturesMainForm.actRecalcFormulasExecute(Sender: TObject);
begin
  cxSpreadBook.Recalc();
  cxSpreadBook.UpdateControl;
end;

procedure TFeaturesMainForm.actBeveledLookandFeelExecute(Sender: TObject);
begin
  if (IsUpdate) then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.PainterType := TcxSSPainterType(TCustomAction(Sender).Checked);
end;

procedure TFeaturesMainForm.actCellLeftAlignExecute(Sender: TObject);
begin
  SetCellsStyle([svAlign], haLeft, 0, cbxFont.Text, []);
end;

procedure TFeaturesMainForm.actCellRightAlignExecute(Sender: TObject);
begin
  SetCellsStyle([svAlign], haRight, 0, cbxFont.Text, []);
end;

procedure TFeaturesMainForm.actCellCenterAlignExecute(Sender: TObject);
begin
  SetCellsStyle([svAlign], haCenter, 0, cbxFont.Text, []);
end;

procedure TFeaturesMainForm.actCellsExecute(Sender: TObject);
var
  AForm :TFeatureModifyForm;
const
  AFormType: array[Boolean] of TcxSSModifyType = (mtDelete, mtInsert);
begin
   if IsUpdate then Exit;
   AForm := TFeatureModifyForm.Create(Self);
   AForm.Top := (Top + Height) shr 1;
   AForm.Left := (Left + Width) shr 1;
   try
     if AForm.Execute(AFormType[TCustomAction(Sender).Tag = 1]) then
       with cxSpreadBook.ActiveSheet do
         case TCustomAction(Sender).Tag of
           0:
             DeleteCells(SelectionRect, AForm.Modify);
           1:
             InsertCells(SelectionRect, AForm.Modify);
         end;
   finally
     AForm.Free;
   end;
end;

procedure TFeaturesMainForm.actFormatCellsExecute(Sender: TObject);
begin
  with cxSpreadBook.ActiveSheet do
    FormatCells(SelectionRect);
end;

procedure TFeaturesMainForm.actHideCellsExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, True, True, False);
end;

procedure TFeaturesMainForm.actShowCellsExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, True, True, True);
end;

procedure TFeaturesMainForm.actHideColExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, True, False, False);
end;

procedure TFeaturesMainForm.actShowColExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, True, False, True);
end;

procedure TFeaturesMainForm.actBufferedpaintExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.BufferedPaint := TCustomAction(Sender).Checked;
end;

procedure TFeaturesMainForm.actShowcaptionsExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.ShowCaptionBar := TCustomAction(Sender).Checked;
end;

procedure TFeaturesMainForm.actShowgridExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.ShowGrid := TCustomAction(Sender).Checked;
end;

procedure TFeaturesMainForm.actShowheadersExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.ShowHeaders := TCustomAction(Sender).Checked;
end;

procedure TFeaturesMainForm.actShowformulasExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.ShowFormulas := TCustomAction(Sender).Checked;
end;

procedure TFeaturesMainForm.actR1C1ReferencestyleExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  TCustomAction(Sender).Checked := not TCustomAction(Sender).Checked;
  cxSpreadBook.R1C1ReferenceStyle := TCustomAction(Sender).Checked;
  pnCellRect.Caption := GetCellText(cxSpreadBook.ActiveSheet.SelectionRect, cxSpreadBook.R1C1ReferenceStyle);
end;

procedure TFeaturesMainForm.actMergeCellsExecute(Sender: TObject);
begin
  with cxSpreadBook.ActiveSheet do
    SetMergedState(SelectionRect, True);
end;

procedure TFeaturesMainForm.actSplitCellsExecute(Sender: TObject);
begin
  with cxSpreadBook.ActiveSheet do
    SetMergedState(SelectionRect, False);
end;

procedure TFeaturesMainForm.actFontExecute(Sender: TObject);
begin
  SetCellsStyle([svFontName], haGeneral, 0, cbxFont.Text, []);
end;

procedure TFeaturesMainForm.actFontSizeExecute(Sender: TObject);
var
  ASize: Integer;
begin
  if cxTryStrToInt(cbxSize.Text, ASize) then
    SetCellsStyle([svSize], haGeneral, ASize, cbxFont.Text, []);
end;

procedure TFeaturesMainForm.actSumExecute(Sender: TObject);
begin
  CalculateSummary(TComponent(Sender).Tag);
end;

procedure TFeaturesMainForm.actSortExecute(Sender: TObject);
const
  ASortType: array[0..1] of TcxSortType = (stAscending, stDescending);
begin
  with cxSpreadBook.ActiveSheet do
    Sort(SelectionRect, [ASortType[TCustomAction(Sender).Tag]]);
end;

procedure TFeaturesMainForm.actHideRowExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, False, True, False);
end;

procedure TFeaturesMainForm.actShowRowExecute(Sender: TObject);
begin
  if IsUpdate then Exit;
  with cxSpreadBook.ActiveSheet do
    SetVisibleState(SelectionRect, False, True, True);
end;

procedure TFeaturesMainForm.actUndoExecute(Sender: TObject);
begin
   cxSpreadBook.History.Undo(1);
end;

procedure TFeaturesMainForm.actUndoUpdate(Sender: TObject);
begin
  TCustomAction(Sender).Enabled := (cxSpreadBook.History.UndoActions.Count > 0) and
    not (ActiveMDIChild as TFeatureChildForm).IsEditorMode;
end;

procedure TFeaturesMainForm.actRedoUpdate(Sender: TObject);
begin
  TCustomAction(Sender).Enabled := (cxSpreadBook.History.RedoActions.Count > 0)
end;

procedure TFeaturesMainForm.actRedoExecute(Sender: TObject);
begin
  cxSpreadBook.History.Redo(1);
end;

procedure TFeaturesMainForm.pmUndoPopup(Sender: TObject);
var
  Item: TMenuItem;
  i: Integer;
begin
  while TPopUpMenu(Sender).Items.Count > 0 do
    TPopUpMenu(Sender).Items.Delete(0);
  with cxSpreadBook.History do
    for i:=0 to UndoActions.Count do
    begin
      Item := TMenuItem.Create(Sender as TComponent);
      if i < UndoActions.Count then
        Item.Caption := UndoActions[i].Description;
      Item.OnMeasureItem := MeasureItem;
      Item.OnDrawItem := DrawItem;
      Item.OnClick := UndoItemClick;
      TPopUpMenu(Sender).Items.Add(Item);
    end;
end;

procedure TFeaturesMainForm.pmRedoPopup(Sender: TObject);
var
  Item: TMenuItem;
  i: Integer;
begin
  while TPopUpMenu(Sender).Items.Count > 0 do
    TPopUpMenu(Sender).Items.Delete(0);
  with cxSpreadBook.History do
    for i:=0 to RedoActions.Count do
    begin
      Item := TMenuItem.Create(Sender as TComponent);
      if i < RedoActions.Count then
        Item.Caption := RedoActions[i].Description;
      Item.OnMeasureItem := MeasureItem;
      Item.OnDrawItem := DrawItem;
      Item.OnClick := RedoItemClick;
      TPopUpMenu(Sender).Items.Add(Item);
    end;
end;

procedure TFeaturesMainForm.UndoItemClick(Sender: TObject);
begin
  if TMenuItem(Sender).MenuIndex < TPopupMenu(TMenuItem(Sender).Owner).Items.Count - 1 then
    cxSpreadBook.History.Undo(TMenuItem(Sender).MenuIndex + 1)
end;

procedure TFeaturesMainForm.RedoItemClick(Sender: TObject);
begin
  if TMenuItem(Sender).MenuIndex < TPopupMenu(TMenuItem(Sender).Owner).Items.Count - 1 then
    cxSpreadBook.History.Redo(TMenuItem(Sender).MenuIndex + 1)
end;

procedure TFeaturesMainForm.MeasureItem(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
begin
  Width := 90;
  if TMenuItem(Sender).MenuIndex = TPopupMenu(TComponent(Sender).Owner).Items.Count - 1 then
    Height := ACanvas.TextHeight('W') + 10 else
  Height := ACanvas.TextHeight('W');
end;

procedure TFeaturesMainForm.DrawUndoRedoItem(PopupMenu: TPopupMenu; Sender: TMenuItem; ACanvas: TCanvas; ARect: TRect; Selected: Boolean; InfoStr: String);
  procedure UpdatePreviousItems(AIndex: Integer);
  var
    i: Integer;
    Rec: TRect;
  begin
    Rec := ARect;
    for i:=AIndex - 1 downto 0 do
    begin
      Rec := Rect(Rec.Left, ACanvas.TextHeight('W') * i, Rec.Right, ACanvas.TextHeight('W') * (i + 1));
      ACanvas.Brush.Color := clHighLight;
      ACanvas.Brush.Style := bsSolid;
      ACanvas.FillRect(Rec);
      ACanvas.TextRect(Rec, Rec.Left, Rec.Top, PopupMenu.Items[i].Caption);
    end;
  end;
  procedure DrawActionsCount();
  var
    Rec: TRect;
    Lft, Tp, ActionsCount, Btn: Integer;
    Str: String;
  begin
    if (PopupMenu.Items.Count - 1) = Sender.MenuIndex then
    begin
      Btn := (PopupMenu.Items.Count - 1) * ACanvas.TextHeight('W') - 1 + (ARect.Bottom -  ARect.Top);
      ActionsCount := Sender.MenuIndex;
    end else
    begin
      Btn := (PopupMenu.Items.Count - 1) * ACanvas.TextHeight('W') - 1 + FSummaryItemHeight + (ARect.Bottom -  ARect.Top);
      ActionsCount := Sender.MenuIndex + 1;
    end;
    Rec := Rect(ARect.Left + 1, (PopupMenu.Items.Count - 1) * ACanvas.TextHeight('W') + 1,
      ARect.Right - 1, Btn);

    ACanvas.Brush.Color := clMenu;
    ACanvas.Brush.Style := bsSolid;
    ACanvas.FillRect(Rec);

    Str := Format(InfoStr, [ActionsCount]);
    Lft := (Rec.Left + Rec.Right) div 2 - (ACanvas.TextWidth(Str) div 2);
    Tp := (Rec.Top + Rec.Bottom) div 2 - (ACanvas.TextHeight(Str) div 2);
    Frame3D(ACanvas, Rec, clBtnShadow, clBtnHighlight, 1);
    ACanvas.TextRect(Rec, Lft, Tp, Str);
  end;
  procedure UpdateNextItems(Index: Integer);
  var
    i: Integer;
    Rec: TRect;
  begin
    Rec := ARect;
    for i:=Index + 1 to PopupMenu.Items.Count - 2 do
    begin
      Rec := Rect(Rec.Left, Rec.Top + ACanvas.TextHeight('W'), Rec.Right, Rec.Bottom + ACanvas.TextHeight('W'));
      ACanvas.Brush.Color := clMenu;
      ACanvas.Brush.Style := bsSolid;
      ACanvas.FillRect(Rec);
      ACanvas.TextRect(Rec, Rec.Left, Rec.Top, PopupMenu.Items[i].Caption);
    end;
  end;
begin
  if Sender.MenuIndex = (PopupMenu.Items.Count - 1) then
  begin
    ACanvas.Brush.Color := clMenu;
    ACanvas.Brush.Style := bsSolid;
    ACanvas.FillRect(ARect);
    if Selected then
      UpdatePreviousItems(Sender.MenuIndex);
  end else
  begin
    if Selected then
    begin
      ACanvas.Brush.Color := clHighLight;
      ACanvas.Brush.Style := bsSolid;
      ACanvas.FillRect(Rect(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom));
      UpdatePreviousItems(Sender.MenuIndex);
    end
    else
    begin
      ACanvas.Brush.Color := clMenu;
      ACanvas.Brush.Style := bsSolid;
      ACanvas.FillRect(ARect);
      UpdateNextItems(Sender.MenuIndex);
    end;
    ACanvas.TextRect(ARect, ARect.Left, ARect.Top, Sender.Caption);
  end;
  DrawActionsCount;
end;

procedure TFeaturesMainForm.DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
var
  Str: String;
begin
  if TComponent(Sender).Owner.Name = 'pmUndo' then
    Str := 'Undo %d Actions'
  else
    Str := 'Redo %d Actions';
  DrawUndoRedoItem(TPopupMenu(TComponent(Sender).Owner), TMenuItem(Sender), ACanvas, ARect, Selected, Str);
end;

procedure TFeaturesMainForm.IsEditorMode(Sender: TObject);
begin
  TCustomAction(Sender).Enabled := not (ActiveMDIChild as TFeatureChildForm).IsEditorMode;
end;

end.
  

⌨️ 快捷键说明

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