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