80
最 新 评 论
80
专 题 分 类
80
最 新 日 志
80
最 新 留 言
80
搜 索
用 户 登 录
友 情 连 接
我 的 好 友
80
博 客 信 息
80


Delphi 2005 TDBChart和TCHART使用例子 | 2009/11/13 21:17:00
procedure RedrawCoordinate(ChartTyle:integer);
var
      TBName:String;
      DBName:String;
      IP:string;
      User:string;
      PWD:string;
      PORT:string;
      MADOQuery:TADOQuery;
begin
      MADOQuery:=TADOQuery.Create(nil);
      MADOQuery.SQL.Clear;
      with MainForm do begin
      IP:=DBServerIP.Text;
      User:=DBSERVERUSER.Text;
      PWD:= DBSERVERPWD.Text;
      PORT:=DBSERVERPORT.Text;
      DBName:=DBSERVERDBName.Text;
      TBName:=DBTABLELIST.Text;
      end;
      if MADOQuery.Active=true then MADOQuery.Close;
      MADOQuery.ConnectionString:=
      'Provider=SQLOLEDB.1;Persist Security Info=True;'+
      'Password='+PWD+
      ';User ID='+User+
      ';Initial Catalog='+DBName+
      ';NetWork Library=DBMSSOCN;NetWork Address='+IP+','+PORT;
      MADOQuery.SQL.Add('select * from  '+TBName);
      MADOQuery.ExecSQL;
      MADOQuery.Active:=True;
      MainForm.PDBChart.Legend.Visible:=False;
      MainForm.PDBChart.SeriesList.Series[0].Active:=False;
      MainForm.PDBChart.SeriesList.Series[1].Active:=False;
      MainForm.PDBChart.SeriesList.Series[2].Active:=False;
      with MainForm.PDBChart.SeriesList.Series[ChartTyle] do begin
          Active:=True;
          MainForm.PDBChart.Title.Text.Clear;
          MainForm.PDBChart.Title.Text.add(MainForm.ZongZhou.Text);
          DataSource := MADOQuery;
          XLabelsSource := MainForm.HengZhou.Text;
          XValues.ValueSource := MainForm.HengZhou.Text;
          YValues.ValueSource := MainForm.ZongZhou.Text;
          Marks.Style := smsXValue;
          CheckDataSource;
      end;
      MADOQuery.Open;
end;
1、问题:通过Addxy方法给TChart添加标记(Mark)时,发现在TChart的横坐标会随着Mark而变化,后来发现通过以下方法可避免这种情况:双击TChart,点击Axis-> top or bottom ->labels,在styles中将labels的形式改为Value即可!
2、几个有用的属性:
        图表上的每个点都是有索引的,就象一个数组一样,在OnClickSeries事件中有个ValueIndex属性,该属性可以得到鼠标所点击的点的索引值(必须将Series的Point设置为可见,鼠标点击到那个点时才可以触发该事件)。
        xValue[index]、yValue[index]分别表示图表的索引为index的横纵坐标值,用这两个属性可以读取和设置索引为index的点的值,注意:不要用xValues和yValues,这两个属性也可以达到同样的目的,但是速度非常的慢。因为后两个在进行操作的时候可能要遍历整个图表上的值(个人观点)
      在MouseDown,MouseMove,Mouseup中,可以利用xScreentoValue(x),yScreentoValue(y)得到鼠标当时所在点对应在图表上的横纵坐标值。
e.g.

.......

private
  Nowindex:Integer;
  Cantuo:boolean;

........

procedure TfrmMain.Chart1ClickSeries(Sender: TCustomChart;
  Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  NowIndex:=ValueIndex;
end;

procedure TfrmMain.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=true;

end;

procedure TfrmMain.Chart1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=false;
end;

procedure TfrmMain.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Cantuo then
begin
  Series1.yValue[NowIndex]:=  Series1.yScreenToValue(y) ;
end;
end;

这里即实现了可以在图表中拖动某一个点使其在纵轴上变化位置

阅读全文 | 回复(0) | 引用通告 | 编辑 | By: 皮皮爸爸
  • 标签:Delphi 
  • 发表评论:

      大名:
      密码: (游客无须输入密码)
      主页:
      标题:
      80
    Powered by Oblog.