cxchartvieweditor.pas

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

PAS
725
字号
    btnItemAdd.OnClick := btnItemAddClick;
  end;
end;

procedure TcxChartViewEditor.UpdateEditor;
begin
  inherited;
  UpdateItemList;
end;

procedure TcxChartViewEditor.UpdateSelection;
begin
  inherited;
  UpdateActiveTab;
  FormEditor.ListBoxSynchronizeSelection(lbItems);
  UpdateButtons;
end;

procedure TcxChartViewEditor.UpdateItemList;
var
  ASelection: TStringList;
  AItemIndex, ATopIndex, I: Integer;
  AItem: TcxGridChartItem;
  S: string;
begin
  ListBoxSaveSelection(lbItems, ASelection, AItemIndex, ATopIndex);
  try
    lbItems.Items.Clear;
    for I := 0 to ItemCount - 1 do
    begin
      AItem := Items[I];
      S := AItem.Name + ' - "' + AItem.GetDisplayText + '"';
      lbItems.Items.AddObject(S, AItem);
    end;
  finally
    ListBoxRestoreSelection(lbItems, ASelection, AItemIndex, ATopIndex);
  end;
end;

procedure TcxChartViewEditor.RestoreListBoxParams;
begin
  lbItems.Items.BeginUpdate;
  try
    ListBoxRestorePos(lbItems, FListBoxItemIndex[ItemKind], FListBoxTopIndex[ItemKind]);
  finally
    lbItems.Items.EndUpdate;
    RedrawWindow(lbItems.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW);  // to fix the bug with scrollbar updating
  end;
end;

procedure TcxChartViewEditor.SaveListBoxParams;
begin
  ListBoxSavePos(lbItems, FListBoxItemIndex[ItemKind], FListBoxTopIndex[ItemKind]);
end;

class function TcxChartViewEditor.GetViewByObject(APersistent: TPersistent): TcxCustomGridView;
begin
  if APersistent is TcxGridChartItem then
    Result := TcxGridChartItem(APersistent).GridView
  else
    if APersistent is TcxGridChartDiagram then
      Result := TcxGridChartDiagram(APersistent).GridView
    else
      Result := inherited GetViewByObject(APersistent);
end;

procedure TcxChartViewEditor.lbItemsClick(Sender: TObject);
begin
  FormEditor.ListBoxApplySelection(lbItems, View);
end;

procedure TcxChartViewEditor.btnItemAddClick(Sender: TObject);
begin
  AddItem;
end;

procedure TcxChartViewEditor.btnItemAddExClick(Sender: TObject);

  procedure InitPopupMenu(APopupMenu: TPopupMenu; const AProvider: IcxGridChartViewItemsProvider);
  var
    I: Integer;
    ACaptions: TStringList;
  begin
    APopupMenu.Items.Clear;
    APopupMenu.Items.Add(CreateMenuItem(pmItems, 'Blank', miItemAddExClick));
    APopupMenu.Items.Add(CreateMenuItem(pmItems, '-'));

    ACaptions := TStringList.Create;
    try
      AProvider.GetItemCaptions(ItemClass, ACaptions);
      for I := 0 to ACaptions.Count - 1 do
        APopupMenu.Items.Add(CreateMenuItem(pmItems, ACaptions[I], miItemAddExClick,
          True, I, AProvider.GetItem(ItemClass, I) <> nil));
    finally
      ACaptions.Free;
    end;
  end;

  function GetPopupMenuPosition(AButton: TButton): TPoint;
  begin
    with AButton.BoundsRect do
      Result := Point(Left, Bottom);
    Result := AButton.Parent.ClientToScreen(Result);
  end;

begin
  InitPopupMenu(pmItemsAdd, DataController as IcxGridChartViewItemsProvider);
  with GetPopupMenuPosition(btnItemAdd) do
    pmItemsAdd.Popup(X, Y);
end;

procedure TcxChartViewEditor.miItemAddExClick(Sender: TObject);
var
  AIndex: Integer;
  AItem: TcxGridChartItem;
begin
  AIndex := (Sender as TMenuItem).Tag;
  if (AIndex = -1) or not (Sender as TMenuItem).Checked then
  begin
    View.BeginUpdate;
    try
      AItem := AddItem;
      if AIndex <> -1 then
      begin
        (DataController as IcxGridChartViewItemsProvider).InitItem(AItem, AIndex);
        UpdateDesigner;
      end;
    finally
      View.EndUpdate;
    end;
  end
  else
  begin
    SelectComponent(View);
    (DataController as IcxGridChartViewItemsProvider).GetItem(ItemClass, AIndex).Free;
    UpdateDesigner;
  end;
end;

procedure TcxChartViewEditor.btnItemDeleteClick(Sender: TObject);
begin
  if lbItems.SelCount > 0 then
  begin
    BeginUpdate;
    try
      ListBoxDeleteSelection(lbItems, True);
      FormEditor.ListBoxApplySelection(lbItems, View);
      UpdateDesigner;
    finally
      EndUpdate;
    end;
  end;
end;

procedure TcxChartViewEditor.btnItemMoveUpClick(Sender: TObject);
begin
  FItemPrevDragIndex := -1;
  ListBoxMoveItems(lbItems, Max(0, ListBoxGetFirstSelectedIndex(lbItems) - 1),
    FItemPrevDragIndex, ReindexItemsProc);
end;

procedure TcxChartViewEditor.btnItemMoveDownClick(Sender: TObject);
begin
  FItemPrevDragIndex := -1;
  ListBoxMoveItems(lbItems, Min(lbItems.Items.Count, ListBoxGetLastSelectedIndex(lbItems) + 2),
    FItemPrevDragIndex, ReindexItemsProc);
end;

procedure TcxChartViewEditor.btnItemSelectAllClick(Sender: TObject);
begin
  ListBoxSelectAll(lbItems);
  FormEditor.ListBoxApplySelection(lbItems, View);
end;

procedure TcxChartViewEditor.lbItemsStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  FItemPrevDragIndex := -1;
end;

procedure TcxChartViewEditor.lbItemsDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  ListBoxDragOver(lbItems, Sender, Source, X, Y, State, Accept, FItemPrevDragIndex);
end;

procedure TcxChartViewEditor.lbItemsDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  ListBoxDragDrop(lbItems, Sender, Source, X, Y, FItemPrevDragIndex, ReindexItemsProc);
end;

procedure TcxChartViewEditor.lbItemsEndDrag(Sender, Target: TObject; X,
  Y: Integer);
begin
  ListBoxEndDrag(lbItems, Sender, Target, X, Y, FItemPrevDragIndex);
end;

procedure TcxChartViewEditor.lbItemsDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TListBox, Canvas do
  begin
    FillRect(Rect);
    TextOut(Rect.Left + 3, Rect.Top + 3, Items[Index]);
  end;
end;

procedure TcxChartViewEditor.FormCreate(Sender: TObject);
begin
  inherited;
  with lbItems do
  begin
    Canvas.Font := Font;
    ItemHeight := 2 * 3 + Canvas.TextHeight('Qq');
  end;
end;

procedure TcxChartViewEditor.tcMainChanging(Sender: TObject; var AllowChange: Boolean);
begin
  SaveListBoxParams;
end;

procedure TcxChartViewEditor.tcMainChange(Sender: TObject);
begin
  IsActiveTabChanging := True;
  try
    UpdateItemList;
    RestoreListBoxParams;
    UpdateSelection;
  finally
    IsActiveTabChanging := False;
  end;
end;

{ TcxGridChartViewStorage }

function TcxGridChartViewStorage.GetDiagramArea: TcxGridChartAreaDiagram;
begin
  Result := View.DiagramArea;
end;

