JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

TChart

- визуальный компонент
Компоненты JS+
Определяет объект с широкими возможностями построения графиков (диаграмм).

Создание объекта

chrObj=new TChart(Parent);

Собственные свойства
Свойство Тип Описание
Заголовки
Title TChartTitle верхний заголовок диаграммы
SubTitle TChartTitle верхний подзаголовок диаграммы
Foot TChartTitle нижний заголовок диаграммы
SubFoot TChartTitle нижний подзаголовок диаграммы
Оси
AxisBehind Boolean отображать оси диаграммы позади серии
AxisVisible Boolean отображать оси диаграммы
BottomAxis TChartAxis нижняя ось диаграммы
LeftAxis TChartAxis левая ось диаграммы
RightAxis TChartAxis правая ось диаграммы
TopAxis TChartAxis верхняя ось диаграммы
DepthAxis TChartAxis ось глубины (плоскость Z), расположенная в правом нижнем углу диаграммы (по умолчанию невидима)
DepthTopAxis TChartAxis ось глубины (плоскость Z), расположенная в левом верхнем углу диаграммы (по умолчанию невидима)
Стены
BackWall TChartWall задняя стена диаграммы
BottomWall TChartWall нижняя стена диаграммы
LeftWall TChartWall левая стена диаграммы
RightWall TChartWall правая стена диаграммы
Рамка
Border TChartPen перо для отрисовки рамки вокруг панели компонента
BorderRound Number радиус закругления углов рамки вокруг панели компонента
Frame TChartPen перо для отрисовки рамки вокруг диаграммы
Отступы
MarginBottom Number отступ снизу в единицах измерения, представленных свойством MarginUnits
MarginLeft Number отступ слева в единицах измерения, представленных свойством MarginUnits
MarginRight Number отступ справа в единицах измерения, представленных свойством MarginUnits
MarginTop Number отступ сверху в единицах измерения, представленных свойством MarginUnits
MarginUnits Enum единицы измерения отступов (см. ниже)
Фон и тень
BackColor TColor цвет фона панели компонента
BackImage TChartImage фоновое изображение
BackImageInside Boolean ограничить вывод фонового изображения внутри области, указанной свойством Frame
BackImageMode Enum режим размещения фонового изображения (см. ниже)
BackImageTransp Boolean установить прозрачный режим вывода фонового изображения: прозрачный цвет определяется по цвету правой нижней точки фонового изображения
Gradient TChartGradient градиент для заполнения фона диаграммы
Shadow TChartShadow тень от панели компонента
Прокрутка и масштабирование
AllowPanning Enum режим прокрутки диаграммы (см. ниже)
ScrollMouseButton Enum при установке свойства AllowPanning в значение true: кнопка мыши, используемая для прокрутки диаграммы (см. ниже)
Zoom TChartZoom свойства масштабирования диаграммы
3D-эффекты
Chart3DPercent Number процентная величина 3D-эффектов отображения элементов компонента при значении свойства View3D=true: диапазон значений [0-100], по умолчанию значение 15
View3D Boolean отображать элементы диаграммы в трехмерном виде
View3DWalls Boolean отображать левую и нижнюю стены в трехмерном виде
Прочее
Canvas TCanvas дескриптор графической канвы компонента диаграммы
ClipPoints Boolean включить отрисовку точек исключительно внутри диаграммы, отключив отрисовку ее внешних областей
Legend TChartLegend блок условных обозначений диаграммы
Monochrome Boolean выполнять всю отрисовку в черно-белом режиме
PrintProportional Boolean установить размеры печати пропорционально размерам на экране
Series[] TChartSeries индексированный массив серий диаграммы

Свойство MarginUnits
muPercent проценты от размеров панели компонента
muPixels пиксели (по умолчанию)

Свойство BackImageMode
pbmCenter по центру
pbmCustom по значениям свойств Left и Top
pbmStretch растянуть на всю доступную площадь
pbmTile замостить всю доступную площадь

Свойство AllowPanning
pmNone без прокрутки
pmHorizontal горизонтальная прокрутка
pmVertical вертикальная прокрутка
pmBoth оба варианта прокрутки

Свойство ScrollMouseButton
Значение Описание
mbLeft левая кнопка
mbMiddle средняя кнопка
mbRight правая кнопка (по умолчанию)

Стандартные свойства

