IChartSeries.AutoplaceLabels

Синтаксис Fore

AutoplaceLabels;

Синтаксис Fore.NET

AutoplaceLabels();

Описание

Метод AutoplaceLabels осуществляет размещение подписей данных таким образом, чтобы избежать наложения друг на друга.

Комментарии

Для корректного выполнения метода необходимо, чтобы подписи данных диаграммы были отрисованы. При отрисовке рассчитываются размеры подписей данных , которые необходимы для их правильного расположения. Если осуществляется динамическое создание диаграммы с подписями данных выполните предварительную отрисовку подходящим способом, в зависимости от того, где размещена диаграмма:

  1. Диаграмма динамически размещена на форме Fore. Сначала используйте IFormControl.BeginUpdate и IFormControl.EndUpdate, это вызовет отрисовку подписи данных с подобранным расположением. Далее используйте ITabSheet.BeginUpdate и ITabSheet.EndUpdate - это вызовет отрисовку подписи данных с подобранным расположением.

  2. Диаграмма динамически размещена на листе регламентного отчета или на форме Fore.NET. Используйте IChartExporter.GetBitmap, предварительно передав точные размеры диаграммы (IChartExporter.PixelHeight и IChartExporter.PixelWidth).

Ниже приведен пример расположения подписей данных без авторазмещения (слева) и с авторазмещением (справа):

Примеры Fore

  1. Динамическое создание диаграммы на форме. Пример является обработчиком события для кнопки. Добавьте ссылки на системные сборки Drawing, Tab, Chart.
    Для выполнения примера предполагается наличие кнопки с наименованием "Button1" и компонентов UiReport и ReportBox с наименованиями "UiReport1" и "ReportBox1" соответственно.

Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var 
    tsheet: ITabSheet;
    Placement: IGxRectF;
    Obj: ITabObject;
Begin
    tsheet := ((UiReport1.Instance As IPrxReport).ActiveSheet As IPrxTable).TabSheet;
    Placement := New GxRectF.Create(10107575);
    Self.BeginUpdate;
    Obj := tsheet.Objects.Add("PrxChart", Placement);
    (Obj As IPrxChart).Data := "A0:B7";
    (Obj As IPrxChart).SeriesInRows := False;
    (Obj As IChart).Series.DisplayLabels := True;
    (Obj As IChart).Type := ChartType.Areas;
    Self.EndUpdate; 
    tsheet.BeginUpdate;
    (Obj As IChart).Series.AutoplaceLabels;
    tsheet.EndUpdate;
End Sub Button1OnClick;

После выполнения примера в компоненте ReportBox будут размещены диаграмма и подписи данных , расположенные таким образом, чтобы избежать наложения друг на друга.

  1. Динамическое создание диаграммы на листе регламентного отчета с помощью макроса. Пример является процедурой в модуле, который необходимо подключить к регламентному отчету. В регламентном отчете необходимо сделать ячейку с гиперссылкой на эту процедуру. В ячейках A0:B7 введите данные, на основании которых будет построена диаграмма. Добавьте ссылки на системные сборки Drawing, Tab, Chart.

Sub UserProc;
Var
    Report: IPrxReport;
    tsheet: ITabSheet;
    Placement: IGxRectF;
    Obj: ITabObject;
    chart: IChart;
    Exp: IChartExporter;
Begin
    Report := PrxReport.ActiveReport;
    tsheet := (Report.ActiveSheet As IPrxTable).TabSheet;
    Placement := New GxRectF.Create(10107575);
    Obj := tsheet.Objects.Add("PrxChart", Placement);
    chart := Obj As IChart; 
    (Obj As IPrxChart).Data := "A0:B7";
    (Obj As IPrxChart).SeriesInRows := False;
    chart.Series.DisplayLabels := True;
    chart.Type := ChartType.Areas;
    Exp := New ChartExporter.Create;
    Exp.Chart := chart;
    Exp.GetBitmap;
    tsheet.BeginUpdate;
    (Obj As IChart).Series.AutoplaceLabels;
    tsheet.EndUpdate;
