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

📄 teexml.pas

📁 第三方控件:PaintGrid.pas 网格型仪表控件源文件 Mymeter.pas 圆型仪表控件源文件 Project1是这两个控件的使用范例。 该
💻 PAS
📖 第 1 页 / 共 2 页
字号:
          if tmpX='' then {$IFDEF CLR}tmpValueX:=nil{$ELSE}VarClear(tmpValueX){$ENDIF}  // 7.0
                     else tmpValueX:=tmpPointItem.GetNamedItem(tmpX);

          // Add point !

          if VarIsClear(tmpValue) then
             if VarIsClear(tmpValueX) then
                tmpSeries.AddNull(tmpTex)
             else
                tmpSeries.AddNullXY({$IFDEF CLR}Convert.ToDouble{$ENDIF}(tmpValueX.NodeValue),0,tmpTex)
          else
          if VarIsClear(tmpValueX) then
             tmpSeries.Add({$IFDEF CLR}Convert.ToDouble{$ENDIF}(tmpValue.NodeValue),tmpTex,tmpCol)
          else
             tmpSeries.AddXY({$IFDEF CLR}Convert.ToDouble{$ENDIF}(tmpValueX.NodeValue),
                             {$IFDEF CLR}Convert.ToDouble{$ENDIF}(tmpValue.NodeValue),tmpTex,tmpCol)
        end;
      end;
    end;
  end
  else XMLError('No <points> node.');
end;

Function TTeeXMLSource.CreateAndLoadXML:XmlDocument;
begin
  {$IFDEF LINUX}
  result:=0;
  {$ELSE}

  {$IFDEF CLR}
  result:=System.Xml.XmlDocument.Create;
  {$ELSE}
  result:=CreateOleObject('MSXML.DomDocument');
  result.Async:=False;
  {$ENDIF}

  if FXML.Count>0 then
     result.LoadXML(FXML.Text)
  else
  if FileName<>'' then
  begin
    {$IFDEF CLR}
    result.Load(FileName);
    {$ELSE}
    if not result.Load(FileName) then
       XMLError('Cannot load '+FileName);
    {$ENDIF}
  end;

  {$ENDIF}
end;

procedure TTeeXMLSource.Load;
var tmpSeries : XmlNodeList;
    t         : Integer;
    tmp       : String;
    tmpTitle  : XmlNode;
    tmpFound  : Boolean;
begin
  if not (csDesigning in ComponentState) then
  if Assigned(Series) or Assigned(Chart) then
  if (FileName<>'') or (XML.Count>0) then
  begin
    CloseXML;
    FXMLDocument:=CreateAndLoadXML;
    tmpSeries:=FXMLDocument.getElementsByTagName('series');

    if VarIsClear(tmpSeries) then
       XMLError('No <series> nodes.')
    else
    begin
      if not Assigned(Series) then
         Chart.FreeAllSeries;

      if SeriesNode='' then
      begin
        if tmpSeries.Length>0 then
        for t:=0 to tmpSeries.Length-1 do
        begin
          LoadSeriesNode(tmpSeries{$IFNDEF CLR}.Item{$ENDIF}[t]);

          if Assigned(Series) then
             break;
        end
        else
           XMLError('Empty <series> node.');
      end
      else
      begin
        tmpFound:=False;

        for t:=0 to tmpSeries.Length-1 do
        begin
          tmpTitle:=tmpSeries{$IFNDEF CLR}.Item{$ENDIF}[t].Attributes.GetNamedItem('title');

          if not VarIsClear(tmpTitle) then  // 6.01
          begin
            tmp:=tmpTitle.NodeValue;

            if UpperCase(tmp)=UpperCase(SeriesNode) then
            begin
              LoadSeriesNode(tmpSeries{$IFNDEF CLR}.Item{$ENDIF}[t]);
              tmpFound:=True;
              break;
            end;
          end;
        end;

        if not tmpFound then
           XMLError('Series '+SeriesNode+' not found');
      end;
    end;
  end;
end;

Procedure TTeeXMLSource.FillSeries(AItems:TStrings);
var t         : Integer;
    tmpSeries : XmlNodeList;
    tmpXML    : {$IFDEF CLR}System.Xml{$ELSE}TeeXML{$ENDIF}.XmlDocument;
    tmpNode   : XmlNode;
begin
  tmpXML:=CreateAndLoadXML;
  try
    AItems.Clear;
    tmpSeries:=tmpXML.getElementsByTagName('series');

    if not VarIsClear(tmpSeries) then
       for t:=0 to tmpSeries.Length-1 do
       begin
         tmpNode:=tmpSeries{$IFNDEF CLR}.Item{$ENDIF}[t].Attributes.GetNamedItem('title');
         if not VarIsClear(tmpNode) then
            AItems.Add(tmpNode.NodeValue);
       end;
  finally
    tmpXML{$IFDEF CLR}.Free{$ELSE}:=UnAssigned{$ENDIF};
  end;
end;

procedure TTeeXMLSource.SetSeriesNode(const Value: String);
begin
  if FSeriesNode<>Value then
  begin
    Close;
    FSeriesNode:=Value;
  end;
end;

procedure TTeeXMLSource.SetValueSource(const Value: String);
begin
  if FValueSource<>Value then
  begin
    Close;
    FValueSource:=Value;
  end;
