уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В Delphi с незапамятных времен имеется компонент TChart для построения красивых графиков и диаграмм. В принципе, лично моим потребностям этот компонент вполне соответствует. Мне никогда не требовались какие-то сверхсложные и навороченные диаграммы или графики, к большинству приложений, написанных с использованием TChart не предъявлялось такое требование как «размер exe-файла должен быть не более, чем ХХХ Мб» и т.д. Однако совсем недавно пришлось всё-таки искать замену компонентам TChart и причиной поисков стал таки размер exe-файла после использования TChart. Ну и Ok. Как говориться, наше дело маленькое — надо найти, значит будем искать. И первыми на очереди стали компоненты, обозначенные в теме — RiverSoftAVG Charting Component Suite. На первый взгляд, компоненты достаточно мощные — поддерживают большое количество различных типов диаграмм и графиков, поддерживают эффекты в FMX и т.д. Что касается цены, то компоненты RiverSoftAVG Charting распространяются абсолютно бесплатно, но только для некоммерческого использования. Для коммерческого использования лицензия стоит 125$. Посмотрим, что из себя представляют эти компоненты с точки зрения «цена — качество — размер».Скачать компоненты можно с официального сайта, перейдя вот по этой ссылке.  С установкой тоже никаких вопросов не возникает — достаточно запустить скачаный exe-файл и подождать секунд 30 пока компоненты установятся.

Раз уж целью стало найти компоненты, с которыми размер exe-файла будет минимальным, то сразу создадим в Delphi XE6 два проекта:

  1. с использованием TChart
  2. с использованием RiverSoftAVG Charting Component Suite

и проверим который из exe-файлов будет «толще». Для примера я решил в обоих примерах построить обычные линейные графики. Чтобы было нагляднее, размеры exe-файлов представим, опять же, в виде простенькой столбчатой диаграммы:

graphics

Как можно видеть, с компонентом  RiverSoftAVG готовый exe-файл «весит» почти на 700 Кб  меньше, чем при использовании TChart. Много это или мало? Думаю — нормально :)

Теперь посмотрим, какие графики и диаграммы можно строить с помощью этих компонентов. Вот, что мы можем увидеть на палитре компонентов:

graphics_components

Всего  RiverSoftAVG Charting Component Suite содержит 26 различных компонентов только для графиков и диаграмм. Здесь есть и  как уже привычные нам столбчатые диаграммы, «пироги», линейные графики, так и довольно необычные типы, например, построение звездообразной диаграммы, построение диаграмм типа «chart-in-chart», т.е. когда на подложке, например, карты мира вы можете размещать круговые или столбчатые диаграммы. Наиболее ярким примером возможностей компонентов RiverSoftAVG Charting на мой взгляд может послужить компонент TRSPathChart, используя который, можно выстраивать различные фигуры (по аналогии компонента TPath в FMX о котором я немного рассказывал). Вот, например, как выглядит демка с этим компонентом:

graphics_tpath

Данные о границах штатов читаются из обычного SVG-файла, каждому штату, соответственно присваивается свой цвет. Вот как выглядит код для чтения SVG:

procedure TfrmPathExample.FormCreate(Sender: TObject);
  function GetAttributeString(const Node: IXMLNode; const S: String): String;
  var
    Attribute: IXMLNode;
  begin
    Attribute := Node.AttributeNodes.FindNode(S);
    if Assigned(Attribute) then
      result := Attribute.nodeValue
    else
      result := '';
  end;
 
var
  DocNode: IXMLNode;
  i: Integer;
  j: Integer;
  ID: String;
  PathString: String;
  Num: String;
  Item: TRSPathChartValue;
begin
  OpenDialog1.FileName := SVGFile;
  if not FileExists(SVGFile) then
  begin
    ShowMessage('Cannot find '+SVGFile+'.  Please locate it');
    if not OpenDialog1.Execute then Exit;
  end;
  XMLDocument1.LoadFromFile(OpenDialog1.FileName);
  DocNode := XMLDocument1.documentElement;
  if DocNode.nodeName <> 'svg' then
    raise Exception.Create('Not valid SVG file');
  // get width and height
  Num := GetAttributeString(DocNode, 'width');
  if Num <> '' then
    RSChartPanel1.BottomAxis.Maximum := StrToFloat(Num);
  Num := GetAttributeString(DocNode, 'height');
  if Num <> '' then
    RSChartPanel1.LeftAxis.Maximum := StrToFloat(Num);
 
  // get the paths in the file
  RSPathChart1.BeginUpdate;
  try
    for i := 0 to DocNode.ChildNodes.Count - 1 do
    begin
      if (DocNode.ChildNodes[i].NodeName = 'path') and
         (GetAttributeString(DocNode.ChildNodes[i], 'class') = 'state') then
      begin
        ID := GetAttributeString(DocNode.ChildNodes[i], 'id');
        PathString := GetAttributeString(DocNode.ChildNodes[i], 'd');
        // create the path
        // Note that this call to Add makes the Path keep the exact same size
        // as the bound rect of the path.  To force a path to use a different
        // size, call the overloaded RSPathChart1.Values.Add( aRect, PathString, ID );
        RSPathChart1.Values.Add( PathString, ID );
      end
      else if (DocNode.ChildNodes[i].NodeName = 'g') and
         (GetAttributeString(DocNode.ChildNodes[i], 'class') = 'state') then
      begin
        Item := nil;
        ID := GetAttributeString(DocNode.ChildNodes[i], 'id');
        for j := 0 to DocNode.ChildNodes[i].ChildNodes.Count - 1 do
          if (DocNode.ChildNodes[i].ChildNodes[j].NodeName = 'path') then
          begin
            PathString := GetAttributeString(DocNode.ChildNodes[i].ChildNodes[j], 'd');
            if Item = nil then
              Item := RSPathChart1.Values.Add( PathString, ID )
            else
            begin
              // Append the path to state
              Item.Data.Append( PathString );
              // Make sure to update the ShapeRect to the new, expanded path
              Item.ShapeRect := Item.Data.GetBounds;
            end;
          end;
      end;
    end;
  finally
    RSPathChart1.EndUpdate;
  end;
end;

Собственно, это и есть весь код программы, демонстрирующей работу компонента TRSPathChart. В целом компоненты достаточно функциональные и в чем-то даже превосходят обычный Tee Chart,  которые, к тому же, предоставляются нам бесплатно только в виде Lite-версии, т.е. без исходного кода. Так что, если вам вдруг когда-то понадобятся компоненты для рисования графиков и диаграмм в Delphi 2010 — XE6 или Appmethod и, к тому же, бесплатные для некоммерческого использования, то обратите внимание на RiverSoftAVG Charting Component Suite. 

Ссылка на официальный сайт  разработчика.

Книжная полка

Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
Описание: Книга рассчитана на подготовленного пользователя ПК, желающего самостоятельно научиться программировать и разрабатывать приложения и базы данных в среде Delphi. Опытные программисты смогут использовать издание как справочник. В тексте подробно описаны более 80 компонентов VCL, функции Object Pascal и Win32 API.
купить книгу delphi на ЛитРес

 

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
3 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Павел
Павел
06/10/2014 03:32

Кмпоненты RiverSoftAVG Charting Component Suite полностью отсутствуют в XE7

Павел
Павел
06/10/2014 03:36

Компоненты RiverSoftAVG Charting Component Suite полностью отсутствуют в XE7, скачать же их не возможно по данной ссылке