End Sub UserProc;

После выполнения примера на листе отчета будут размещены диаграмма и подписи данных, расположенные таким образом, чтобы избежать наложения друг на друга.

Примеры Fore.NET

  1. Динамическое создание диаграммы на форме. Пример является обработчиком события для кнопки. Добавьте ссылки на системные сборки Drawing, Tab, Chart и Report.
     Для выполнения примера предполагается наличие кнопки с наименованием "Button1" и компонентов UiReportNet и ReportBoxNet с наименованиями "UiReportNet1" и "ReportBoxNet1" соответственно. В ячейках A0:B7 введите данные, на основании которых будет построена диаграмма.

Imports Prognoz.Platform.Interop.Chart;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;
...
Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var 
    tsheet: ITabSheet;
    Obj: ITabObject;
    Placement: GxRectF = New GxRectFClass();
    chart: IChart;
    Exp: IChartExporter = New ChartExporterClass();
    btmp: IGxBitmap;
    
Begin
    tsheet := (uiReportNet1.ReportUi.Report.ActiveSheet As IPrxTable).TabSheet;
    Placement.Create(10105555);
    Obj := tsheet.Objects.Add("PrxChart", Placement);
    chart := Obj As IChart;
    (Obj As IPrxChart).Data := "A0:B7";
    (Obj As IPrxChart).SeriesInRows := False;
    chart.Series.DisplayLabels := True;
    chart.Type := ChartType.chtBars;
    If chart<>Null Then
        Exp.Chart := chart As DxChart;
        btmp := Exp.GetBitmap();
        //Обновление диаграммы необходимо для того, чтобы в 
        //ядре были доступны размеры маркеров, которые были 
        //рассчитаны при отрисовке
        chart.Refresh();
        chart.Series.AutoplaceLabels();
    End If
End Sub;

После выполнения примера в компоненте ReportBox будут размещены диаграмма и подписи данных , расположенные таким образом, чтобы избежать наложения друг на друга.

  1. Динамическое создание диаграммы на листе регламентного отчета с помощью обработчика события. Пример является обработчиком события «Вычисление области данных» в модуле, который необходимо подключить к регламентному отчету. Добавьте ссылки на системные сборки Drawing, Tab, Chart. После добавления области данных на лист отчета вычислите её.

Public Override Sub OnAfterExecuteDataIsland(DataIsland : IPrxDataIsland);
Var
    Report: IPrxReport;
    tsheet: ITabSheet;
    Placement: GxRectF = New GxRectFClass();
    Obj: ITabObject;
    chart: IChart;
    Exp: IChartExporter = New ChartExporterClass();
    btmp: IGxBitmap;
Begin
    Report := DataIsland.Report;
    tsheet := (Report.ActiveSheet As IPrxTable).TabSheet;
    Placement.Create(10105555);
    tsheet.Objects.Clear();
    Obj := tsheet.Objects.Add("PrxChart", Placement);
    chart := Obj As IChart;
    (Obj As IPrxChart).Data := DataIsland.Range.Address;
    (Obj As IPrxChart).SeriesInRows := False;
    chart.Series.DisplayLabels := True;
    If chart<>Null Then
        Exp.Chart := chart As DxChart;
        btmp := Exp.GetBitmap();
        //Обновление диаграммы необходимо для того, чтобы в ядре были доступны размеры маркеров, которые были
        //рассчитаны при отрисовке
        chart.Refresh();
        chart.Series.AutoplaceLabels();
    End If;
End Sub OnAfterExecuteDataIsland;

После выполнения примера на листе отчета будет размещена диаграмма, построенная по данным области данных, с подписями данных , расположенными таким образом, чтобы избежать наложения друг на друга.

См. также:

IChartSeries