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

📄 rm_chart.pas

📁 中小企业管理系统------ ERP系统原代码
💻 PAS
📖 第 1 页 / 共 3 页
字号:

  RMWriteFont(Stream, FChart.Legend.Font);
  RMWriteByte(Stream, Byte(FChart.Legend.Alignment));

  if PUseChartSetting then
  begin
    Stream.WriteComponent(FChart);
  end;
end;

procedure TRMChartView.DefinePopupMenu(Popup: TPopupMenu);
begin
  inherited DefinePopupMenu(Popup);
end;

procedure TRMChartView.Init;
var
  liIndex: Integer;
  liSeries: TRMChartSeries;
begin
  for liIndex := 0 to FList.Count - 1 do
  begin
    liSeries := Series[liIndex];
    if (liSeries.ValueObj <> '') and (liSeries.LegendObj <> '') then
    begin
      Memo.Clear;
      Memo.Add('');
      Memo.Add('');
      Break;
    end;
  end;
end;

procedure TRMChartView.OnHook(View: TRMView);
var
  liSeries: TRMChartSeries;
  liIndex, i: Integer;
  s: string;
begin
  for liIndex := 0 to FList.Count - 1 do
  begin
    liSeries := Series[liIndex];
    i := -1;
    if AnsiCompareText(View.Name, liSeries.LegendObj) = 0 then
      i := liIndex * 3 + 0
    else if AnsiCompareText(View.Name, liSeries.ValueObj) = 0 then
      i := liIndex * 3 + 1
    else if AnsiCompareText(View.Name, liSeries.LabelObj) = 0 then
      i := liIndex * 3 + 2;

    if i >= 0 then
    begin
      if Memo.Count <= i then
      begin
        while Memo.Count <= i do
          Memo.Add('');
      end;
      if THackView(View).Memo1.Count > 0 then
      begin
        s := THackView(View).Memo1[0];
        if s <> '' then
          Memo[i] := Memo[i] + s + ';';
      end;
    end;
  end;
end;

procedure TRMChartView.ShowEditor;
var
  tmpForm: TRMChartForm;
  liStream: TMemoryStream;
begin
  liStream := TMemoryStream.Create;
  tmpForm := TRMChartForm.Create(Application);
  try
    SaveToStream(liStream);
    liStream.Position := 0;
    RMVersion := RMCurrentVersion;
    tmpForm.FChartView.LoadFromStream(liStream);
    if tmpForm.ShowModal = mrOK then
    begin
      RMDesigner.BeforeChange;
      liStream.Clear;
      tmpForm.FChartView.SaveToStream(liStream);
      liStream.Position := 0;
      RMVersion := RMCurrentVersion;
      LoadFromStream(liStream);
      RMDesigner.AfterChange;
    end;
  finally
    liStream.Free;
    tmpForm.Free;
  end;
end;

procedure TRMChartView.ChartEditor(Sender: TObject);
begin
  ShowEditor;
end;

procedure TRMChartView.LegendFontEditor(Sender: TObject);
var
  t: TRMView;
  i: Integer;
  fd: TFontDialog;
begin
  RMDesigner.BeforeChange;
  fd := TFontDialog.Create(nil);
  try
    with fd do
    begin
      Font.Assign(Self.FChart.Legend.Font);
      if Execute then
      begin
        for i := 0 to RMDesigner.Page.Objects.Count - 1 do
        begin
          t := RMDesigner.Page.Objects[i];
          if t.Selected and ((t.Restrictions and RMrfDontModify) = 0) and (t is TRMChartView) then
            TRMChartView(t).FChart.Legend.Font.Assign(Font);
        end;
      end;
    end;
  finally
    RMDesigner.AfterChange;
    fd.Free;
  end;
end;

function TRMChartView.GetViewCommon: string;
begin
  Result := '[Chart]';
end;

function TRMChartView.GetUseChartSetting: Boolean;
begin
  Result := Flags and flChartUseChartSetting = flChartUseChartSetting;
end;

procedure TRMChartView.SetUseChartSetting(Value: Boolean);
begin
  Flags := Flags and (not flChartUseChartSetting);
{$IFDEF TeeChartPro}
  if Value then
    Flags := Flags + flChartUseChartSetting;
{$ENDIF}    
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMChartForm }

procedure TRMChartForm.FormCreate(Sender: TObject);
begin
  Page1.ActivePage := TabSheet1;
  FBtnColor := TRMColorPickerButton.Create(Self);
  FBtnColor.Parent := GroupBox3;
  FBtnColor.SetBounds(92, 34, 115, 25);

  FChartView := TRMChartView(RMCreateObject(gtAddin, 'TRMChartView'));
  Localize;
end;

procedure TRMChartForm.FormDestroy(Sender: TObject);
begin
  FChartView.Free;
end;

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

  RMSetStrProp(Self, 'Caption', rmRes + 590);
  RMSetStrProp(Tab1, 'Caption', rmRes + 591);
  RMSetStrProp(Tab2, 'Caption', rmRes + 592);
  RMSetStrProp(Tab3, 'Caption', rmRes + 604);
  RMSetStrProp(TabSheet1, 'Caption', rmRes + 597);
  RMSetStrProp(GroupBox1, 'Caption', rmRes + 593);
  RMSetStrProp(GroupBox2, 'Caption', rmRes + 594);
  RMSetStrProp(GroupBox3, 'Caption', rmRes + 595);
  RMSetStrProp(GroupBox4, 'Caption', rmRes + 605);
  RMSetStrProp(GroupBox5, 'Caption', rmRes + 611);
  RMSetStrProp(GroupBox6, 'Caption', rmRes + 595);

  RMSetStrProp(chkChartDim3D, 'Caption', rmRes + 596);
  RMSetStrProp(chkChartShowLegend, 'Caption', rmRes + 598);
  RMSetStrProp(chkChartShowAxis, 'Caption', rmRes + 599);

  RMSetStrProp(chkSeriesShowMarks, 'Caption', rmRes + 600);
  RMSetStrProp(chkSeriesMultiColor, 'Caption', rmRes + 601);

  RMSetStrProp(RB1, 'Caption', rmRes + 606);
  RMSetStrProp(RB2, 'Caption', rmRes + 607);
  RMSetStrProp(RB3, 'Caption', rmRes + 608);
  RMSetStrProp(RB4, 'Caption', rmRes + 609);
  RMSetStrProp(RB5, 'Caption', rmRes + 610);

  RMSetStrProp(Label1, 'Caption', rmRes + 602);
  RMSetStrProp(Label2, 'Caption', rmRes + 603);
  RMSetStrProp(Label3, 'Caption', rmRes + 612);
  RMSetStrProp(Label4, 'Caption', rmRes + 613);
  RMSetStrProp(Label5, 'Caption', rmRes + 614);
  RMSetStrProp(Label6, 'Caption', rmRes + 622);

  RMSetStrProp(Add1, 'Caption', rmRes + 616);
  RMSetStrProp(Delete1, 'Caption', rmRes + 617);
  RMSetStrProp(EditTitle1, 'Caption', rmRes + 618);
  RMSetStrProp(MoveUp1, 'Caption', rmRes + 619);
  RMSetStrProp(MoveDown1, 'Caption', rmRes + 620);

  RMSetStrProp(Button1, 'Caption', rmRes + 623);
  btnOk.Caption := RMLoadStr(SOk);
  btnCancel.Caption := RMLoadStr(SCancel);
end;

procedure TRMChartForm.LoadSeriesOptions;

  procedure SetButton(b: array of TSpeedButton; n: Integer);
  begin
    if (n >= Low(b)) and (n <= High(b)) then
      b[n].Down := True;
  end;

  procedure SetRButton(b: array of TRadioButton; n: Integer);
  begin
    if (n >= Low(b)) and (n <= High(b)) then
      b[n].Checked := True;
  end;

begin
  GroupBox1.Enabled := FSeries <> nil;
  GroupBox3.Enabled := FSeries <> nil;
  GroupBox2.Enabled := FSeries <> nil;
  GroupBox5.Enabled := FSeries <> nil;
  GroupBox4.Enabled := FSeries <> nil;

  chkChartShowLegend.Checked := FChartView.ChartShowLegend;
  chkChartShowAxis.Checked := FChartView.ChartShowAxis;
  chkChartDim3D.Checked := FChartView.ChartDim3D;

  if FSeries = nil then Exit;
  SetButton([SB1, SB2, SB3, SB4, SB5, SB6, SB6, SB7, SB8, SB9, SB10, SB11],
    FSeries.ChartOptions.ChartType);
  SetRButton([RB1, RB2, RB3, RB4, RB5], FSeries.ChartOptions.MarksStyle);
  chkSeriesShowMarks.Checked := FSeries.ChartOptions.ShowMarks;
  chkSeriesMultiColor.Checked := FSeries.ChartOptions.Colored;
  edtLegendObj.Text := FSeries.LegendObj;
  edtValueObj.Text := FSeries.ValueObj;
  edtLabelObj.Text := FSeries.LabelObj;
  editTop10Num.Text := IntToStr(FSeries.ChartOptions.Top10Num);
  edtTop10Label.Text := FSeries.Top10Label;
  FBtnColor.CurrentColor := Fseries.Color;
  FBtnColor.Enabled := not chkSeriesMultiColor.Checked;
end;

procedure TRMChartForm.SaveSeriesOptions;

  function GetRButton(b: array of TRadioButton): Integer;
  var
    i: Integer;
  begin
    Result := 0;
    for i := 0 to High(b) do
    begin
      if b[i].Checked then
        Result := i;
    end;
  end;

  function GetButton(b: array of TSpeedButton): Integer;
  var
    i: Integer;
  begin
    Result := 0;
    for i := 0 to High(b) do
    begin
      if b[i].Down then
        Result := i;
    end;
  end;

begin
  FChartView.ChartShowLegend := chkChartShowLegend.Checked;
  FChartView.ChartShowAxis := chkChartShowAxis.Checked;
  FChartView.ChartDim3D := chkChartDim3D.Checked;

  if FSeries = nil then Exit;

  FSeries.ChartOptions.ChartType := GetButton([SB1, SB2, SB3, SB4, SB5, SB6, SB7,
    SB8, SB9, SB10, SB11]);
  FSeries.ChartOptions.MarksStyle := GetRButton([RB1, RB2, RB3, RB4, RB5]);
  FSeries.ChartOptions.ShowMarks := chkSeriesShowMarks.Checked;
  FSeries.ChartOptions.Colored := chkSeriesMultiColor.Checked;

  FSeries.LegendObj := edtLegendObj.Text;
  FSeries.ValueObj := edtValueObj.Text;
  FSeries.LabelObj := edtLabelObj.Text;
  FSeries.ChartOptions.Top10Num := StrToInt(editTop10Num.Text);
  FSeries.Top10Label := edtTop10Label.Text;
  Fseries.Color := FBtnColor.CurrentColor;
end;

procedure TRMChartForm.Add1Click(Sender: TObject);
begin
  SaveSeriesOptions;
  FSeries := FChartView.AddSeries;
  ListBox1.Items.Add(FSeries.Title);
  ListBox1.ItemIndex := ListBox1.Items.Count - 1;
  LoadSeriesOptions;
end;

procedure TRMChartForm.Delete1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >= 0 then
  begin
    FChartView.DeleteSeries(ListBox1.ItemIndex);
    ListBox1.Items.Delete(ListBox1.ItemIndex);
    ListBox1.ItemIndex := 0;
    if ListBox1.ItemIndex >= 0 then
      FSeries := FChartView.Series[ListBox1.ItemIndex]
    else
      FSeries := nil;
    LoadSeriesOptions;
  end;
end;

procedure TRMChartForm.FormShow(Sender: TObject);
var
  i: Integer;
begin
  Button1.Visible := FChartView.PUseChartSetting;
  Tab1.TabVisible := not Button1.Visible;
  Tab3.TabVisible := not Button1.Visible;

  ListBox1.Clear;
  for i := 0 to FChartView.SeriesCount - 1 do
  begin
    ListBox1.Items.Add(FChartView.Series[i].Title);
  end;
  ListBox1.ItemIndex := 0;
  if ListBox1.ItemIndex >= 0 then
    FSeries := FChartView.Series[0]
  else
    FSeries := nil;
  LoadSeriesOptions;
end;

procedure TRMChartForm.ListBox1Click(Sender: TObject);
begin
  SaveSeriesOptions;
  if ListBox1.ItemIndex >= 0 then
    FSeries := FChartView.Series[ListBox1.ItemIndex]
  else
    FSeries := nil;
  LoadSeriesOptions;
end;

procedure TRMChartForm.PopupMenu1Popup(Sender: TObject);
begin
  Add1.Enabled := (not Button1.Visible);
  Delete1.Enabled := (FSeries <> nil) and (not Button1.Visible);
  EditTitle1.Enabled := (FSeries <> nil) and (not Button1.Visible);
  MoveUp1.Enabled := (FSeries <> nil) and (not Button1.Visible);
  MoveDown1.Enabled := (FSeries <> nil) and (not Button1.Visible);