function TcxGridChartViewStorage.GetDiagramBar: TcxGridChartBarDiagram;
begin
  Result := View.DiagramBar;
end;

function TcxGridChartViewStorage.GetDiagramColumn: TcxGridChartColumnDiagram;
begin
  Result := View.DiagramColumn;
end;

function TcxGridChartViewStorage.GetDiagramLine: TcxGridChartLineDiagram;
begin
  Result := View.DiagramLine;
end;

function TcxGridChartViewStorage.GetDiagramPie: TcxGridChartPieDiagram;
begin
  Result := View.DiagramPie;
end;

function TcxGridChartViewStorage.GetLegend: TcxGridChartLegend;
begin
  Result := View.Legend;
end;

function TcxGridChartViewStorage.GetOptionsBehavior: TcxGridChartOptionsBehavior;
begin
  Result := View.OptionsBehavior;
end;

function TcxGridChartViewStorage.GetOptionsCustomize: TcxGridChartOptionsCustomize;
begin
  Result := View.OptionsCustomize;
end;

function TcxGridChartViewStorage.GetOptionsView: TcxGridChartOptionsView;
begin
  Result := View.OptionsView;
end;

function TcxGridChartViewStorage.GetTitle: TcxGridChartTitle;
begin
  Result := View.Title;
end;

function TcxGridChartViewStorage.GetToolBox: TcxGridChartToolBox;
begin
  Result := View.ToolBox;
end;

function TcxGridChartViewStorage.GetView: TcxGridChartView;
begin
  Result := TcxGridChartView(inherited View);
end;

class function TcxGridChartViewStorage.GetViewClass: TcxCustomGridViewClass;
begin
  Result := TcxGridChartView;
end;

{ TcxGridChartViewMenuProvider }

function TcxGridChartViewMenuProvider.GetGridView: TcxGridChartView;
begin
  Result := TcxGridChartView(inherited GridView);
end;

procedure TcxGridChartViewMenuProvider.ActivateDiagram(Sender: TcxGridViewMenuItem);
var
  ADiagram: TcxGridChartDiagram;
begin
  ADiagram := GridView.FindDiagramByDisplayText(Sender.Caption);
  if not ADiagram.Active then
  begin
    ADiagram.Active := True;
    DesignerModified;
  end;
  SelectObject(ADiagram);
end;

procedure TcxGridChartViewMenuProvider.CreateDataGroup(Sender: TcxGridViewMenuItem);
begin
  ObjectCreated(CreateChartItem(GridView, ciDataGroup));
end;

procedure TcxGridChartViewMenuProvider.CreateSeries(Sender: TcxGridViewMenuItem);
begin
  ObjectCreated(CreateChartItem(GridView, ciSeries));
end;

procedure TcxGridChartViewMenuProvider.InitLayoutItems;
var
  I: Integer;
begin
  inherited;
  for I := 0 to GridView.DiagramCount - 1 do
    Items.AddItem(GridView.Diagrams[I].DisplayText, ActivateDiagram, True,
      GridView.Diagrams[I].Active);
end;

procedure TcxGridChartViewMenuProvider.InitStructureItems;
begin
  Items.AddItem('Create Series', CreateSeries, CanAddComponent(GridView.Owner));
  Items.AddItem('Create DataGroup', CreateDataGroup, CanAddComponent(GridView.Owner));
  Items.AddSeparator;
  inherited;
end;

initialization
  RegisterViewEditorClass(TcxGridChartView, TcxChartViewEditor);
  RegisterDefaultViewStorage(TcxGridChartViewStorage);
  RegisterViewMenuProviderClass(TcxGridChartView, TcxGridChartViewMenuProvider);

finalization
  UnregisterViewMenuProviderClass(TcxGridChartView, TcxGridChartViewMenuProvider);
  UnregisterDefaultViewStorage(TcxGridChartViewStorage);
  UnregisterViewEditorClass(TcxGridChartView, TcxChartViewEditor);

end.

⌨️ 快捷键说明

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