📄 teeseriestexted.pas
字号:
With tmp do
for t:=0 to ValuesList.Count-1 do
begin
StringGrid1.Cells[0,2+t]:=ValuesList[t].Name;
StringGrid1.Cells[1,2+t]:=GetFieldIndexSt(ValuesList[t].Name);
end;
end;
end;
end;
Procedure TSeriesTextEditor.SetOptions;
var t: Integer;
begin
With DataSource do
begin
if RBWeb.Checked then FileName:=EWeb.Text
else FileName:=EFile.Text;
HeaderLines:=UpDown1.Position;
Case CBSep.ItemIndex of
0: FieldSeparator:=',';
1: FieldSeparator:=' ';
2: FieldSeparator:=#9;
else
FieldSeparator:=CBSep.Text;
end;
Fields.Clear;
if CBSeries.ItemIndex<>-1 then
begin
Series:=SelectedSeries;
for t:=1 to StringGrid1.RowCount-1 do
begin
if StringGrid1.Cells[1,t]<>'' then
AddField(StringGrid1.Cells[0,t],StrToInt(StringGrid1.Cells[1,t]));
end;
end;
end;
end;
Function TSeriesTextEditor.SelectedSeries:TChartSeries;
begin
With CBSeries do
if ItemIndex=-1 then result:=nil
else result:=TChartSeries(Items.Objects[ItemIndex])
end;
procedure TSeriesTextEditor.Button1Click(Sender: TObject);
begin
SetOptions;
end;
procedure TSeriesTextEditor.ButtonLoadClick(Sender: TObject);
begin
Screen.Cursor:=crHourGlass;
try
SetOptions;
DataSource.Close; { 5.02 }
DataSource.Open;
finally
Screen.Cursor:=crDefault;
end;
end;
procedure TSeriesTextEditor.RBFileClick(Sender: TObject);
begin
EFile.Enabled:=RBFile.Checked;
RBWeb.Checked:=not RBFile.Checked;
EWeb.Enabled:=not EFile.Enabled;
BBrowse.Enabled:=EFile.Enabled;
EFileChange(Sender);
end;
procedure TSeriesTextEditor.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then EFile.Text:=OpenDialog1.FileName;
end;
{ TSeriesTextSource }
Constructor TSeriesTextSource.Create(AOwner: TComponent);
begin
inherited;
FFields:=TSeriesTextFields.Create(Self,TSeriesTextField);
FSeparator:=TeeDefaultFieldSeparator;
end;
Destructor TSeriesTextSource.Destroy;
begin
FFields.Free;
inherited;
end;
function TSeriesTextSource.AddField(const AName: String;
AIndex: Integer):TSeriesTextField;
begin
result:=TSeriesTextField(FFields.Add);
with result do
begin
FieldName:=AName;
FieldIndex:=AIndex;
end;
end;
procedure TSeriesTextSource.LoadFromStream(AStream: TStream);
var tmp : TStringList;
begin
inherited;
AStream.Position:=0;
tmp:=TStringList.Create;
try
tmp.LoadFromStream(AStream);
LoadFromStrings(tmp);
finally
tmp.Free;
end;
end;
procedure TSeriesTextSource.SetFields(const Value: TSeriesTextFields);
begin
FFields.Assign(Value);
end;
procedure TSeriesTextSource.LoadFromStrings(AStrings: TStrings);
Var St : String;
t,
tt : Integer;
tmpLabel,
tmpText : String;
tmpHasNot : Boolean;
tmpX : Double;
tmpValue : Double;
tmpValueList : TChartValueList; // 7.02
begin
if Assigned(Series) then
begin
{ by default, series has no X values }
tmpHasNot:=False;
{ prepare list of fields }
for tt:=0 to FFields.Count-1 do
With FFields[tt] do
begin
if Uppercase(FieldName)=Uppercase(TeeMsg_Text) then { text labels }
Data:=Series.Labels
else
begin
{ values }
if Uppercase(FieldName)=Uppercase(Series.NotMandatoryValueList.Name) then
begin
tmpHasNot:=True;
Data:=Series.NotMandatoryValueList;
end
else Data:=Series.GetYValueList(FieldName);
end;
end;
TeeFieldsSeparator:=FSeparator;
{ empty series }
Series.Clear;
{ loop all strings }
for t:=HeaderLines to AStrings.Count-1 do
begin
St:=AStrings[t];
if St<>'' then
begin
{ clear temporary values }
for tt:=0 to Series.ValuesList.Count-1 do
Series.ValuesList[tt].TempValue:=0;
tmpLabel:='';
{ set temporary values from loaded text string }
for tt:=0 to FFields.Count-1 do
With FFields[tt] do
begin
tmpText:=TeeExtractField(St,FieldIndex);
if Data=Series.Labels then tmpLabel:=tmpText
else
begin
tmpValueList:=TChartValueList(Data);
if Assigned(FOnGetValue) then
FOnGetValue(FFields[tt],tmpText,tmpValue)
else
if tmpValueList.DateTime then tmpValue:=StrToDateTime(tmpText)
else tmpValue:=StrToFloat(tmpText);
tmpValueList.TempValue:=tmpValue;
end;
end;
{ add new point to series }
With Series do
begin
if not tmpHasNot then tmpX:=Count
else tmpX:=NotMandatoryValueList.TempValue;
AddXY(tmpX,MandatoryValueList.TempValue,tmpLabel);
end;
end;
end;
{ tell changes to other series }
Series.RefreshSeries;
end;
end;
class function TSeriesTextSource.Description: String;
begin
result:=TeeMsg_TextFile;
end;
class function TSeriesTextSource.Editor: TComponentClass;
begin
result:=TSeriesTextEditor;
end;
{ TSeriesTextField }
procedure TSeriesTextField.SetFieldIndex(const Value: Integer);
begin
if Value>0 then FFieldIndex:=Value
else Raise Exception.Create(TeeMsg_SeriesTextFieldZero);
end;
{ TSeriesTextFields }
function TSeriesTextFields.Get(Index: Integer): TSeriesTextField;
begin
result:=TSeriesTextField(inherited Items[Index]);
end;
procedure TSeriesTextFields.Put(Index: Integer; const Value: TSeriesTextField);
begin
Items[Index].Assign(Value);
end;
procedure TSeriesTextEditor.FormCreate(Sender: TObject);
begin
inherited;
Align:=alClient;
BorderStyle:=TeeBorderStyle;
LLabel.Visible:=False;
CBSources.Visible:=False;
BBrowse.Flat:=True;
end;
procedure TSeriesTextEditor.BApplyClick(Sender: TObject);
begin
inherited;
CheckReplaceSource(DataSource);
SetOptions;
BApply.Enabled:=False;
DataSource.Open; { 5.02 }
end;
procedure TSeriesTextEditor.EFileChange(Sender: TObject);
begin
inherited;
if Pan.Visible then BApply.Enabled:=True;
end;
procedure TSeriesTextEditor.EWebChange(Sender: TObject);
begin
inherited;
EFileChange(Sender);
end;
procedure TSeriesTextEditor.CBSepChange(Sender: TObject);
begin
inherited;
EFileChange(Sender);
end;
procedure TSeriesTextEditor.Edit1Change(Sender: TObject);
begin
inherited;
EFileChange(Sender);
end;
procedure TSeriesTextEditor.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
inherited;
EFileChange(Sender);
end;
procedure TSeriesTextEditor.FormDestroy(Sender: TObject);
begin { free the temporary datasource }
if Assigned(DataSource) and InternalSource and
(not (csDesigning in DataSource.ComponentState)) and
(not Assigned(DataSource.Series)) then
DataSource.Free;
inherited;
end;
initialization
RegisterClass(TSeriesTextSource);
{$IFNDEF TEEOCX}
TeeSources.Add({$IFDEF CLR}TObject{$ENDIF}(TSeriesTextSource));
{$ENDIF}
finalization
{$IFNDEF TEEOCX}
TeeSources.Remove({$IFDEF CLR}TObject{$ENDIF}(TSeriesTextSource));
{$ENDIF}
UnRegisterClass(TSeriesTextSource);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -