有30行60列的数据,如何用tchart控件绘出坐标图,一行60个数据为一条线,行号用来标识是具体那一条曲线,要示图上一次只显示一条线,该如何做呢,那位大虾做过,请求指教,很急!谢谢了,本人才刚开始接触delphi许多东西不是很精通!救救我吧

解决方案 »

  1.   

    有自带DEMO的吖,看一下就知道了30条线并存
      

  2.   


    procedure TForm1.Button6Click(Sender: TObject);
    var
      i,s: integer;
    begin
    //例子
      for i:= 1 to 60 do
        Series5.Add(random(100),'ad',Series5.SeriesColor);
    //你的情况
      s:= 1;
      while not adoquery1.Eof do
      begin
        for i:= 0 to adoquery1.FieldCount -1 do
          (findcomponent('Series'+inttostr(s)) as TBarSeries).Add(adoquery1.Fields[i].AsFloat,adoquery1.Fields[i].FieldName,Series5.SeriesColor);
        adoquery1.Next;
        inc(s);
      end;
    end;
      

  3.   

    楼上大虾,能说的具体吗,我是要实现30条线并存,但每次chart上只能显示一条,如何设置隐藏其它29条呢,我实在是不懂啊,谢谢了
      

  4.   

    //这是第一条
    adoquery1.first;
    Series1.Clear;
    for i:= 0 to adoquery1.FieldCount -1 do
          Series1.Add(adoquery1.Fields[i].AsFloat,adoquery1.Fields[i].FieldName,Series5.SeriesColor);//要下一条就
    Series1.Clear;
    adoquery1.next;    //或你用其它感知控件调哪条记录,如DBNavigator,就会跳到那一行,再执行下面的就行了
    for i:= 0 to adoquery1.FieldCount -1 do
          Series1.Add(adoquery1.Fields[i].AsFloat,adoquery1.Fields[i].FieldName,Series5.SeriesColor);
      

  5.   


    //改回颜色//这是第一条 
    adoquery1.first; 
    Series1.Clear; 
    for i:= 0 to adoquery1.FieldCount -1 do 
          Series1.Add(adoquery1.Fields[i].AsFloat,adoquery1.Fields[i].FieldName,Series1.SeriesColor); //要下一条就 
    Series1.Clear; 
    adoquery1.next;    //或你用其它感知控件调哪条记录,如DBNavigator,就会跳到那一行,再执行下面的就行了 
    for i:= 0 to adoquery1.FieldCount -1 do 
          Series1.Add(adoquery1.Fields[i].AsFloat,adoquery1.Fields[i].FieldName,Series1.SeriesColor);
      

  6.   


    procedure TForm1.Button2Click(Sender: TObject);
    var series1:tlineseries;num:array[1..30,1..60]of double;
    i,j:integer;
    k,m:integer;
    beginseries1:=tlineseries.Create(chart1);series2:=tlineseries.create(chart1);series1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;for I := 1 to 30 do
    begin
      for j := 1 to 60 do
        begin
        num[i,j]:=random(100000);
        end;
    end;
    for k := 1 to 60 do
      case strtoint(edit1.Text) of
        1:series1.AddXY(k,num[1,k],inttostr(k),clteecolor);
        2:series2.AddXY(k,num[2,k],inttostr(k),clteecolor);
        3:series1.AddXY(k,num[3,k],inttostr(k),clteecolor);
        4:series1.AddXY(k,num[4,k],inttostr(k),clteecolor);
        5:series1.AddXY(k,num[5,k],inttostr(k),clteecolor);
        6:series1.AddXY(k,num[6,k],inttostr(k),clteecolor);
        7:series1.AddXY(k,num[7,k],inttostr(k),clteecolor);
        8:series1.AddXY(k,num[8,k],inttostr(k),clteecolor);
        9:series1.AddXY(k,num[9,k],inttostr(k),clteecolor);
        10:series1.AddXY(k,num[10,k],inttostr(k),clteecolor);
        11:series1.AddXY(k,num[11,k],inttostr(k),clteecolor);
        12:series1.AddXY(k,num[12,k],inttostr(k),clteecolor);
        13:series1.AddXY(k,num[13,k],inttostr(k),clteecolor);
        14:series1.AddXY(k,num[14,k],inttostr(k),clteecolor);
        15:series1.AddXY(k,num[15,k],inttostr(k),clteecolor);
        16:series1.AddXY(k,num[16,k],inttostr(k),clteecolor);
        17:series1.AddXY(k,num[17,k],inttostr(k),clteecolor);
        18:series1.AddXY(k,num[18,k],inttostr(k),clteecolor);
        19:series1.AddXY(k,num[19,k],inttostr(k),clteecolor);
        20:series1.AddXY(k,num[20,k],inttostr(k),clteecolor);
        21:series1.AddXY(k,num[21,k],inttostr(k),clteecolor);
        22:series1.AddXY(k,num[22,k],inttostr(k),clteecolor);
        23:series1.AddXY(k,num[23,k],inttostr(k),clteecolor);
        24:series1.AddXY(k,num[24,k],inttostr(k),clteecolor);
        25:series1.AddXY(k,num[25,k],inttostr(k),clteecolor);
        26:series1.AddXY(k,num[26,k],inttostr(k),clteecolor);
        27:series1.AddXY(k,num[27,k],inttostr(k),clteecolor);
        28:series1.AddXY(k,num[28,k],inttostr(k),clteecolor);
        29:series1.AddXY(k,num[29,k],inttostr(k),clteecolor);
        30:series1.AddXY(k,num[30,k],inttostr(k),clteecolor);
      end; chart1.AddSeries(series1);end;我的代码这样,请问这应该如何改呢?
      

  7.   

    for k := 1 to 60 do
      series1.add(num[strtoint(edit1.Text),k],inttstr(k),clteecolor);
      

  8.   

    Series1.Clear;  你都没加上这个
      

  9.   

    这条语句应该放到什么位置呢,我放for里面,结果就不出来线了,放for上边,和不放效果一样,郁闷呀
      

  10.   

    Series1.Clear;
    for k := 1 to 60 do 
      series1.add(num[strtoint(edit1.Text),k],inttstr(k),clteecolor); 
      

  11.   

    楼主,我先问一下,如果一切正常,series1所画出来的点有多少个?当然是指series1显示出来的时候,不是隐藏
      

  12.   

    chart1.AddSeries(series1); 去掉这个
      

  13.   

    var series1:tlineseries;  //直接在TCHAR里建一个procedure TForm1.Button2Click(Sender: TObject);
    num:array[1..30,1..60]of double;
    i,j:integer;
    k,m:integer;
    beginseries1:=tlineseries.Create(chart1);//series2:=tlineseries.create(chart1);series1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;for I := 1 to 30 do
    begin
      for j := 1 to 60 do
        begin
        num[i,j]:=random(100000);
        end;
    end;series1.clear;
    for k := 1 to 60 do 
      series1.add(num[strtoint(edit1.Text),k],inttstr(k),clteecolor);end;
      

  14.   

    把代码改成以下的:procedure TForm1.Button2Click(Sender: TObject);
    var series1:tlineseries;num:array[1..30,1..60]of double;
    i,j:integer;
    k,m:integer;
    begin
    series1:=tlineseries.Create(chart1);
    series2:=tlineseries.create(chart1);series1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;Series1.Clear;
    Series2.Clear;
    for I := 1 to 30 do
    begin
      for j := 1 to 60 do
        begin
          num[i,j]:=random(100000);
          series1.AddXY(i,j,floattostr(num[strtoint(edit1.text),j]),clteecolor);
          series1.visible:=false;
          if i=strtoint(edit1.text) then
          begin
            series2.AddXY(i,j,floattostr(num[strtoint(edit1.text),j]),clteecolor);
            series2.visible:=true;
          end;
        end;
    end;end;你再看看是否合你的要求
      

  15.   


    都叫你直接在控件里建一个series1.不动态建不就行了
      

  16.   

    右键点击TCHART,点EDIT CHART,然后点击ADD一个SERIES,就有一个SERIES1了!!我快晕倒了procedure TForm1.Button2Click(Sender: TObject);
    var 
      num:array[1..30,1..60]of double;
      i,j:integer;
      k,m:integer;
    beginseries1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;Series1.Clear;for k := 1 to 60 do 
      series1.add(num[strtoint(edit1.Text),k],inttstr(k),clteecolor);
    end;end;
      

  17.   

    我就是这样做的啊,没有动态创建series,可是就是不行
    或许还有其它什么办法可以实现吧
      

  18.   

    procedure TForm1.Button2Click(Sender: TObject);
    var 
    series1:tlineseries;
    num:array[1..30,1..60]of double;
    i,j:integer;
    k,m:integer;
    begin
    series1:=tlineseries.Create(chart1);series1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;Series1.Clear;
    for i := 1 to 30 do
    begin
      for j := 1 to 60 do
        begin
          num[i,j]:=random(100000);
          if i=strtoint(edit1.text) then
          begin
            series1.Add(j,floattostr(num[strtoint(edit1.text),j]),clteecolor);
          end;
        end;
    end;end;
    再试试
      

  19.   

    如果还不行,就把series1.Add(j,floattostr(num[strtoint(edit1.text),j]),clteecolor);
    中的j全部换成i再试试,行和列都被你搞糊涂了
      

  20.   

    右键点击TCHART,点EDIT CHART,然后点击ADD一个SERIES,就有一个SERIES1了!! 
    procedure TForm1.Button7Click(Sender: TObject);
    var
      num:array[1..30,1..60]of double;
      i,j:integer;
      k,m:integer;
    beginfor I := 1 to 30 do       //你原搬我的代码肯定没东西啦(前提在控件那里建series1), 你要加上左边的赋值才行吖! 这是最后一次回复
    begin
      for j := 1 to 60 do
        begin
        num[i,j]:=random(100000);
        end;
    end;Series1.Clear;for k := 1 to 60 do
      series1.add(num[strtoint(edit1.text),k],inttostr(k),clteecolor);end;
      

  21.   

    这位兄弟,我原来已经加上series了,就是按照双击chart,然后add加上的,我不是动态创建的
      

  22.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    num:array[1..30,1..60]of double;
    i,j:integer;
    k,m:integer;
    begin
    series1.Marks.Visible:=true;//设置标签值可见
    series1.Marks.Style:=smsvalue;Series1.Clear;
    for i := 1 to 30 do
    begin
      for j := 1 to 60 do
        begin
          num[i,j]:=random(100000);
          if i=strtoint(edit1.text) then
          begin
            series1.Addxy(j,num[i,j],'',clteecolor);
          end;
        end;
      end;
    end;
    再试一次,我已经测试了,看看是否是你要的结果