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