Собственные методы
Метод Описание
CopyToClipboardBitmap копирует изображение диаграммы в формате BMP в буфер обмена Windows
CopyToClipboardMetafile копирует изображение диаграммы в формате WMF/EMF в буфер обмена Windows
CountActiveSeries возвращает количество активных серий
Invalidate перерисовывает диаграмму, используя Windows API
MaxMarkWidth возвращает максимальную ширину маркера
MaxTextWidth возвращает максимальную ширину горизорнтальной метки
ReCalcWidthHeight пересчитывает размеры диаграммы
RemoveAllSeries удаляет все серии диаграммы
SaveToBitmapFile сохраняет изображение диаграммы в указанном файле формата BMP
SaveToMetafile сохраняет изображение диаграммы в указанном файле формата WMF
SaveToMetafileEnh сохраняет изображение диаграммы в указанном файле формата EMF
SeriesCount возвращает количество серий диаграммы

Стандартные методы

Собственные события
Событие Описание
OnAddSeries добавлена новая серия
OnAfterDraw выполнено отображение диаграммы
OnAllowScroll предлагается указать пределы прокрутки или дать разрешение на прокрутку диаграммы
OnBeforeDrawAxes будет выполнена отрисовка осей
OnBeforeDrawChart будет выполнена отрисовка диаграммы
OnBeforeDrawSeries будет выполнена отрисовка серий
OnClickAxis произошло нажатие кнопки мыши на оси или рядом с ней
OnClickBackground произошло нажатие кнопки мыши на диаграмме за пределами осей, точек серии или легенды
OnClickLegend произошло нажатие кнопки мыши на прямоугольнике легенды диаграммы
OnClickSeries произошло нажатие кнопки мыши на точке серии
OnClickTitle произошло нажатие кнопки мыши на одном из заголовков диаграммы
OnGetAxisLabel предлагается установить текст меток оси
OnGetLegendPos предлагается установить положение и цвет элемента легенды
OnGetLegendRect предлагается установить положение и размеры легенды
OnGetLegendText предлагается установить текст элемента легенды
OnGetNextAxisLabel предлагается установить значения меток оси
OnRemoveSeries удалена существующая серия
OnUndoZoom пользователь отменил масштабирование диаграммы
OnZoom пользователь масштабировал диаграмму

Стандартные события

Пример 1 (JS+)
// Главная форма
frm=new TForm();
frm.Caption="JS+ - визуальный компонент TChart";
frm.Width =900;
frm.Height=675;

// Строка состояния
stb=new TStatusBar(frm);
stb.SimpleText=" Пример компонента TChart";

// Панель
with (pnl=new TPanel(frm)) {
  BorderStyle=bsSingle;
  SetBounds(10,10,frm.ClientWidth-20,stb.Top-20);
  Color=clWhite;
}

// TChart
with (chr=new TChart(pnl)) {
  SetBounds(20,20,pnl.ClientWidth-30,pnl.ClientHeight-30);
  Color=0xFFFFE9.toTColor();
  AllowPanning=pmBoth;// Включить прокрутку
  Zoom.Allow=true;// Включить масштабирование
  Zoom.Pen.Color=clAqua;// Цвет рамки масштабирования

  // Отступы
  MarginTop=MarginRight=chr.MarginBottom=(MarginLeft=10)*2;

  // Верхний заголовок
  with (Title) {
    Caption="Динамика рынка";
    Font.Style=fsBold;
    // Тень от заголовка
    with (Font.Shadow) {
      Color=clLtGray;
      SmoothBlur=HorizSize=VertSize=2;
      Visible=true;
    }
    Visible=true;
  }

  // Нижний заголовок
  with (chr.Foot) {
    Caption="Учетный период";
    Visible=true;
  }
  
  // Рамка вокруг панели компонента
  with (Border) {
    Color=clGray;
    Visible=true;
  }

  // Тень от панели компонента
  with (Shadow) {
    Color=clGray;
    SmoothBlur=HorizSize=VertSize=5;
    Visible=true;
  }
}

// Задняя стена
with (chr.BackWall) {
  // Изображение на стене
  with (Picture) {
    Mode=pbmCustom;
    Left=20;
    LoadFromFile(JSPlus.HelpDir+"IMAGE\\TBitmap\\Image.bmp");
  }
  Visible=true;
}

// Левая ось
with (chr.LeftAxis) {
  Automatic=false;
  Maximum=8000;
  Grid.Color=clLtGray;
  Grid.Visible=true;
  with (Title) {
    Caption="Средняя цена";
    Font.Color=clRed;
  }
  Visible=true;
}

// Правая ось
with (chr.RightAxis) {
  Automatic=false;
  Maximum=50000;
  Visible=true;
  with (Title) {
    Caption="Количество предложений";
    Font.Color=clBlue;
  }
  Visible=true;
}

// Нижняя ось
chr.BottomAxis.Visible=true;

// Массив данных
Include(JSPlus.HelpDir+"DATA\\Chart.lst");

