Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание графиков и диаграмм на ASP страницах  (Прочитано 14461 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DaN(DR)
Гость
« : 05-02-2007 14:51 » 

Каким образом можно создать диаграмму на АСП странице. Как я понимаю, надо по данным генерировать рисунок, и вставлять этот рисунок на страницу, только как его сгенерировать - не представляю.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 05-02-2007 19:41 » 

DaN(DR), не вставить на страницу, а просто по запросу создать рисунок и выдать его в браузер - картинки грузятся отдельными запросами.
Чем рисовать не скажу, но думаю стоит обратится к первоисточнику - msdn.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
DaN(DR)
Гость
« Ответ #2 : 06-02-2007 08:26 » 

Все не так просто: вся информация берется из базы данных и по этой информации, в виде диаграммы, надо показать статистику. Я находил в нете туториалы, где диаграмма рисуется с помощью одной картинки (маленький прямоугольник), но такие графики выглядят страшновато. Есть один сайт:http://nces.ed.gov/nceskids/createagraph/default.aspx, где как раз создаются хорошие графики по информации, которую вволит сам пользователь, но как они это делают - ума не приложу. Причем сам график - это именно картинка.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 06-02-2007 11:10 » 

Цитата: DaN(DR)
как они это делают - ума не приложу. Причем сам график - это именно картинка.
Ничего сложного здесь нет. Графики строятся программами, которые собирают всю исходную информацию, создают некое растровое поле и рисуют на нём так же, как и в графическом окне десктопного приложения. Результат преобразуется в какой-либо графический формате (PNG, GIF, JPG, BMP и т.д.) и выдаётся приложением в стандартный выходной поток как последовательность байтов (оформленная согласно протоколу HTTP необходимыми заголовками). Вот и всё.

Здесь наибольшие трудозатраты в том, чтобы написать движок, рисующий графики (с осями, подписями, масштабированием шкал, поддержкой разных видов графиков и т.п.), а не в том, как это выдать в web. Поэтому обычно пользуются уже разработанными компонентами, пригодными для употребления в решаемой задаче.
« Последнее редактирование: 06-02-2007 11:18 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
DaN(DR)
Гость
« Ответ #4 : 06-02-2007 12:09 » 

Вероятно я некорректно задал вопрос. Как разместить - это не проблема, проблема - это как создать эту картинку(график). Т.е. возможно ли это сделать только средствами АСП, если да, то как.

П.С. В msdn ничего не нашел по этой теме
« Последнее редактирование: 06-02-2007 12:11 от DaN(DR) » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 06-02-2007 20:59 » 

Цитата: DaN(DR)
Т.е. возможно ли это сделать только средствами АСП, если да, то как.
Теоретически возможно всё, только не целесообразно: не будет эффективно работать с памятью, будет много кода, будет медленно работать (всё же интерпретатор). Не проще ли воспользоваться каким-нибудь ActiveX? (Полагаю, веб-сервер с ASP под Windows работает.)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 06-02-2007 21:36 » 

Вот, например, компонент MS Office, отвечающий за построение графиков (Microsoft Office Chart), имеет такой интерфейс:
Код:
[
  uuid(204C1F73-1C0C-11D1-9923-00C04FB937E1),
  helpcontext(0x0501a000),
  dual
]
dispinterface WCWebChart {
    properties:
    methods:
        [id(0x00001388), propput, bindable, helpcontext(0x0501a001)]
        void ChartLayout([in] ChartChartLayoutEnum rhs);
        [id(0x00001388), propget, bindable, helpcontext(0x0501a001)]
        ChartChartLayoutEnum ChartLayout();
        [id(0x00001389), propput, bindable, helpcontext(0x0501a003)]
        void ChartWrapCount([in] long rhs);
        [id(0x00001389), propget, bindable, helpcontext(0x0501a003)]
        long ChartWrapCount();
        [id(0x00001398), propput, bindable, helpcontext(0x0501a005)]
        void EnableEvents([in] VARIANT_BOOL rhs);
        [id(0x00001398), propget, bindable, helpcontext(0x0501a005)]
        VARIANT_BOOL EnableEvents();
        [id(0x0000138a), propput, bindable, helpcontext(0x0501a007)]
        void HasChartSpaceLegend([in] VARIANT_BOOL rhs);
        [id(0x0000138a), propget, bindable, helpcontext(0x0501a007)]
        VARIANT_BOOL HasChartSpaceLegend();
        [id(0x60020008), propget, helpcontext(0x0501a009)]
        long MajorVersion();
        [id(0x60020009), propget, helpcontext(0x0501a00a)]
        BSTR MinorVersion();
        [id(0x6002000a), propget, helpcontext(0x0501a00b)]
        BSTR BuildNumber();
        [id(0x0000138b), propput, helpcontext(0x0501a00c)]
        void ScreenUpdating([in] VARIANT_BOOL rhs);
        [id(0x0000138b), propget, helpcontext(0x0501a00c)]
        VARIANT_BOOL ScreenUpdating();
        [id(0x0000138c), propget, helpcontext(0x0501a00e)]
        Border* Border();
        [id(0x0000138d), propget, helpcontext(0x0501a00f)]
        WCCharts* Charts();
        [id(0x0000138e), propget, helpcontext(0x0501a010)]
        WCDataSources* ChartDataSources();
        [id(0x0000139c), propputref, bindable, helpcontext(0x0501a011)]
        void DataSource([in] DataSource* rhs);
        [id(0x0000139c), propput, bindable, helpcontext(0x0501a011)]
        void DataSource([in] DataSource* rhs);
        [id(0x0000139c), propget, bindable, helpcontext(0x0501a011)]
        DataSource* DataSource();
        [id(0x0000139d), propput, bindable, helpcontext(0x0501a014)]
        void DataMember([in] DataMember rhs);
        [id(0x0000139d), propget, bindable, helpcontext(0x0501a014)]
        DataMember DataMember();
        [id(0x0000139f), propget, bindable, helpcontext(0x0501a016)]
        ChartDataSourceTypeEnum DataSourceType();
        [id(0x0000139f), propput, bindable, helpcontext(0x0501a016)]
        void DataSourceType([in] ChartDataSourceTypeEnum rhs);
        [id(0x00001399), propput, bindable, helpcontext(0x0501a018)]
        void HasChartSpaceTitle([in] VARIANT_BOOL rhs);
        [id(0x00001399), propget, bindable, helpcontext(0x0501a018)]
        VARIANT_BOOL HasChartSpaceTitle();
        [id(0x0000138f), propget, helpcontext(0x0501a01a)]
        Interior* Interior();
        [id(0x00001390), propget, helpcontext(0x0501a01b)]
        WCLegend* ChartSpaceLegend();
        [id(0x6002001b), propget, helpcontext(0x0501a01c)]
        IDispatch* Selection();
        [id(0x6002001c), propget, helpcontext(0x0501a01d)]
        ChartSelectionsEnum SelectionType();
        [id(0x6002001d), propput, hidden, helpcontext(0x0501a01e)]
        void HasSelectionMarks([in] VARIANT_BOOL rhs);
        [id(0x6002001d), propget, hidden, helpcontext(0x0501a01e)]
        VARIANT_BOOL HasSelectionMarks();
        [id(0x6002001f), propput, hidden, helpcontext(0x0501a020)]
        void HasPropertyToolbox([in] VARIANT_BOOL rhs);
        [id(0x6002001f), propget, hidden, helpcontext(0x0501a020)]
        VARIANT_BOOL HasPropertyToolbox();
        [id(0x00001391), propget, helpcontext(0x0501a022)]
        WCTitle* ChartSpaceTitle();
        [id(0x00001392), propget, helpcontext(0x0501a023)]
        BSTR Version();
        [id(0x0000139e), propget, helpcontext(0x0501a024)]
        BSTR XMLData();
        [id(0x0000139e), propput, helpcontext(0x0501a024)]
        void XMLData([in] BSTR rhs);
        [id(0x60020025), propget, helpcontext(0x0501a026)]
        IDispatch* Constants();
        [id(0x60020026), propget, helpcontext(0x0501a027)]
        VARIANT_BOOL CanUndo();
        [id(0x0000139b), hidden, helpcontext(0x0501a028)]
        void BuildLitChart();
        [id(0x0000139a), helpcontext(0x0501a029)]
        void Load([in] BSTR FileName);
        [id(0x00001394), helpcontext(0x0501a02a)]
        void Clear();
        [id(0x6002002a), hidden, helpcontext(0x0501a02b)]
        void ShowHelp([in] long iTopic);
        [id(0x6002002b), helpcontext(0x0501a033)]
        void ExportPicture(
                        [in, optional, defaultvalue("chart.gif")] BSTR FileName,
                        [in, optional, defaultvalue("gif")] BSTR FilterName,
                        [in, optional, defaultvalue(-1)] long width,
                        [in, optional, defaultvalue(-1)] long height);
        [id(0x00001396), helpcontext(0x0501a02c)]
        void Refresh();
        [id(0x6002002d), helpcontext(0x0501a034)]
        void Select();
        [id(0x6002002e), helpcontext(0x0501a035)]
        void BeginUndo();
        [id(0x6002002f), helpcontext(0x0501a036)]
        void EndUndo();
        [id(0x60020030), helpcontext(0x0501a037)]
        void Undo();
        [id(0x000013a1), helpcontext(0x0501a02d)]
        IDispatch* RangeFromPoint(
                        [in] int X,
                        [in] int Y);
        [id(0x60020032), propput, hidden, helpstring("Enabled"), helpcontext(0x0501a02e)]
        void Enabled([in] VARIANT_BOOL rhs);
        [id(0x60020032), propget, hidden, helpstring("Enabled"), helpcontext(0x0501a02e)]
        VARIANT_BOOL Enabled();
        [id(0x60020034), propget, helpcontext(0x0501a031)]
        BSTR RevisionNumber();
        [id(0x000013a2), propget, hidden]
        VARIANT_BOOL AllowAboutDialog();
        [id(0x000013a2), propput, hidden]
        void AllowAboutDialog([in] VARIANT_BOOL rhs);
};
думаю, этим можно воспользоваться.

Создать его можно для 9-й версии компонента:
Код: (Text)
var chart = new ActiveXObject("OWC.Chart");
Ещё на машине у себя нашёл 10-ю и 11-ю версии, там имя немного другое.

Подробностей не знаю, никогда этим интерфейсом сам не пользовался. В MSDN 2004 и 2006 года описаний интерфейса не нахожу.

P.S. Попытался ещё создать объект Microsoft Chart Control, но "программа выполнила недопустимую операцию".
« Последнее редактирование: 06-02-2007 21:39 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
DaN(DR)
Гость
« Ответ #7 : 08-02-2007 07:05 » 

Спасибо, буду разбираться
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines