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

📄 rm_dbchart.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:
end;

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

procedure SetControlsEnabled(aControl: TWinControl; aEnabled: Boolean);
var
  i: Integer;
begin
  for i := 0 to aControl.ControlCount - 1 do
  begin
    aControl.Controls[i].Enabled := aEnabled;
  end;
end;

procedure TRMDBChartForm.FormCreate(Sender: TObject);
begin
  FDataSetBMP := TBitmap.Create;
  FFieldBMP := TBitmap.Create;

  FDataSetBMP.LoadFromResourceName(hInstance, 'RM_FLD1');
  FFieldBMP.LoadFromResourceName(hInstance, 'RM_FLD2');


  Page1.ActivePage := TabSheet1;
  FBtnColor := TRMColorPickerButton.Create(Self);
  FBtnColor.Parent := gpbSeriesOptions;
  FBtnColor.SetBounds(120, 34, 115, 25);

  cmbLegend.Items.Clear;
  cmbValue.Items.Assign(cmbLegend.Items);
  cmbLabel.Items.Assign(cmbLegend.Items);
  FChartView := TDBRMChartView(RMCreateObject(rmgtAddin, 'TDBRMChartView'));
  Localize;
end;

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

  FDataSetBMP.Free;
  FFieldBMP.Free;
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(gpbSeriesType, 'Caption', rmRes + 593);
  RMSetStrProp(gpbObjects, 'Caption', rmRes + 594);
  RMSetStrProp(gpbSeriesOptions, 'Caption', rmRes + 595);
  RMSetStrProp(gpbMarks, 'Caption', rmRes + 605);
  RMSetStrProp(gpbChartOptions, '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(rdbStyle1, 'Caption', rmRes + 606);
  RMSetStrProp(rdbStyle2, 'Caption', rmRes + 607);
  RMSetStrProp(rdbStyle3, 'Caption', rmRes + 608);
  RMSetStrProp(rdbStyle4, 'Caption', rmRes + 609);
  RMSetStrProp(rdbStyle5, 'Caption', rmRes + 610);

  RMSetStrProp(Label1, 'Caption', rmRes + 602);
  RMSetStrProp(Label2, 'Caption', rmRes + 603);
  RMSetStrProp(Label6, 'Caption', rmRes + 622);
  RMSetStrProp(Label7, '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);

  cmbSeriesType.Items.Clear;
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 624));
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 625));
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 626));
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 627));
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 628));
  cmbSeriesType.Items.Add(RMLoadStr(rmRes + 629));

  RMSetStrProp(cmbValue, 'Hint', rmRes + 630);
  RMSetStrProp(cmbLegend, 'Hint', rmRes + 630);

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

procedure TRMDBChartForm.LoadSeriesOptions;

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

begin
  SetControlsEnabled(gpbChartOptions, FSeries <> nil);
  SetControlsEnabled(gpbSeriesType, FSeries <> nil);
  SetControlsEnabled(gpbSeriesOptions, FSeries <> nil);
  SetControlsEnabled(gpbObjects, FSeries <> nil);
  SetControlsEnabled(gpbSeriesType, FSeries <> nil);

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

  if FSeries = nil then Exit;

  cmbSeriesType.ItemIndex := FSeries.ChartType;
  _SetRButton([rdbStyle1, rdbStyle2, rdbStyle3, rdbStyle4, rdbStyle5], FSeries.MarksStyle);
  chkSeriesShowMarks.Checked := FSeries.ShowMarks;
  chkSeriesMultiColor.Checked := FSeries.Colored;
  cmbLegend.Text := FSeries.LegendView;
  cmbValue.Text := FSeries.ValueView;
  cmbLabel.Text := FSeries.LabelView;
  FBtnColor.CurrentColor := Fseries.Color;
  FBtnColor.Enabled := not chkSeriesMultiColor.Checked;

  cmbDataSet.ItemIndex := cmbDataSet.Items.IndexOf(FSeries.DataSet);
  cmbDataSetChange(nil);
  cmbLegend.ItemIndex := cmbLegend.Items.IndexOf(FSeries.LegendView);
  cmbValue.ItemIndex := cmbValue.Items.IndexOf(FSeries.ValueView);
  cmbLabel.ItemIndex := cmbLabel.Items.IndexOf(FSeries.LabelView);
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;

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

  if FSeries = nil then Exit;

  if cmbSeriesType.ItemIndex >= 0 then
    FSeries.ChartType := cmbSeriesType.ItemIndex;
  FSeries.MarksStyle := _GetRButton([rdbStyle1, rdbStyle2, rdbStyle3, rdbStyle4, rdbStyle5]);
  FSeries.ShowMarks := chkSeriesShowMarks.Checked;
  FSeries.Colored := chkSeriesMultiColor.Checked;

  Fseries.Color := FBtnColor.CurrentColor;
  FSeries.DataSet := cmbDataSet.Text;
  FSeries.LegendView := cmbLegend.Text;
  FSeries.ValueView := cmbValue.Text;
  FSeries.LabelView := cmbLabel.Text;