// График цены
srs=new TLineSeries(chr);
srs.Color=chr.LeftAxis.Title.Font.Color;
with (pnt=srs.Pointer) {
  Style=psCircle;
  HorizSize=VertSize=2;
  Frame.Visible=false;
  Visible=true;
}
srs.BeginUpdate();
for (i=0;i<data_lst.length;i++) {
  l=((a=data_lst[i].split("|")).length==3) ? a[2] : "";
  srs.AddXY(i,parseFloat(a[0]),l);
}
srs.EndUpdate();

// График количества предложений
srs=new TLineSeries(chr);
srs.Color=chr.RightAxis.Title.Font.Color;
srs.VertAxis=aRightAxis;
srs.Pointer.Assign(pnt);
for (i=0;i<data_lst.length;i++)
  srs.AddXY(i,parseFloat(data_lst[i].split("|")[1]));

frm.ShowModal();
Пример 2 (JS+)
var tab=20;

// Главная форма
frm=new TForm();
frm.Caption="JS+ - визуальный компонент TChart";
frm.Width =900;
frm.Height=675;

var srs_List=new Array(
"TAreaSeries",
"TArrowSeries",
"TBarSeries",
"TBubbleSeries",
"TGanttSeries",
"TFastLineSeries",
"TLineSeries",
"TPointSeries",
"TPieSeries"
);

var data_List=new Array(
"10|болты",
"40|винты",
"20|гайки",
"60|гвозди",
"40|дюбели",
"80|саморезы",
"60|шайбы",
"100|шурупы"
);

// Строка состояния
stb=new TStatusBar(frm);

// Кнопка Сохранить
with (bt1=new TButton(frm)) {
  Caption="Сохранить";
  Top=stb.Top-Height-tab;
  Hint="Сохранить изображение BMP в файл";
  ShowHint=true;
  strTag="SAVE";
  OnClick=btn_Click;
}

// Кнопка Копировать
with (bt2=new TButton(frm)) {
  Caption="Копировать";
  Width=frm.TextWidth(Caption)+tab;
  Height=bt1.Height;
  Top=bt1.Top;
  Hint="Копировать изображение BMP в Буфер обмена";
  ShowHint=true;
  strTag="COPY";
  OnClick=btn_Click;
}

bt1.Width=bt2.Width;
bt1.Left=frm.ClientWidth-bt1.Width-tab;
bt2.Left=bt1.Left-bt2.Width-tab;

// Панель закладок
pgc=new TPageControl(frm);
pgc.SetBounds(tab,tab,frm.ClientWidth-tab*2,bt1.Top-tab*2);
pgc.OnChange=pgc_Change;

// Закладки
for (i=0,ni=srs_List.length;i<ni;i++) {
  srs_id=(srs_str=srs_List[i]).replace("T","").replace("Series","");
  with (tsh=new TTabSheet(pgc)) {
    Caption=srs_id;
    Color=clWhite;
    strTag=srs_str;
  }

  // TChart
  with (chr=new TChart(tsh)) {
    SetBounds(15,15,tsh.ClientWidth-30,tsh.ClientHeight-30);
    MarginTop=MarginBottom=5;
    MarginRight=15;
    tsh.cmpTag=chr;

    // Верхний заголовок
    with (Title) {
      Caption="Серия "+srs_str;
      Font.Style=fsBold;
      VertMargin=20;
      Visible=true;
    }

    // Нижний заголовок
    with (chr.Foot) {
      Caption="Номенклатура";
      Visible=true;
    }
  }

  // Левая ось
  with (chr.LeftAxis) {
    with (Title){
      Caption="Количество, шт.";
      Font.Color=srs_clr=clBlue;
    }
    Visible=true;
  }

  // Нижняя ось
  with (chr.BottomAxis) {
    MinorTickLength=0;
    Visible=true;
  }

  // Серия
  srs=eval("new "+srs_str+"(chr)");
  srs.Color=srs_clr;

  switch (srs_id) {
    case "Area":
    srs.AreaBrush=bsDiagCross;
    // Вертикальные линии
    with (srs.AreaLinesPen) {
      Color=clLtGray;
      Visible=true;
    }
    break;

    case "Arrow":
    srs.ArrowHeight=srs.ArrowWidth=10;
    case "Bar":
    chr.BottomAxis.Labels=false;
    break;

    case "FastLine":
    with (srs.Marks) {
      ShapeStyle=fosEllipse;
      ArrowLength=10;
      Style=smsValue;
      Visible=true;
    }
    srs.OnClick=srs_Click;
    srs.OnDblClick=srs_DblClick;
    break;

    case "Pie":
    srs.DonutPercent=40;
    chr.Foot.Visible=false;
    case "Gantt":
    chr.LeftAxis.Labels=
    chr.BottomAxis.Labels=false;
    break;

    case "Point":
    case "Line" :
    with (srs.Pointer) {
      Style=psCircle;
      Visible=true;
    }
    with (srs.Marks) {
      ArrowLength=15;
      Visible=true;
    }
    srs.OnGetMarkText=srs_GetMarkText;
    srs.OnClickPointer=srs_ClickPointer;
  }

  // Заполнение серии данными
  srs.BeginUpdate();
  for (j=0,k=1,nj=data_List.length;j<nj;k++,j++) {
    pnt_lst=data_List[j].split("|");
    y=parseFloat(pnt_lst[0]);
    switch (srs_id) {
      case "Arrow" : srs.AddArrow (nj/2,45,k,y); break;
      case "Bubble": srs.AddBubble(k,y,9,pnt_lst[1]); break;
      case "Gantt" : srs.AddGantt (k-0.5,k+0.5,y,pnt_lst[1]); break;
            default: srs.AddXY(k,y,pnt_lst[1]);
    }
  }
  srs.EndUpdate();

  // Масштабирование осей
  with (chr.LeftAxis) {
    Automatic=false;
    Minimum=0;
    Maximum=srs.MaxYValue();
  }
  with (chr.BottomAxis) {
    Automatic=false;
    Minimum=0;
    Maximum=srs.MaxXValue()+1;
  }
}