end;

procedure TRMChartForm.MoveUp1Click(Sender: TObject);
var
  liIndex: Integer;
begin
  liIndex := ListBox1.ItemIndex;
  if liIndex > 0 then
  begin
    ListBox1.Items.Exchange(liIndex, liIndex - 1);
    FChartView.FList.Exchange(liIndex, liIndex - 1);
  end;
end;

procedure TRMChartForm.MoveDown1Click(Sender: TObject);
var
  liIndex: Integer;
begin
  liIndex := ListBox1.ItemIndex;
  if liIndex < ListBox1.Items.Count - 1 then
  begin
    ListBox1.Items.Exchange(liIndex, liIndex + 1);
    FChartView.FList.Exchange(liIndex, liIndex + 1);
  end;
end;

procedure TRMChartForm.btnOkClick(Sender: TObject);
begin
  SaveSeriesOptions;
end;

procedure TRMChartForm.EditTitle1Click(Sender: TObject);
begin
  if FSeries = nil then Exit;
  FSeries.Title := InputBox('', '', FSeries.Title);
  ListBox1.Items[ListBox1.ItemIndex] := FSeries.Title;
end;

procedure TRMChartForm.chkSeriesMultiColorClick(Sender: TObject);
begin
  FBtnColor.Enabled := not chkSeriesMultiColor.Checked;
end;

procedure TRMChartForm.Button1Click(Sender: TObject);
{$IFDEF TeeChartPro}
var
  i, lCount: Integer;
{$ENDIF}
begin
{$IFDEF TeeChartPro}
  SaveSeriesOptions;

  FChartView.Chart.View3D := FChartView.ChartDim3D;
  FChartView.Chart.Legend.Visible := FChartView.ChartShowLegend;
  FChartView.Chart.AxisVisible := FChartView.ChartShowAxis;

  EditChart(nil, FChartView.Chart);

  FChartView.ChartDim3D := FChartView.Chart.View3D;
  FChartView.ChartShowLegend := FChartView.Chart.Legend.Visible;
  FChartView.ChartShowAxis := FChartView.Chart.AxisVisible;

  lCount := FChartView.SeriesCount - FChartView.Chart.SeriesCount - 1;
  for i := 0 to lCount do
  begin
    FChartView.DeleteSeries(FChartView.SeriesCount - 1);
  end;

  lCount := FChartView.Chart.SeriesCount - FChartView.SeriesCount - 1;
  for i := 0 to lCount do
  begin
    FChartView.AddSeries;
  end;

  ListBox1.Items.Clear;
  for i := 0 to FChartView.SeriesCount - 1 do
  begin
    ListBox1.Items.Add(FChartView.Series[i].Title);
  end;
  ListBox1.ItemIndex := 0;
  if ListBox1.ItemIndex >= 0 then
    FSeries := FChartView.Series[0]
  else
    FSeries := nil;
  LoadSeriesOptions;
{$ENDIF}
end;

initialization
  RMRegisterObjectByRes(TRMChartView, 'RM_CHAROBJECT', RMLoadStr(SInsChart), TRMChartForm);

finalization

{$ENDIF}
end.



//此源码由程序太平洋收集整理发布,任何人都可自由转载,但需保留本站信息
//╭⌒╮┅~ ¤ 欢迎光临程序太平洋╭⌒╮
//╭⌒╭⌒╮╭⌒╮~╭⌒╮  ︶  ,︶︶
//,︶︶︶︶,''︶~~ ,''~︶︶  ,''
//╔ ╱◥███◣═╬╬╬╬╬╬╬╬╬╗
//╬ ︱田︱田 田 ︱          ╬
//╬       http://www.5ivb.net ╬
//╬  ╭○╮●                     ╬
//╬  /■\/■\                    ╬
//╬   <| ||    有希望,就有成功! ╬
//╬                 ╬
//╚╬╬╬╬╬╬╬╬╬╬╗  ╔╬╬╬╬╝
//
//说明:
//专业提供VB、.NET、Delphi、ASP、PB源码下载
//包括:程序源码,控件,商业源码,系统方案,开发工具,书籍教程,技术文档

⌨️ 快捷键说明

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