Page 1 of 1

vertically scaling each page

Posted: Wed Jan 18, 2017 10:45 pm
by 9339638
What is the best way to vertically scale each page of a series on a scrollable chart to full the entire chart display height? Scrollable like in your Tee#New.exe 'Scrollbar' example.
Unless there is a built in way that I do not know about, I am assuming that one must find the min & max values that are in the currently viewible series portion and scale with
Series1.GetVertAxis.SetMinMax(PageLow, PageHigh);
Is there another / built-in way?

Thanks,
Dave

Re: vertically scaling each page

Posted: Thu Jan 19, 2017 11:49 am
by 10050769
Hello Dave,

I have made a simple code where I have used a Scrollbar component vertically. Below you can show the code:

Code: Select all

uses Chart, TeeScroB, Series,TeeThemes;
var Chart1: TChart;
    ScrollBar1: TChartScrollBar;
    horizLine1: THorizLineSeries;
   LookoutT: TLookoutTheme;

procedure TForm1.FormCreate(Sender: TObject);
begin

   Chart1 := TChart.Create(Self);
   Chart1.Parent := Self;
   Chart1.Align := alClient;
   LookoutT := TLookoutTheme.Create(Chart1);
    LookoutT.Apply;

   horizLine1:=Chart1.AddSeries(THorizLineSeries) as THorizLineSeries;
   horizLine1.FillSampleValues(20);
   Chart1.Axes.Left.SetMinMax(0, 1);
   ScrollBar1 := TChartScrollBar.Create(Self);
   ScrollBar1.Parent := Self;
   ScrollBar1.Align := alRight;
   ScrollBar1.Kind := sbVertical;
   ScrollBar1.Width := 17;
   ScrollBar1.Min := 0;
   ScrollBar1.Max := 100;
   ScrollBar1.Chart := Chart1;
   ScrollBar1.RecalcPosition();
end;
Could you confirm us if it works in the way you want?

Thanks in advance

Re: vertically scaling each page

Posted: Thu Jan 19, 2017 5:13 pm
by 9339638
I am referring to the vertical scaling of the chart to fill the chart window as the serires is scrolled not the orientation of the chart or the scrollbar. Here is a sample of what I am talking about that I would like to know if there is a simpler or built-in way other then what I have done.

Code: Select all

const
  PointsPerPage = 20;
  RightEdgePad = 2;
  VertPad = 2;
  TotalPoints = 100;

var
  Form1: TForm1;
  Chart1: TChart;
  ScrollBar1: TChartScrollBar;
  Line1: TLineSeries;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Chart1 := TChart.Create(Self);
   Chart1.Parent := Self;
   Chart1.Align := alClient;
   Chart1.Legend.Visible := false;

   Line1 := Chart1.AddSeries(TLineSeries) as TLineSeries;
   Line1.FillSampleValues(TotalPoints);
   Chart1.Axes.Bottom.SetMinMax(0,  PointsPerPage - 1);
   ScrollBar1 := TChartScrollBar.Create(Self);
   ScrollBar1.Parent := Self;
   ScrollBar1.Align := alBottom;
   ScrollBar1.Kind := sbHorizontal;
   ScrollBar1.Width := 17;
   ScrollBar1.Min := 0;
   ScrollBar1.Max := TotalPoints - 1;// - PointsPerPage;
   ScrollBar1.SmallChange := 1;
   ScrollBar1.Chart := Chart1;
   ScrollBar1.OnChange := ScrollBar1Change;
   ScrollBar1Change(nil);
   ScrollBar1.RecalcPosition();
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
const
  VertSentLowVal = 1000000;
var
  ci, LeftViewTickPos, RightViewTickPos: integer;
  PageLow, PageHigh, VRange: double;
  ts: string;
begin
    PageLow := VertSentLowVal;
    PageHigh := 0;
    if ScrollBar1.Position > PointsPerPage then
      LeftViewTickPos := ScrollBar1.Position
    else
      LeftViewTickPos := 0;
    RightViewTickPos := ScrollBar1.Position + PointsPerPage - 1; 
    if RightViewTickPos > TotalPoints then begin
      RightViewTickPos := TotalPoints;
    end;
    with Line1 do begin
    for ci := LeftViewTickPos to RightViewTickPos do begin
      if YValue[ci] > 0 then begin
        if YValue[ci] < PageLow then
          PageLow := YValue[ci];
        if YValue[ci] > PageHigh then
          PageHigh := YValue[ci];
      end;
    end;
    if PageLow <> VertSentLowVal then begin   // do not scale if no Ticks visible
      GetVertAxis.SetMinMax(PageLow, PageHigh);
    end;
    end; // with
  end;

Re: vertically scaling each page

Posted: Fri Jan 20, 2017 4:20 pm
by 10050769
Hello Dave,

If I understand well, you want scroll the vertical axis at same time you scroll horizontal axis through the ChartBarScroll component, is that?
In that case, the code you use is correct to achieve your request, so you need change the axes scale in the ChartBarScroll Change events always.

Thanks in advance

Re: vertically scaling each page

Posted: Fri Jan 20, 2017 5:17 pm
by 9339638
Thanks Sandra for looking it over. Since what I was doing was typical for financial use, I thought there was probably a built-in way to do the same that I was over looking.

Dave