// Начальная серия
pgc.ActivePageIndex=2;// TBarSeries
pgc_Change(pgc);

frm.ShowModal();

// Обработчик события TButton::OnClick
function btn_Click(btn)
{
  var dlg,opr=btn.strTag,chr=pgc.ActivePage.cmpTag;

  switch (opr) {
    case "COPY":
    chr.CopyToClipboardBitmap();
    stb.SimpleText=" Изображение скопировано в Буфер обмена";
    break;
                 
    case "SAVE":
    with (dlg=new TSavePictureDialog(frm)) {
      Title="Сохранение изображения BMP в файл";
      Options+=ofShareAware+ofCreatePrompt+ofOverwritePrompt;
      Filter="BMP-файлы (*.bmp)|*.bmp|Все файлы (*.*)|*.*";
      DefaultExt="bmp";
      InitialDir=JSPlus.TempDir;
      FileName="ChartImg.bmp";
    }

    if (dlg.Execute()) {
      chr.SaveToBitmapFile(dlg.FileName);
      stb.SimpleText=" Сохранен файл: "+dlg.FileName;
    }
    dlg.Delete();
  }
}

// Обработчик события T[Line,Point]Series::OnGetMarkText
function srs_GetMarkText(srs,i,txt)
{
  txt.Value="Метка №"+(i+1);
}

// Обработчик события T[Line,Point]Series::OnClickPointer
function srs_ClickPointer(srs,i,x,y)
{
  stb.SimpleText=" Клик на указателе: №"+(i+1)+" ("+x+":"+y+")";
}

// Обработчик события TFastLineSeries::OnClick
function srs_Click(srs,i,ms_button,shift,x,y)
{
  stb.SimpleText=" Клик на серии: №"+(i+1)+" ("+x+":"+y+")";
}

// Обработчик события TFastLineSeries::OnDblClick
function srs_DblClick(srs,i,m_button,shift,x,y)
{
  stb.SimpleText=" 2-клик на серии: №"+(i+1)+" ("+x+":"+y+")";
}

// Обработчик события TPageControl::OnChange
function pgc_Change(pgc)
{
  var tsh=pgc.Pages[pgc.ActivePageIndex];

  stb.SimpleText=" Выбрана серия "+tsh.strTag;
}
Примечание
Прокрутка диаграммы активируется (при установленном в соответствующие значения свойстве AllowPanning) нажатием и перемещением правой кнопки мыши. Поменять кнопку мыши для прокрутки диаграммы можно через свойство ScrollMouseButton.

Масштабирование диаграммы активируется (при установленном свойстве Zoom.Allow=true) нажатием и перемещением левой кнопки мыши из левого верхнего или нижнего положения в правое нижнее или верхнее. Поменять кнопку мыши для масштабирования диаграммы можно через свойство Zoom.MouseButton.

Возврат диаграммы к исходному состоянию выполняется нажатием и перемещением левой кнопки мыши из правого верхнего положения в левое нижнее.

Для отображения осей DepthAxis и DepthTopAxis свойство диаграммы View3D и свойство Visible указанных осей должны иметь значение true.

Совместимость
C++ Builder/Delphi
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Component/TChart.htm
© 2024,