end;

procedure TRMDBChartForm.Add1Click(Sender: TObject);
begin
  SaveSeriesOptions;
  FSeries := FChartView.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
    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 TRMDBChartForm.FormShow(Sender: TObject);
var
  i: Integer;

  procedure _GetDatasets;
  begin
    cmbDataSet.Items.BeginUpdate;
    FReport.Dictionary.GetDataSets(cmbDataSet.Items);
    cmbDataSet.Items.Insert(0, RMLoadStr(SNotAssigned));
    cmbDataSet.Items.EndUpdate;
  end;

begin
  _GetDataSets;

  Button1.Visible := FChartView.UseChartSetting;
  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 TRMDBChartForm.ListBox1Click(Sender: TObject);
begin
  SaveSeriesOptions;
  if ListBox1.ItemIndex >= 0 then
    FSeries := FChartView.Series[ListBox1.ItemIndex]
  else
    FSeries := nil;
  LoadSeriesOptions;
end;

procedure TRMDBChartForm.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 TRMDBChartForm.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 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);
    FChartView.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.Button1Click(Sender: TObject);
var
  i, lCount: Integer;
begin
  SaveSeriesOptions;

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

  TRMTeeChartUIPlugIn.Edit(FChartView.DBChart);

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

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

  lCount := FChartView.DBChart.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;
end;

procedure TRMDBChartForm.cmbSeriesTypeDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  s: string;
  liBitmap: TBitmap;
begin
  s := cmbSeriesType.Items[Index];
  liBitmap := TBitmap.Create;
  try
    ImageList1.GetBitmap(Index, liBitmap);
    cmbSeriesType.Canvas.FillRect(Rect);
    cmbSeriesType.Canvas.BrushCopy(
      Bounds(Rect.Left + 4, Rect.Top, liBitmap.Width, liBitmap.Height),
      liBitmap,
      Bounds(0, 0, liBitmap.Width, liBitmap.Height),
      liBitmap.TransparentColor);
    cmbSeriesType.Canvas.TextOut(Rect.Left + 10 + liBitmap.Width, Rect.Top + (Rect.Bottom - Rect.Top - cmbSeriesType.Canvas.TextHeight(s)) div 2, s);
  finally
    liBitmap.Free;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}

procedure TRMChartView_AssignChart(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TDBRMChartView(Args.Obj).AssignChart(TDBChart(V2O(Args.Values[0])));
end;

procedure RM_RegisterRAI2Adapter(RAI2Adapter: TJvInterpreterAdapter);
begin
  with RAI2Adapter do
  begin
    AddClass('ReportMachine', TDBChart, 'TDBChart');
    AddClass('ReportMachine', TDBRMChartView, 'TDBRMChartView');

    AddGet(TDBRMChartView, 'AssignChart', TRMChartView_AssignChart, 1, [0], varEmpty)
  end;
end;

procedure TRMDBChartForm.cmbDataSetChange(Sender: TObject);
begin
  if cmbDataSet.ItemIndex < 1 then
  begin
    cmbLegend.Items.Clear;
    cmbValue.Items.Clear;
    cmbLabel.Items.Clear;
    Exit;
  end;

  FReport.Dictionary.GetDataSetFields(cmbDataSet.Items[cmbDataSet.ItemIndex], cmbLegend.Items);
  cmbValue.Items.Assign(cmbLegend.Items);
  cmbLabel.Items.Assign(cmbLegend.Items);
end;

procedure TRMDBChartForm.cmbDataSetDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  s: string;
  lBmp: TBitmap;
begin
  with TComboBox(Control) do
  begin
    s := Items[Index];
    if Control = cmbDataSet then
      lBmp := FDataSetBMP
    else
      lBmp := FFieldBMP;

    Canvas.FillRect(Rect);
    Canvas.BrushCopy(
      Bounds(Rect.Left + 2, Rect.Top, lBmp.Width, lBmp.Height),
      lBmp,
      Bounds(0, 0, lBmp.Width, lBmp.Height),
      lBmp.TransparentColor);
    Canvas.TextOut(Rect.Left + 4 + lBmp.Width, Rect.Top, s);
  end;
end;

initialization
  uDBChartUIClassList := TList.Create;
  RMRegisterObjectByRes(TDBRMChartView, 'RM_DBCHAROBJECT', RMLoadStr(rmRes + 2503), TRMDBChartForm);

  RMInterpreter_Chart.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
  RM_RegisterRAI2Adapter(GlobalJvInterpreterAdapter);

finalization
  uDBChartUIClassList.Free;
  uDBChartUIClassList := nil;
{$ENDIF}
end.

⌨️ 快捷键说明

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