⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teeseriestexted.pas

📁 TeeChart 7.0 With Source在Delphi 7.0中的安装
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      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 + -