Page 1 of 1

Function TChartAxis.AxisRect:TRect;

Posted: Thu May 07, 2009 12:23 pm
by 10552878
As to me to define TRect object TChartAxis taking into account a font of a thickness of lines. It is necessary for definition of total height. All axes settle down horizontally.

In TeeEngine there is a function:
Function TChartAxis. AxisRect:TRect;

But she is not accessible in the basic appendix.

Posted: Thu May 07, 2009 2:28 pm
by yeray
Hi BoikovSoft,

We are not sure to understand what are you exactly trying to do here. It would be helpful if you could send us an image, or a project we can run as-is to reproduce the issue here.
You can either post your files at news://www.steema.net/steema.public.attachments newsgroup or at our upload page.

Posted: Fri May 08, 2009 5:01 am
by 10552878
Hi

Here a code for an example:

Code: Select all


...

uses Math, TeeProcs, TeEngine, Chart, Series;

...

var
  AChart: TChart;

...

procedure TForm1.FormCreate(Sender: TObject);
Procedure MyADD;
VAr
 AX: TChartAxis;
 Ser: TChartSeries;
Begin
  Ser := AChart.AddSeries(THorizLineSeries);
  AChart.CustomAxes.Add;
  AX := AChart.CustomAxes[AChart.CustomAxes.Count - 1];
  AX.Title.Caption := 'Title';
  AX.OtherSide := true;
  AX.Grid.Visible := false;
  AX.Horizontal := true;
  AX.PositionUnits := muPixels;
  Ser.CustomHorizAxis := AX;
  Ser.FillSampleValues();
end;
begin
  AChart := TChart.Create(Self);
  AChart.Parent := Self;
  AChart.OnMouseMove := ChartMouseMove; // <- It is necessary for idea demonstration.
  AChart.Align := alClient;
  AChart.Legend.Visible := false;
  AChart.View3D := false; // <- 3D properties to consider it is not necessary
  MyADD;
  MyAdd;
  MyADD;
  { I have intentionally made different height Axis.}
  AChart.CustomAxes[0].PositionPercent := -100;
  AChart.CustomAxes[0].Title.Font.Size := 15;
  AChart.CustomAxes[1].PositionPercent := -50;
  AChart.CustomAxes[1].Title.Font.Size := 30;
  AChart.CustomAxes[1].LabelsAngle:=90;
  //AChart.CustomAxes[1].LabelsSize:=-45; // <- It needs to be considered too
  AChart.CustomAxes[2].PositionPercent := 0;
  AChart.CustomAxes[2].Title.Font.Size := 13;
  Achart.MarginUnits := muPixels;
  AChart.MarginTop := 150; // <- It is necessary to instal property MargineTop
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AChart.Destroy;
end;

procedure TForm1.ChartMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  { It is necessary for idea demonstration. }
  TChart(Sender).Repaint;
  if InRange(Y, 0, 50) then TChart(Sender).Canvas.Rectangle(0, 0, TChart(Sender).Width, 50);
  if InRange(Y, 50, 100) then TChart(Sender).Canvas.Rectangle(0, 50, TChart(Sender).Width, 100);
  if InRange(Y, 100, 150) then TChart(Sender).Canvas.Rectangle(0, 100,TChart(Sender).Width, 150);
end;

Problem:
1) how automatically to place Axis taking into account all its properties (3D properties to consider it is not necessary)?
2) It is necessary to instal property MargineTop so that the working area of the schedule was not under axes.
3) At mouse passage over rectangular area of an axis it is necessary to paint her.

Posted: Fri May 08, 2009 9:53 am
by 10552878
Has spent today all the day for the decision of this problem.

Here that I managed to make:

Code: Select all

function TForm1.GetAxisRect(AX: TChartAxis; var AHeigth: Integer): TRect;
var
    H       : Integer;
    R       : TRect;
    AData: Array [1..7] of Integer;
begin
  With AX do
  Begin
    R := AX.Title.ShapeBounds;
    if Horizontal then
    Begin
      H := Axis.Width div 2;
      AData[1] := r.Top;
      AData[2] := r.Bottom;
      AData[3] := PosAxis + H;
      AData[4] := PosAxis - H;

      H := AX.MaxLabelsWidth;

      AData[5] := PosLabels + H;
      AData[6] := PosTitle;
      AData[7] := PosLabels - H;

      result.Top    := MinIntValue(AData);
      result.Bottom := MaxIntValue(AData);

      result.Left   := Min(IStartPos, IEndPos+1);
      result.Right  := Max(IStartPos, IEndPos+1);

      AHeigth := result.Bottom - result.Top;
    end
    else
    Begin
      H := Axis.Width div 2;
      AData[1] := r.Left;
      AData[2] := r.Right;
      AData[3] := PosAxis + H;
      AData[4] := PosAxis - H;

      H := AX.MaxLabelsWidth;

      AData[5] := PosLabels + H;
      AData[6] := PosTitle;
      AData[7] := PosLabels - H;

      result.Left   := MinIntValue(AData);
      result.Right  := MaxIntValue(AData);

      result.Top    := Min(IStartPos, IEndPos+1);
      result.Bottom := Max(IStartPos, IEndPos+1);

      AHeigth := result.Right - result.Left;
    end;
  end;
end;
Can eat more successful decision?

Posted: Fri May 08, 2009 10:23 am
by yeray
Hi BoikovSoft,

It seems a quite good function. I've added this to the wish list be implemented (and improved if possible) for further releases (TV52014141).

Thank you very much.

Posted: Tue May 12, 2009 4:19 am
by 10552878
What is TV52014141?
Where it is possible to look the description?
And the full list of these problems or errors?

Posted: Tue May 12, 2009 7:30 am
by yeray
Hi BoikovSoft,

This is the number that identifies the issue in our database. We use to inform in the forums thread about the issue number for future tracking but I'm afraid that this is, in general, for internal purposes only.