Page 1 of 1

Color Band clipping

Posted: Tue Dec 22, 2009 1:23 pm
by 10554830
Hello,

I'm using Color Band's in my Chart. I've noticed that the filling will clip when it reaches the end of the Chart but Color Band borders don't. I see this happening whilst I tried scrolling my Chart.

Does anybody know what could be the case and how this can be solved?

Many thanks,
Robert Kleinpeter

Re: Color Band clipping

Posted: Tue Dec 22, 2009 2:22 pm
by yeray
Hi Robert,

Is the following code reproducing the behaviour you are observing? Could you please attach a picture indicating where are you exactly viewing that?
I'm scrolling the chart up and down and I not sure to see anything strange.

Code: Select all

uses series, teetools;

procedure TForm1.FormCreate(Sender: TObject);
var colorband: TColorBandTool;
begin
  Chart1.View3D:=false;
  Chart1.AddSeries(TFastLineSeries.Create(self));
  Chart1[0].FillSampleValues(25);

  with Chart1.Tools.Add(TColorBandTool.Create(self)) as TColorBandTool do
  begin
    Axis:=Chart1.Axes.Left;
    StartValue:=Chart1[0].YValues.MinValue+((Chart1[0].YValues.MaxValue-Chart1[0].YValues.MinValue) / 3);
    EndValue:=Chart1[0].YValues.MinValue+(2*(Chart1[0].YValues.MaxValue-Chart1[0].YValues.MinValue) / 3);
    Pen.Color:=clRed;
    Pen.Width:=3;
  end;
end;

Re: Color Band clipping

Posted: Wed Dec 23, 2009 8:34 am
by 10554830
Hi Yeray,

After looking at my code for a very long time I finally found the reason why clipping doesn't occur... It has to do with the fact that I don't allow users to drag the Start & End line. I've alterd your example Form.Create code:

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
var colorband: TColorBandTool;
begin
  Chart1.View3D:=false;
  Chart1.AddSeries(TFastLineSeries.Create(self));
  Chart1[0].FillSampleValues(25);

  with Chart1.Tools.Add(TColorBandTool.Create(self)) as TColorBandTool do
  begin
    Axis:=Chart1.Axes.Left;
    StartValue:=Chart1[0].YValues.MinValue+((Chart1[0].YValues.MaxValue-Chart1[0].YValues.MinValue) / 3);
    EndValue:=Chart1[0].YValues.MinValue+(2*(Chart1[0].YValues.MaxValue-Chart1[0].YValues.MinValue) / 3);
    //Pen.Color:=clRed;
    //Pen.Width:=3;
    StartLine.Pen.Color := clRed;
    StartLine.Pen.Width := 3;
    StartLine.Active := True;
    EndLine.Pen.Color := clRed;
    EndLine.Pen.Width := 3;
    EndLine.Active := True;
    StartLine.AllowDrag := False;
    EndLine.AllowDrag := False;
  end;
end;
The last two lines are causing the clipping problem! But when I do allow drag, users are able to alter the min-max and that's not something I'd like.

I've noticed that (using the Chart Editor) it's not possible to configure ColorBands the way you would expect. When, for instance, you check the Startline 'Active', also 'Allow Drag' becomes checked when you refresh the settings. The same happens also the other way around. A little confusing I must say. I was not able to set every Startline to 'Active' and all 'Allow drag's to false using the GUI Editor.

By the way: I'm using Delphi 7 Pro and TeeChart version 8 with SC.

Re: Color Band clipping

Posted: Wed Dec 23, 2009 3:37 pm
by yeray
Hi Kleinpeter,

In that case you could check if the StartLine and EndLine TColorLineTool are in the axis range and activate or deactivate them. Something as follows:

Code: Select all

procedure TForm1.Chart1Scroll(Sender: TObject);
var colorLine: TColorLineTool;
    i: Integer;
begin
  for i:=0 to Chart1.Tools.Count-1 do
  begin
    if (Chart1.Tools[i] is TColorBandTool) then
    begin
      colorLine:=(Chart1.Tools[i] as TColorBandTool).StartLine;
      colorLine.Active:=((colorLine.Value < colorLine.Axis.Maximum) and (colorLine.Value > colorLine.Axis.Minimum));

      colorLine:=(Chart1.Tools[i] as TColorBandTool).EndLine;
      colorLine.Active:=((colorLine.Value < colorLine.Axis.Maximum) and (colorLine.Value > colorLine.Axis.Minimum));
    end
    else if (Chart1.Tools[i] is TColorLineTool) then
    begin
      colorLine:=(Chart1.Tools[i] as TColorLineTool);
      colorLine.Active:=((colorLine.Value < colorLine.Axis.Maximum) and (colorLine.Value > colorLine.Axis.Minimum));
    end;
  end;
end;

Re: Color Band clipping

Posted: Thu Dec 24, 2009 12:13 pm
by 10554830
Hi Yeray!

Problem solved! :D

Nice peace of code, that did the trick! Good workaround!

Happy Holidays!