Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 934

/ вопрос решён /

Здравствуйте, эксперты!
Не могли бы вы подсказать как мне сделать правильно график используя TDBChart?
Выкладываю код - он для меня учебный. Далее я воткну его куда надо в своей программе.
Задача такая: из Excel таблицы ( В первом столбце - данные, во втором столбце - время) брать данные и выводить график.
На вертикальной оси масштаб автоматический, а на горизонтальной -ось времени с интервалом 30 минут. Каждые 30 секунд - график обновляется.
У меня не получается корректно обновлять график. И не могу добиться чтобы ось времени нормально отображалась.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, TeEngine, Series, TeeProcs, Chart, DBChart, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Timer1: TTimer;
  12. DBChart1: TDBChart;
  13. Series1: TFastLineSeries;
  14. Button1: TButton;
  15. Series2: TFastLineSeries;
  16. procedure Button1Click(Sender: TObject);
  17. procedure FormCreate(Sender: TObject);
  18. procedure Timer1Timer(Sender: TObject);
  19. private
  20. { Private declarations }
  21. public
  22. { Public declarations }
  23. end;
  24.  
  25. var
  26. Form1: TForm1;
  27.  
  28.  
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. uses ComObj, ExcelXP;
  35. var ExcelApplication1: OleVariant;
  36. ExcelWorkBook1: OLEVariant;
  37. ExcelWorkSheet1: OLEVariant;
  38.  
  39.  
  40.  
  41.  
  42. procedure TForm1.Button1Click(Sender: TObject);
  43. begin
  44.  
  45. ExcelApplication1.Quit;
  46. ExitProcess(0);
  47.  
  48. end;
  49.  
  50. procedure TForm1.FormCreate(Sender: TObject);
  51. begin
  52. ExcelApplication1 := CreateOleObject('Excel.Application');
  53. ExcelApplication1.Visible := true;
  54.  
  55.  
  56. ExcelWorksheet1.Activate;
  57.  
  58. for I := 1 to 24 do
  59. BEGIN
  60.  
  61. END;
  62. Timer1.Enabled:=True;
  63. end;
  64.  
  65.  
  66. procedure TForm1.Timer1Timer(Sender: TObject);
  67. Var
  68. ValueSum:Integer;
  69. begin
  70. ValueSum:=0;
  71. Series1.AddXY(0,0,'',clBlue);
  72. for i:= 0 to 24 do
  73. begin
  74. Series1.AddXY(i,ValueSum,'',clBlue);
  75. ValueSum:=ValueSum+MasPlan[i+1];
  76. end;
  77.  
  78.  
  79. ValueSum:=0;
  80. Series2.AddXY(0,0,'',clRed);
  81. for i:= 0 to 24 do
  82. begin
  83. Series2.AddXY(i,ValueSum,'',clRed);
  84. ValueSum:=ValueSum+MasPlan[i+1]+Round(Random*10);
  85. end;
  86.  
  87.  
  88. end;
  89.  
  90. end.
  91.  


vitalik32 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: vitalik32 (статус: Посетитель)
Вопрос отправлен: 19 января 2011, 15:18
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 20 января 2011, 14:57; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 19 января 2011, 15:23 [#1]:

что имеется ввиду под "У меня не получается корректно обновлять график. И не могу добиться чтобы ось времени нормально отображалась."? выскакивает синий экран, делфи закрывается с треском?
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 19 января 2011, 15:31 [#2]:

Series2 при обновлении экрана не корректно выводит график. Получается дерганная кривая - а не плавная.
vitalik32

vitalik32 (статус: Посетитель), 19 января 2011, 15:32 [#3]:

А вот ось времени не могу тоже корректно отобразить. В прикрепленном файле лежит проект. Если его запустить - будет видно что происходит.
Вадим К

Вадим К (статус: Академик), 19 января 2011, 17:46 [#4]:

проект не запускается:)
а вот то, что оно ломаное - значит нужно сглаживать. Тут поможет интерполяция.
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 19 января 2011, 17:53 [#5]:

Зачем интерполяция? График в первый раз рисуется плавно, а при втором проходе соединения между точками скачут. могу выслать скриншот результата. Но это завтра. Побежал в садик за старшим....
Спасибо, что посмотрел мой проект....
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 09:27 [#6]:

Скрины здесь невозможно выложить?
Проект в прикрепленке нужно разархивировать в D:\График\...
Вадим К

Вадим К (статус: Академик), 20 января 2011, 10:58 [#7]:

Я видел где проект.
скрины можно выложить на любой хостинг картинок и приложить сюда ссылки.
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 11:10 [#8]:

http://s41.radikal.ru/i092/1101/e3/f84190740b7a.jpg
http://s015.radikal.ru/i331/1101/51/ddb51c4543b1.jpg
скрины.
Вадим К

Вадим К (статус: Академик), 20 января 2011, 11:51 [#9]:

странный график. Может исходные данные такие? хотя я смутно себе понимаю, как это получается.
А с датой - тут все просто. 0 - это просто 31декабря1899. поэтому на графике и отображается так. Так как дата указывается неправильно, то и отображается неверно. Если вместо i в строке
Series1.AddXY(i,ValueSum,'',clBlue); подставить что то вида
Series1.AddXY(i+X,ValueSum,'',clBlue);
где Х начальная дата, то все будет ок. дата задается в виде кол-ва дней от начала прошлого столетия.
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 11:59 [#10]:

Series1.AddXY(Now+i*OneMinute,ValueSum,'',clBlue);

так корректно или нет?
Вадим К

Вадим К (статус: Академик), 20 января 2011, 12:05 [#11]:

А это уже Вам виднее. я то не знаю, какой датой и какой минутой должна датироваться каждая запись.
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 12:21 [#12]:

3-х минутный интервал за сутки, и 30-ти минутный интервал тоже за сутки.
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 12:21 [#13]:

За текущие сутки.
Вадим К

Вадим К (статус: Академик), 20 января 2011, 14:50 [#14]:

если 3минутный интервал, то там должно быть наверное Now()+i*3*OneMinute;
Но тут есть проблема. Now выдает текущее время. и за время работы цикла может поменяться. да и график будет смотреть в будущее. это нужно?
Галочка "подтверждения прочтения" - вселенское зло.
vitalik32

vitalik32 (статус: Посетитель), 20 января 2011, 14:57 [#15]:

да. нужно. необходимо отслеживать изменения данных и вимдеть 2 графика - 1-плановое потребление в сутки ( часовые интервалы из таблицы), 2-й - фактическое - в 3-х минутном исполнении.

24 января 2011, 15:50: Статус вопроса изменён на решённый (изменил автор вопроса — vitalik32)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.02 сек.