В Delphi с незапамятных времен имеется компонент TChart для построения красивых графиков и диаграмм. В принципе, лично моим потребностям этот компонент вполне соответствует. Мне никогда не требовались какие-то сверхсложные и навороченные диаграммы или графики, к большинству приложений, написанных с использованием TChart не предъявлялось такое требование как «размер exe-файла должен быть не более, чем ХХХ Мб» и т.д. Однако совсем недавно пришлось всё-таки искать замену компонентам TChart и причиной поисков стал таки размер exe-файла после использования TChart. Ну и Ok. Как говориться, наше дело маленькое — надо найти, значит будем искать. И первыми на очереди стали компоненты, обозначенные в теме — RiverSoftAVG Charting Component Suite. На первый взгляд, компоненты достаточно мощные — поддерживают большое количество различных типов диаграмм и графиков, поддерживают эффекты в FMX и т.д. Что касается цены, то компоненты RiverSoftAVG Charting распространяются абсолютно бесплатно, но только для некоммерческого использования. Для коммерческого использования лицензия стоит 125$. Посмотрим, что из себя представляют эти компоненты с точки зрения «цена — качество — размер».Скачать компоненты можно с официального сайта, перейдя вот по этой ссылке. С установкой тоже никаких вопросов не возникает — достаточно запустить скачаный exe-файл и подождать секунд 30 пока компоненты установятся.
Раз уж целью стало найти компоненты, с которыми размер exe-файла будет минимальным, то сразу создадим в Delphi XE6 два проекта:
- с использованием TChart
- с использованием RiverSoftAVG Charting Component Suite
и проверим который из exe-файлов будет «толще». Для примера я решил в обоих примерах построить обычные линейные графики. Чтобы было нагляднее, размеры exe-файлов представим, опять же, в виде простенькой столбчатой диаграммы:
Как можно видеть, с компонентом RiverSoftAVG готовый exe-файл «весит» почти на 700 Кб меньше, чем при использовании TChart. Много это или мало? Думаю — нормально :)
Теперь посмотрим, какие графики и диаграммы можно строить с помощью этих компонентов. Вот, что мы можем увидеть на палитре компонентов:
Всего RiverSoftAVG Charting Component Suite содержит 26 различных компонентов только для графиков и диаграмм. Здесь есть и как уже привычные нам столбчатые диаграммы, «пироги», линейные графики, так и довольно необычные типы, например, построение звездообразной диаграммы, построение диаграмм типа «chart-in-chart», т.е. когда на подложке, например, карты мира вы можете размещать круговые или столбчатые диаграммы. Наиболее ярким примером возможностей компонентов RiverSoftAVG Charting на мой взгляд может послужить компонент TRSPathChart, используя который, можно выстраивать различные фигуры (по аналогии компонента TPath в FMX о котором я немного рассказывал). Вот, например, как выглядит демка с этим компонентом:
Данные о границах штатов читаются из обычного 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
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
||
Описание: Книга рассчитана на подготовленного пользователя ПК, желающего самостоятельно научиться программировать и разрабатывать приложения и базы данных в среде Delphi. Опытные программисты смогут использовать издание как справочник. В тексте подробно описаны более 80 компонентов VCL, функции Object Pascal и Win32 API.
|
Кмпоненты RiverSoftAVG Charting Component Suite полностью отсутствуют в XE7
Компоненты RiverSoftAVG Charting Component Suite полностью отсутствуют в XE7, скачать же их не возможно по данной ссылке
Эти компоненты и не должны присутствовать в поставке XE7.
И скачать их можно именно на сайте разработчика в разделе загрузок. Ссылка дана в самом начале странице (http://www.riversoftavg.com/downloads.htm).
Если быть ещё точнее, то последняя версия лежит тут (ссылка взята именно со страницы загрузок на официальном сайте разработчика) http://www.riversoftavg.com/Files/RCCSSrcv5.6.1.exe
Предыдущие версии: http://www.riversoftavg.com/Files/RCCSSrcv4.1.exe, http://www.riversoftavg.com/Files/RCCSSrcv3.0.exe