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

📄 rm_dbchart.pas

📁 中小企业管理系统------ ERP系统原代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  Result := True;
end;

procedure TRMDBChartView.Draw(aCanvas: TCanvas);
begin
  BeginDraw(aCanvas);
  Memo1.Assign(Memo);
  CalcGaps;
  ShowBackground;
  ShowChart;
  ShowFrame;
  RestoreCoord;
end;

procedure TRMDBChartView.StreamOut(Stream: TStream);
begin
  inherited StreamOut(Stream);
  Memo.Text := '';
end;

procedure TRMDBChartView.LoadFromStream(Stream: TStream);
var
  i, liCount: Integer;
  liSeries: TRMDBChartSeries;
begin
  inherited LoadFromStream(Stream);
  Clear;
  ChartDim3D := RMReadBoolean(Stream);
  ChartShowLegend := RMReadBoolean(Stream);
  ChartShowAxis := RMReadBoolean(Stream);
  FPrintType := RMReadByte(Stream);

  liCount := RMReadWord(Stream);
  for i := 1 to liCount do
  begin
    liSeries := AddSeries;
    Stream.Read(liSeries.ChartOptions, SizeOf(TRMDBChartOptions));
    liSeries.XField := RMReadString(Stream);
    liSeries.YField := RMReadString(Stream);
    liSeries.Title := RMReadString(Stream);
    liSeries.Color := RMReadInteger(Stream);
    liSeries.DataSet := RMReadString(Stream);
  end;
end;

procedure TRMDBChartView.SaveToStream(Stream: TStream);
var
  i: Integer;
  liSeries: TRMDBChartSeries;
begin
  LVersion := 1;
  inherited SaveToStream(Stream);
  RMWriteBoolean(Stream, ChartDim3D);
  RMWriteBoolean(Stream, ChartShowLegend);
  RMWriteBoolean(Stream, ChartShowAxis);
  RMWriteByte(Stream, FPrintType);

  RMWriteWord(Stream, FList.Count);
  for i := 0 to FList.Count - 1 do
  begin
    Stream.Write(Series[i].ChartOptions, SizeOf(TRMDBChartOptions));
    liSeries := Series[i];
    RMWriteString(Stream, liSeries.XField);
    RMWriteString(Stream, liSeries.YField);
    RMWriteString(Stream, liSeries.Title);
    RMWriteInteger(Stream, liSeries.Color);
    RMWriteString(Stream, liSeries.DataSet);
  end;
end;

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

procedure TRMDBChartView.ShowEditor;
var
  tmpForm: TRMDBChartForm;
  liStream: TMemoryStream;
begin
  liStream := TMemoryStream.Create;
  tmpForm := TRMDBChartForm.Create(Application);
  try
    SaveToStream(liStream);
    tmpForm.FDBChartView := Self;
    if tmpForm.ShowModal = mrOK then
    begin
      RMDesigner.BeforeChange;
      RMDesigner.AfterChange;
    end
    else
    begin
      liStream.Position := 0;
      RMVersion := RMCurrentVersion;
      LoadFromStream(liStream);
    end;
  finally
    liStream.Free;
    tmpForm.Free;
  end;
end;

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

function TRMDBChartView.GetViewCommon: string;
begin
  Result := '[DBChart]';
end;

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

procedure TRMDBChartForm.FillDatasets;
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  cmbDataSet.Items.BeginUpdate;
  CurReport.Dictionary.GetDatasetList(cmbDataSet.Items);
  if CurReport.MixVariablesAndDBFields then
  begin
    CurReport.Dictionary.GetCategoryList(sl);
    for i := 0 to sl.Count - 1 do
      cmbDataSet.Items.AddObject(sl[i], TObject(1));
  end;
  cmbDataSet.Items.EndUpdate;
  sl.Free;
end;

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

  Localize;
end;

procedure TRMDBChartForm.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(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(Label6, 'Caption', rmRes + 621);

  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);

  btnOk.Caption := RMLoadStr(SOk);
  btnCancel.Caption := RMLoadStr(SCancel);
end;

procedure TRMDBChartForm.LoadSeriesOptions;

  procedure SetButton(b: array of TSpeedButton; n: Integer);
  begin
    b[n].Down := True;
  end;

  procedure SetRButton(b: array of TRadioButton; n: Integer);
  begin
    b[n].Checked := True;
  end;

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

  chkChartShowLegend.Checked := FDBChartView.ChartShowLegend;
  chkChartShowAxis.Checked := FDBChartView.ChartShowAxis;
  chkChartDim3D.Checked := FDBChartView.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;

  cmbDataSet.ItemIndex := cmbDataSet.Items.IndexOf(FSeries.DataSet);
  cmbDataSetChange(nil);
  cmbXField.ItemIndex := cmbXField.Items.IndexOf(FSeries.XField);
  cmbYField.ItemIndex := cmbYField.Items.IndexOf(FSeries.YField);

  FBtnColor.CurrentColor := Fseries.Color;
  FBtnColor.Enabled := not chkSeriesMultiColor.Checked;
end;

procedure TRMDBChartForm.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
  FDBChartView.ChartShowLegend := chkChartShowLegend.Checked;
  FDBChartView.ChartShowAxis := chkChartShowAxis.Checked;
  FDBChartView.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.DataSet := cmbDataSet.Text;
  FSeries.XField := cmbXField.Text;
  FSeries.YField := cmbYField.Text;
  Fseries.Color := FBtnColor.CurrentColor;
end;

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

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

procedure TRMDBChartForm.FormShow(Sender: TObject);
var
  i: Integer;
begin
  FillDataSets;

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

  LoadSeriesOptions;
end;

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

procedure TRMDBChartForm.PopupMenu1Popup(Sender: TObject);
begin
  Delete1.Enabled := FSeries <> nil;
  EditTitle1.Enabled := FSeries <> nil;
  MoveUp1.Enabled := FSeries <> nil;
  MoveDown1.Enabled := FSeries <> nil;
end;

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

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

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

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

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

procedure TRMDBChartForm.cmbDataSetChange(Sender: TObject);
begin
  if cmbDataSet.ItemIndex < 0 then Exit;
  if Integer(cmbDataSet.Items.Objects[cmbDataSet.ItemIndex]) = 1 then
    CurReport.Dictionary.GetVariablesList(cmbDataSet.Items[cmbDataSet.ItemIndex], cmbXField.Items)
  else
    CurReport.Dictionary.GetFieldList(cmbDataSet.Items[cmbDataSet.ItemIndex], cmbXField.Items);

  cmbYField.Items.Assign(cmbXField.Items);
end;

procedure TRMDBChartForm.cmbDataSetDrawItem(Control: TWinControl;
  Index: Integer; aRect: TRect; State: TOwnerDrawState);
var
  Image: TImage;
  r: TRect;
begin
  r := ARect;
  r.Right := r.Left + 18;
  r.Bottom := r.Top + 16;
  OffsetRect(r, 2, 0);
  with TComboBox(Control) do
  begin
    Canvas.FillRect(ARect);
    if Control = cmbDataSet then
      Image := Image1
    else
      Image := Image2;
    Canvas.BrushCopy(r, Image.Picture.Bitmap, Rect(0, 0, 18, 16), clGreen);
    Canvas.TextOut(ARect.Left + 20, ARect.Top + 1, Items[Index]);
  end;
end;

initialization
  RMRegisterObjectByRes(TRMDBChartView, 'RM_DBCHAROBJECT', RMLoadStr(rmRes + 2503), TRMDBChartForm);

finalization

{$ENDIF}
end.



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

⌨️ 快捷键说明

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