📄 fr_chart.pas
字号:
if Memo.Count > 0 then
LegS := Memo[0] else
LegS := '';
if Memo.Count > 1 then
ValS := Memo[1] else
ValS := '';
if (LegS = '') or (ValS = '') then Exit;
if LegS[Length(LegS)] <> ';' then
LegS := LegS + ';';
if ValS[Length(ValS)] <> ';' then
ValS := ValS + ';';
if ChartOptions.IsSingle then
begin
Ser := ChartTypes[ChartOptions.ChartType].Create(Chart);
Chart.AddSeries(Ser);
if ChartOptions.Colored then
Ser.ColorEachPoint := True;
Ser.Marks.Visible := ChartOptions.ShowMarks;
Ser.Marks.Style := TSeriesMarksStyle(ChartOptions.MarksStyle);
{$IFNDEF Delphi2}
Ser.Marks.Font.Charset := frCharset;
{$ENDIF}
c1 := 0;
for i := 1 to Length(LegS) do
if LegS[i] = ';' then Inc(c1);
c2 := 0;
for i := 1 to Length(ValS) do
if ValS[i] = ';' then Inc(c2);
if c1 <> c2 then Exit;
if (ChartOptions.Top10Num > 0) and (c1 > ChartOptions.Top10Num) then
SortValues(LegS, ValS);
i := 1; j := 1;
while i <= Length(LegS) do
begin
s := ExtractFieldName(ValS, j);
Ser.Add(Str2Float(s), ExtractFieldName(LegS, i), clTeeColor);
end;
end
else
begin
c1 := 0;
for i := 1 to Length(LegS) do
if LegS[i] = ';' then Inc(c1);
if c1 <> Memo.Count - 1 then Exit;
i := 1;
c1 := 1;
while i <= Length(LegS) do
begin
Ser := ChartTypes[ChartOptions.ChartType].Create(Chart);
Chart.AddSeries(Ser);
Ser.Title := ExtractFieldName(LegS, i);
Ser.Marks.Visible := ChartOptions.ShowMarks;
Ser.Marks.Style := TSeriesMarksStyle(ChartOptions.MarksStyle);
{$IFNDEF Delphi2}
Ser.Marks.Font.Charset := frCharset;
{$ENDIF}
ValS := Memo[c1];
if ValS[Length(ValS)] <> ';' then
ValS := ValS + ';';
j := 1;
while j <= Length(ValS) do
begin
s := ExtractFieldName(ValS, j);
Ser.Add(Str2Float(s), '', clTeeColor);
end;
Inc(c1);
end;
end;
PaintChart;
Result := True;
end;
procedure TfrChartView.Draw(Canvas: TCanvas);
begin
BeginDraw(Canvas);
Memo1.Assign(Memo);
CalcGaps;
if not ShowChart then
ShowBackground;
ShowFrame;
RestoreCoord;
end;
procedure TfrChartView.StreamOut(Stream: TStream);
begin
inherited StreamOut(Stream);
Memo.Text := '';
end;
procedure TfrChartView.LoadFromStream(Stream: TStream);
var
b: Byte;
s: TStream;
begin
inherited LoadFromStream(Stream);
FPicture.Clear;
Stream.Read(b, 1);
if b = 1 then
begin
s := TMemoryStream.Create;
s.CopyFrom(Stream, frReadInteger(Stream));
s.Position := 0;
FPicture.LoadFromStream(s);
s.Free;
end
else with Stream do
begin
Read(ChartOptions, SizeOf(ChartOptions));
LegendObj := frReadString(Stream);
ValueObj := frReadString(Stream);
Top10Label := frReadString(Stream);
end;
end;
procedure TfrChartView.SaveToStream(Stream: TStream);
var
b: Byte;
s: TStream;
EMF: TMetafile;
begin
inherited SaveToStream(Stream);
if (Memo.Count = 0) and (LegendObj = '') and (ValueObj = '') then
begin
b := 1;
Stream.Write(b, 1);
s := TMemoryStream.Create;
EMF := FChart.TeeCreateMetafile(False, Rect(0, 0, DX, DY));
EMF.SaveToStream(s);
EMF.Free;
s.Position := 0;
frWriteInteger(Stream, s.Size);
Stream.CopyFrom(s, 0);
s.Free;
end
else with Stream do
begin
b := 0; // internal chart version
Write(b, 1);
Write(ChartOptions, SizeOf(ChartOptions));
frWriteString(Stream, LegendObj);
frWriteString(Stream, ValueObj);
frWriteString(Stream, Top10Label);
end;
end;
procedure TfrChartView.DefinePopupMenu(Popup: TPopupMenu);
begin
// no specific items in popup menu
end;
procedure TfrChartView.OnHook(View: TfrView);
var
i: Integer;
s: String;
begin
if (ValueObj <> '') and (LegendObj <> '') and (Memo.Count < 2) then
begin
Memo.Clear;
Memo.Add('');
Memo.Add('');
end;
i := -1;
if AnsiCompareText(View.Name, LegendObj) = 0 then
begin
i := 0;
Inc(CurStr);
end
else if AnsiCompareText(View.Name, ValueObj) = 0 then
i := CurStr;
if ChartOptions.IsSingle then
CurStr := 1;
if i >= 0 then
begin
if Memo.Count <= i then
while Memo.Count <= i do
Memo.Add('');
if THackView(View).Memo1.Count > 0 then
begin
s := THackView(View).Memo1[0];
// if LastLegend <> s then
Memo[i] := Memo[i] + s + ';';
LastLegend := s;
end;
end;
end;
procedure TfrChartView.ShowEditor;
procedure SetButton(b: Array of TfrSpeedButton; n: Integer);
begin
b[n].Down := True;
end;
function GetButton(b: Array of TfrSpeedButton): Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to High(b) do
if b[i].Down then
Result := i;
end;
procedure SetRButton(b: Array of TRadioButton; n: Integer);
begin
b[n].Checked := True;
end;
function GetRButton(b: Array of TRadioButton): Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to High(b) do
if b[i].Checked then
Result := i;
end;
begin
with frChartForm do
begin
Page1.ActivePage := Tab1;
with ChartOptions do
begin
SetButton([SB1, SB2, SB3, SB4, SB5, SB6], ChartType);
SetRButton([RB1, RB2, RB3, RB4, RB5], MarksStyle);
CB1.Checked := Dim3D;
CB2.Checked := IsSingle;
CB3.Checked := ShowLegend;
CB4.Checked := ShowAxis;
CB5.Checked := ShowMarks;
CB6.Checked := Colored;
E1.Text := LegendObj;
E2.Text := ValueObj;
E3.Text := IntToStr(Top10Num);
E4.Text := Top10Label;
if ShowModal = mrOk then
begin
frDesigner.BeforeChange;
ChartType := GetButton([SB1, SB2, SB3, SB4, SB5, SB6]);
MarksStyle := GetRButton([RB1, RB2, RB3, RB4, RB5]);
Dim3D := CB1.Checked;
IsSingle := CB2.Checked;
ShowLegend := CB3.Checked;
ShowAxis := CB4.Checked;
ShowMarks := CB5.Checked;
Colored := CB6.Checked;
LegendObj := E1.Text;
ValueObj := E2.Text;
Top10Num := StrToInt(E3.Text);
Top10Label := E4.Text;
end;
end;
end;
end;
procedure TfrChartView.ChartEditor(Sender: TObject);
begin
ShowEditor;
end;
{------------------------------------------------------------------------}
procedure TfrChartForm.Localize;
begin
Caption := frLoadStr(frRes + 590);
Tab1.Caption := frLoadStr(frRes + 591);
Tab2.Caption := frLoadStr(frRes + 592);
Tab3.Caption := frLoadStr(frRes + 604);
GroupBox1.Caption := frLoadStr(frRes + 593);
GroupBox2.Caption := frLoadStr(frRes + 594);
GroupBox3.Caption := frLoadStr(frRes + 595);
GroupBox4.Caption := frLoadStr(frRes + 605);
GroupBox5.Caption := frLoadStr(frRes + 611);
CB1.Caption := frLoadStr(frRes + 596);
CB2.Caption := frLoadStr(frRes + 597);
CB3.Caption := frLoadStr(frRes + 598);
CB4.Caption := frLoadStr(frRes + 599);
CB5.Caption := frLoadStr(frRes + 600);
CB6.Caption := frLoadStr(frRes + 601);
RB1.Caption := frLoadStr(frRes + 606);
RB2.Caption := frLoadStr(frRes + 607);
RB3.Caption := frLoadStr(frRes + 608);
RB4.Caption := frLoadStr(frRes + 609);
RB5.Caption := frLoadStr(frRes + 610);
Label1.Caption := frLoadStr(frRes + 602);
Label2.Caption := frLoadStr(frRes + 603);
Label3.Caption := frLoadStr(frRes + 612);
Label4.Caption := frLoadStr(frRes + 613);
Label5.Caption := frLoadStr(frRes + 614);
Button1.Caption := frLoadStr(SOk);
Button2.Caption := frLoadStr(SCancel);
end;
procedure TfrChartForm.FormShow(Sender: TObject);
begin
Localize;
end;
initialization
frChartForm := TfrChartForm.Create(nil);
frRegisterObject(TfrChartView, frChartForm.Image1.Picture.Bitmap,
IntToStr(SInsChart));
finalization
frChartForm.Free;
frChartForm := nil;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -