Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение графика, по оси X - текущее время 
:(
    Опции темы
kolugd
Дата 12.3.2005, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.1.2005

Репутация: нет
Всего: нет



Как построить график:
по оси Y - данные, например, с приборов, подключенных к PC;
по оси X - текущее время.

Пробовал применить компоненты TChart и TDBChart,
но что-то не получается.
PM MAIL   Вверх
Poseidon
Дата 12.3.2005, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Что именно не получается? Приведи промер кода! А то сразу КАК! Нужно же и самому хоть что-то сделать. А если что-то не получается, то ити за помощью. А ты пришел за готовым примером! Так не пойдет. Тебе же в программисты никто не нанялся! Опиши, что сделал, что не получилось, приведи пример. И получишь помощь.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Satana
Дата 12.3.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Блин тут я уже гдето писал как ну да ладно еще раз пример приведу:
Запускаешь дельфу, кидаешь на форму компонент Tchart щелкаешь два раза и добавляешь Series (тип графика: линия, диаграмма и т.п.).

После этого на форму я кинул кнопку и в обработчике написал следующее:
Код

Chart1.Series[0].AddXY(1,15);
Chart1.Series[0].AddXY(2,20);
Chart1.Series[0].AddXY(3,5);

Думаю что и так понятно но опишу: Мы на созданный нами график (Series) помещаем точки по Х=1 по Y=15
далее 2 и 20 соотвественно и т.д. в иотге получается график.


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Poseidon
Дата 12.3.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Вот пример с пояснениями, каторый строит график задаваемой функции прямо на форме (никаких компонентов не надо)
Код
// Функция, график которой надо построить
 Function f(x:real):real;
 begin
    f:=2*x+3; // можно использовать любые мат. функции (cos, sin, sqr и т.п.)
 end;

// строит график функции
procedure GrafOfFunc;
var
 x1,x2:real;    // границы изменения аргумента функции
 y1,y2:real;    // границы изменения значения функции
 x:real;        // аргумент функции
 y:real;        // значение функции в точке x
 dx:real;       // приращение аргумента
 l,b:integer;   // левый нижний угол области вывода графика
 w,h:integer;   // ширина и высота области вывода графика
 mx,my:real;    // масштаб по осям X и Y
 x0,y0:integer; // точка - начало координат

begin
 // область вывода графика
 l:=10;                     // X - координата левого верхнего угла
 b:=Form1.ClientHeight-20;  // Y - координата левого верхнего угла
 h:=Form1.ClientHeight-40;  // высота
 w:=Form1.Width-40;         // ширина

 x1:=0;     // нижняя граница диапазона аргумента
 x2:=25;    // верхняя граница диапазона аргумента
 dx:=0.01;  // шаг аргумента

 // найдем максимальное и минимальное значения
 //  функции на отрезке [x1,x2]
 y1:=f(x1); // минимум
 y2:=f(x1); // максимум
 x:=x1;
 repeat
   y := f(x);
   if y < y1 then y1:=y;
   if y > y2 then y2:=y;
   x:=x+dx;
 until (x>=x2);

 // вычислим масштаб
 my:=h/abs(y2-y1);  // масштаб по оси Y
 mx:=w/abs(x2-x1);  // масштаб по оси X

 // оси
 x0:=l;
 y0:=b-Abs(Round(y1*my));

 with form1.Canvas do
 begin
   // оси
   MoveTo(l,b);LineTo(l,b-h);
   MoveTo(x0,y0);LineTo(x0+w,y0);
   TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
   TextOut(l+5,b,FloatToStrF(y1,ffGeneral,6,3));
   // построение графика
   x:=x1;
   repeat
     y:=f(x);
     Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;
     x:=x+dx;
   until (x>=x2);
 end;
end;


Процедуру GrafOfFunc нужно вызывать в событии OnPaint формы.

Для того, что бы не было багов при максимизации формы в событии OnResize формы очищаем форму и заново рисуем график (GrafOfFunc)
Код
// изменился размер окна программы
procedure TForm1.FormResize(Sender: TObject);
begin
  // очистить форму
  form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
  // построить график
  GrafOfFunc;end;


Конечно, построить график функции не есть твоя цель. Но из этого кода можно просто получить то, что нужно. Этот пример так же показывает, что для построения графика (да и вообще для "рисования" можно и не использовоть никаких компонентов. Все отображается прямо на форме (для этого, как видно, используется свойство Canvas).


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Lom
Дата 4.8.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



В посте заинтересовало время по оси Х.
В свойствах серии TChart есть галочка про Date Time, сколько не бился над форматом ничего не получается, нужны именно минуты и часы.
И немного не в тему - я правильно понял, что в TChart  по оси Х только целые значения можно задавать ????
PM MAIL   Вверх
Alexeis
Дата 4.8.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Lom,  smile 
Цитата

TChartAxis component

Declaration
property AxisValuesFormat : String;
Description
Default Value: '#,##0.###'
The AxisValuesFormat specifies the desired formatting string to be applied to Axis Labels. It has effect when Axis associated Series have their XValues.DateTime or YValues.DateTime property set to False.
For DateTime Axis labels use the TChartAxis.DateTimeFormat property.


Код

 LineSeries1Series1.XValues.DateTime := true;
 Cht1.BottomAxis.DateTimeFormat := 'dd/mm/yy';
 LineSeries1Series1.AddXY(1.1, 2.2);
 LineSeries1Series1.AddXY(1.8, 2.2);


Добавлено @ 12:49 
Минуты и часы будет тоже самое только
Код

Cht1.BottomAxis.DateTimeFormat :='hh/nn';



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.