2013-08-19 2 views
0

나는 구입하기 전에 TeeChart 소프트웨어를 사용해보고 있으며, 웹 사이트에서 지원 요청을 받았습니다. TScrollPagerTool을 사용하여 내 머리를 얻으려는 중입니다. 크기를 조정할 때 성능 문제가 발생합니다.TScrollPagerTool 문제

ScrollPagerTool.Series := Chart1.Series[0]; 

난 당신이 시리즈를 재 할당해야 할 이유를 모르지만 차트 크기를 조정하지 않습니다 : 당신이 스크롤 도구를 사용하는 경우 다음과 같은 줄을 추가하는 것이 좋습니다 차트 크기 조정 이벤트에서 그것없이. 더 나아가이 라인은 시리즈를 다시 효과적으로 추가합니다. 즉, 시리즈를 두 번, 다음으로 크기를 바꾸고, 시리즈를 세 번 반복하는 것입니다. 따라서 몇 가지 크기를 조정 한 후에 스크롤 할 때 성능 문제가 발생합니다.

누군가 내가이 권리 또는 다른 방법을 여기서하고 있는지 말해 줄 수 있습니까?

필요한 경우 더 많은 코드를 게시 할 수 있습니다.

답변

0

먼저 TScrollPagerToolTSubChartTool이며 주 시리즈의 클론을 사용합니다. 이것이 서브 시리즈가 Series이 할당 될 때 설정되는 이유입니다. 시리즈가 없으면 의미가 없기 때문입니다.

TeChart 버전에 따라, 차트에 사용할 계열을 계산하기 위해 시리즈에 할당 할 때 SubChart에 이미 그려진 기본 차트가 필요합니다 (ChartRect 초). 우리는 OnResize 행사에서 시리즈를 할당하는 이유입니다,하지만 난 당신이 작성 시간에 모든 것을 할 수 TeeChart는 VCL에서 볼 :

uses Series, TeeScrollPagerTool; 

procedure TForm1.FormCreate(Sender: TObject); 
begin   
    Chart1.AddSeries(TLineSeries).FillSampleValues; 
    (Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool).Series:=Chart1[0]; 
end; 

BUG : 나는 버그가 실제로 있었다 본 적이

, 당신이 말했듯이.

uses Series, TeeScrollPagerTool; 

var scrollPager1: TScrollPagerTool; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Chart1.Align:=alClient; 

    scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool; 

    Chart1.AddSeries(TLineSeries).FillSampleValues; 
    scrollPager1.Series:=Chart1[0]; 
end; 

procedure TForm1.Chart1Resize(Sender: TObject); 
begin 
    scrollPager1.Series:=Chart1[0]; 
end; 

내가 그것을 해결하기 위해 일부 내용을 변경했습니다 :

차트를 만들기 위해 OnResize 이벤트에 시리즈를 지정하고 subchart이 양식의 크기를 조정, 그것은 소스 시리즈는 또 다시 복제 할 만든

다음 버전에서는 Series 속성이 하위 차트의 모든 계열을 제거하고 할당 된 계열을 복제합니다. 따라서 여러 번 호출하면 더 많은 복제본이 생성되지는 않습니다. 또한 주 차트와 하위 차트 모두에 대해 ChartRect을 계산하는 SetUpScrollPager이 호출됩니다.

SetUpScrollPager도 공개되었으므로 OnResize 이벤트를 호출하여 시리즈를 추가 또는 삭제하지 않고 ChartRect을 조정해야합니다.

procedure TForm1.Chart1Resize(Sender: TObject); 
begin 
    scrollPager1.SetUpScrollPager; 
end; 

해결 방법 : 한편

, 여전히 SubChart의 모든 시리즈를 제거하고 소스 시리즈를 복제 시리즈의 속성을 사용할 수있는 실제 버전과 함께 OnResize 이벤트의 모든 :

procedure TForm1.Chart1Resize(Sender: TObject); 
begin 
    scrollPager1.SubChartTChart.RemoveAllSeries; 
    scrollPager1.Series:=Chart1[0]; 
end; 

관련 기능 :

ScollPager에서 여러 시리즈를 유지하는 방법? SubChartTChart 속성을 사용하여 하위 차트에 액세스하고 하위 차트에 시리즈를 추가/제거 할 수 있습니다. 그러나 Series 속성에는 여전히 하나의 시리즈가 필요합니다. 그래서 약간 까다로워집니다 :

uses Series, TeeScrollPagerTool; 

var scrollPager1: TScrollPagerTool; 

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
begin 
    Chart1.Align:=alClient; 

    scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool; 

    for i:=0 to 4 do 
    begin 
    Chart1.AddSeries(TLineSeries).FillSampleValues; 
    if scrollPager1.Series=nil then 
     scrollPager1.Series:=Chart1[i] 
    else 
     scrollPager1.SubChartTChart.AddSeries(CloneChartSeries(Chart1[i])); 
    end; 
end; 

그래서 나는 새로운 AddSeries(const Value: TChartSeries) 메서드를 추가했습니다. 그것을 사용하여 ScrollPager에 여러 시리즈를 추가하십시오.

for i:=0 to 4 do 
    begin 
    Chart1.AddSeries(TLineSeries).FillSampleValues; 
    scrollPager1.AddSeries(Chart1[i]); 
    end; 
+0

안녕하세요, Yeray, 신속한 회신에 감사드립니다. – Maklom

+0

와프 스는 내 의견을 끝내지 못했지만, 위의 답변은 아직 그리 많지 않습니다. 크기 조정에서 위의 코드 조각 중 하나를 사용하면 차트와 스크롤 페이저의 기능이 없어서 원하는 모양이 아닌 크기로 조정됩니다. 이 코드를 사용해도 차트 크기를 조정할 수 있습니까? – Maklom

+0

방금 ​​중요한 걸 발견했습니다. 2 개의 diff 버전이 2 대의 컴퓨터에서 실행됩니다. v2012.07.121105 XE3을 사용하는 32 비트 VCL에는 성능 문제가 있습니다. 델파이 7을 사용하는 v2013.08.130521은 똑같은 코드를 사용하여 성능 문제가 없습니다. 뭐야 ...? – Maklom