2013-10-04 52 views
0

我使用要顯示的圖表中的數據的查詢:Steema TCharts軸標籤不可見

procedure TfrmUsage.ShowIndUsage(Sender: TObject); 
var 
    tmpQuery: TQuery; 
    mTotal: integer; 
    startMon: string; 
    g1: TSeriesGroup; 
begin 
    Series7.Active:= False; 
    Series0.Clear; 
    Series1.Clear; 
    Series2.Clear; 
    Series0.Active:= True; // member 0 
    Series1.Active:= True; // member 1 
    Series2.Active:= True; // membership total 
    tmpQuery:= TQuery.Create(nil); 
    chrtUsage.Title.Text.Clear; 
    with tmpQuery do begin 
    DatabaseName:= Sessions.CurrentSession.Databases[0].DatabaseName; 
    SessionName:= Sessions.CurrentSession.SessionName; 
    SQL.Text:= 'select trim(fname)||" "||trim(lname) from asamembr ' + ' where cust_code = :custCode ' + ' and mbr_code = :mbrCode '; 
    Params[0].AsString:= Self.fCustCode; 
    Params[1].AsString:= '0'; // self.fmbrCode; 
    Open; 
    chrtUsage.Title.Text.add('Usage for Member ' + Fields[0].AsString + ' (yellow)'); 
    Close; 
    Params[1].AsString:= '1'; // self.fmbrCode; 
    Open; 
    if not EOF then chrtUsage.Title.Text.add('Usage for Member ' + Fields[0].AsString + ' (red)') 
    else Series1.Active:= False; 

    chrtUsage.Title.Text.add('Usage for Membership (green)'); 
    Close; 

    SQL.Text:= 'select extend(usage_date, year to month), mbr_code, count(*) from as ambrhis ' + 
     ' where asambrhis.cust_code = :custCode ' + ' and usage_date > today - 1 units year ' + ' group by 1,2 order by 1 '; 
    Params[0].AsString:= Self.fCustCode; 
    try 
     Open; 
     mTotal:= 0; 
     startMon:= FormatDateTime('mmm/yyyy', Fields[0].AsDateTime); 
     while not EOF do begin 
     // chrtUsage.SeriesGroups.Items[0].Show; 
     chrtUsage.Axes.Bottom.Labels:= True; 
     chrtUsage.Axes.Bottom.LabelsSize:= 10; 
     chrtUsage.BottomAxis.Visible:= True; 
     chrtUsage.BottomAxis.Axis.Show; 
     if startMon <> FormatDateTime('mmm/yyyy', Fields[0].AsDateTime) then begin 
      Series2.add(mTotal, startMon); 
      // Series2.Add 
      if Series1.Active then // make sure we have all series bars 
      if Series0.Count < Series1.Count then Series0.add(0, startMon) 
      else if Series1.Count < Series0.Count then Series1.add(0, startMon); 
      startMon:= FormatDateTime('mmm/yyyy', Fields[0].AsDateTime); 
      mTotal:= 0; 
     end; 
     mTotal:= Fields[2].AsInteger + mTotal; 
     if Fields[1].AsString = '0' then Series0.add(Fields[2].AsInteger, startMon) 
     else if Fields[1].AsString = '1' then Series1.add(Fields[2].AsInteger, startMon); 
     Next; 
     end; 
     Series2.add(mTotal, startMon); 
     Close; 
    finally 
     tmpQuery.Free; 
    end; 
    end; 
end; 

在這裏,在該代碼變量startMon需要被顯示爲標籤爲底軸。請指導如何完成。 我已將標記設置爲Label和Value,然後在Bottom Axis中將標題設置爲Marks,或者我也嘗試過使用Value,但其中一個可以使用

+0

您應該真正看看您的縮進樣式。如果你按下ctrl + d,IDE會爲**你做**。哦,因爲這個事實導致了範圍的混淆。 – Johan

回答

0

代碼中有一些未知的變量類型和初始化用於測試它。但我可以解釋它是如何工作的。

默認情況下TChart使用標籤中找到的第一個可見系列的標籤。如果沒有系列標籤,仍默認顯示這些值。即:

uses Series, DateUtils; 

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
    startMon: string; 
begin 
    Chart1.View3D:=false; 

    with Chart1.AddSeries(TBarSeries) as TBarSeries do 
    begin 
    for i:=1 to 5 do 
    begin 
     startMon:=FormatDateTime('mmm/yyyy', IncMonth(Today, i)); 
     Add(i, startMon); 
    end; 
    end; 
end; 

而且可以使用LabelStyle屬性修改默認行爲。也就是說,要強制在上面的示例中顯示值,您在上面的示例中有一系列標籤:

Chart1.Axes.Bottom.LabelStyle:=talValue;