end;

procedure TTeeXMLSource.SetChart(const Value: TCustomChart);
begin
  if FChart<>Value then
  begin
    {$IFDEF D5}
    if Assigned(FChart) then FChart.RemoveFreeNotification(Self);
    {$ENDIF}
    FChart:=Value;
    if Assigned(FChart) then FChart.FreeNotification(Self);
  end;
end;

procedure TTeeXMLSource.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if (Operation=opRemove) and Assigned(FChart) and (AComponent=FChart) then
     Chart:=nil;
end;

constructor TTeeXMLSource.Create(AOwner: TComponent);
begin
  inherited;
  FXML:=TStringList.Create;
end;

destructor TTeeXMLSource.Destroy;
begin
  FXML.Free;
  inherited;
end;

procedure TTeeXMLSource.SetXML(const Value: TStrings);
begin
  FXML.Assign(Value);
end;

procedure TTeeXMLSource.SetActive(const Value: Boolean);
begin
  if Value<>Active then
  begin
    inherited;

    if Active and (not Assigned(Series)) and (FileName<>'') then
       if not (csLoading in ComponentState) then Load;
  end;
end;

{ TXMLSourceEditor }
procedure TXMLSourceEditor.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
     EFile.Text:=OpenDialog1.FileName;
end;

procedure TXMLSourceEditor.EFileChange(Sender: TObject);
begin
  CBSeries.Clear;
  BApply.Enabled:=True;
end;

procedure TXMLSourceEditor.CBSeriesDropDown(Sender: TObject);
begin
  if CBSeries.Items.Count=0 then
     FillXMLSeries;
end;

Procedure TXMLSourceEditor.FillXMLSeries;
begin
  Screen.Cursor:=crHourGlass;
  try
    if EFile.Text<>'' then
    with TTeeXMLSource.Create(nil) do
    try
      FileName:=EFile.Text;
      FillSeries(CBSeries.Items);
    finally
      Free;
    end
    else
    if DataSource.XML.Count>0 then
       DataSource.FillSeries(CBSeries.Items);
  finally
    Screen.Cursor:=crDefault;
  end;
end;

procedure TXMLSourceEditor.CBSeriesChange(Sender: TObject);
begin
  BApply.Enabled:=True;
end;

procedure TXMLSourceEditor.BApplyClick(Sender: TObject);
begin
  inherited;

  CheckReplaceSource(DataSource);

  DataSource.FileName:=EFile.Text;

  with CBSeries do
  if ItemIndex=-1 then DataSource.SeriesNode:=''
                  else DataSource.SeriesNode:=Items[ItemIndex];

  DataSource.ValueSource:=ESource.Text;

  BApply.Enabled:=False;

  if CBLoadMode.ItemIndex=0 then
     DataSource.LoadMode:=lmClear
  else
     DataSource.LoadMode:=lmAppend;

  DataSource.Close;

  if (DataSource.FileName<>'') or (DataSource.XML.Count>0) then
     DataSource.Open; // 6.0
end;

procedure TXMLSourceEditor.FormShow(Sender: TObject);
begin
  inherited;

  LLabel.Visible:=False;
  CBSources.Visible:=False;

  if not Assigned(TheSeries) then exit;

  if TheSeries.DataSource is TTeeXMLSource then
     DataSource:=TTeeXMLSource(TheSeries.DataSource)
  else
  begin
    DataSource:=TTeeXMLSource.Create(TheSeries.Owner);
    DataSource.Name:=TeeGetUniqueName(DataSource.Owner,'TeeXMLSource');
  end;

  with DataSource do
  begin
    EFile.Text:=FileName;
    FillXMLSeries;

    if SeriesNode<>'' then
       with CBSeries do ItemIndex:=Items.IndexOf(SeriesNode);

    ESource.Text:=ValueSource;
    CBActive.Checked:=Active;

    if LoadMode=lmClear then
       CBLoadMode.ItemIndex:=0
    else
       CBLoadMode.ItemIndex:=1;
  end;

  BApply.Enabled:=Assigned(TheSeries) and (DataSource<>TheSeries.DataSource);
end;

procedure TXMLSourceEditor.FormDestroy(Sender: TObject);
begin
  if Assigned(DataSource) and
     (not Assigned(DataSource.Series)) then DataSource.Free;

  inherited;
end;

procedure TXMLSourceEditor.ESourceChange(Sender: TObject);
begin
  BApply.Enabled:=True;
end;

procedure TXMLSourceEditor.CBActiveClick(Sender: TObject);
begin
  DataSource.Active:=CBActive.Checked;
end;

procedure TXMLSourceEditor.FormCreate(Sender: TObject);
begin
  inherited;
  OpenDialog1.Filter:=TeeMsg_XMLFile+'|*.xml';
  {$IFDEF D6}
  SpeedButton1.HelpContext:=1865;
  {$ENDIF}
end;

procedure TXMLSourceEditor.CBLoadModeChange(Sender: TObject);
begin
  BApply.Enabled:=True;
end;

initialization
  RegisterClass(TTeeXMLSource);
  TeeSources.Add({$IFDEF CLR}TObject{$ENDIF}(TTeeXMLSource));
finalization
  TeeSources.Remove({$IFDEF CLR}TObject{$ENDIF}(TTeeXMLSource));
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -