📄 rm_dbchart.pas
字号:
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 + -