Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2015, 22:19   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию Проблеммы с заполнение TChart в реальном времени

Вообщем начал делать электронные лабораторные работы для своих студентов. Первая Внешне-скоростная характеристика ДВС. Т.к. данных много предполагается генерировать, то использую поток.
Код:
 TSyncThread = class(TThread)
  private
    X: Integer;
    Y: Real;
    procedure SetProgress; //
  public
    constructor Create(CreateSuspended: Boolean); //
   // destructor Destroy; override; //
  protected
    procedure Execute; override; //
  end;
Код:
var
  Swich: Boolean;
Код:
procedure TSyncThread.Execute;
begin
  if Swich then
    Exit;
  while not Swich do
  begin
    X := GetX();
    Y := HpToKilowatts(109)*((X/5600) + Power(X/5600, 2) - Power(X/5600, 3));
    Synchronize(@SetProgress);
  end;
end; 

procedure TSyncThread.SetProgress;
begin
  Form1.Chart1LineSeries1.AddXY(X, Y);
end;

constructor TSyncThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
Формулы пока в тестовом режиме, но желаемый результат должен выглядеть так: график в реальном времени перестраивается в зависимости от X := GetX() и заполняется, но по факту тупо имею линию.
Как мне достичь отображения реальных колебаний в зависимости от X := GetX()?
kta87 вне форума Ответить с цитированием
Старый 25.01.2015, 23:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Типа такого?
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Randomize;
  for i:=1 to 50 do Chart1.Series[0].Add(Random(100));
  Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i: Integer;
begin
  for i:=0 to 48 do Chart1.Series[0].YValue[i]:=Chart1.Series[0].YValue[i+1];
  Chart1.Series[0].YValue[49]:=Random(100);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.01.2015, 00:12   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Аватар, да совершено точно работает как мне и нужно!
Проблемы: 1. Пишу на Lazarus и по этому код типа
Код:
Chart1.Series[0]
не прокатит;
2. Т.к. кол-во данных большое, т.е. генератор будет работать достаточно длительные промежутки то опишу в потоке. (таймер в потоке писать страшно)
kta87 вне форума Ответить с цитированием
Старый 26.01.2015, 01:54   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
таймер в потоке писать страшно
Почему страшно?
Ну и так есть же ещё
SetTimer function
Её в доппотоке использовать совсем не страшно.
northener вне форума Ответить с цитированием
Старый 26.01.2015, 07:05   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Какой компонент используете? В Лазарусе много Чартов.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.01.2015, 07:23   #6
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Какой компонент используете?
TChart
Цитата:
Сообщение от Utkin Посмотреть сообщение
В Лазарусе много Чартов.
Chart там один, в отличии от Delphi все вспомогательные инструменты из него вынесены в отдельные визуальные / не визуальные компоненты.
kta87 вне форума Ответить с цитированием
Старый 26.01.2015, 07:32   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Chart там один, в отличии от Delphi все вспомогательные инструменты из него вынесены в отдельные визуальные / не визуальные компоненты.
В стандартном виде при установке по умолчанию 2 - еще один на вкладке Misc.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.01.2015, 07:36   #8
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Utkin, верно говоришь! А ты не в курсе особенностей и отличий?
п.с. И может че подскажешь по теме построения?
kta87 вне форума Ответить с цитированием
Старый 26.01.2015, 07:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А ты не в курсе особенностей и отличий?
А ты кинь на форму и посмотри
Вообще тебе нужно использовать те что на Chart вкладке и не заморачиваться на другие.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.01.2015, 07:57   #10
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты кинь на форму и посмотри
Интеллектом блеснул?
офф. топ.: Я по поводу такого рода сообщений писал статейку на хабре. У нее конечно научная задача не в этом, но связанно.
kta87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет набранных символов в реальном времени. Zerdone Microsoft Office Word 1 04.10.2013 01:11
сложение ячеек в реальном времени Nenado БД в Delphi 4 03.02.2012 10:16
Обработка в реальном времени aferistz PHP 3 25.10.2011 18:03
Возврат значений из DLL в реальном времени Alter Общие вопросы Delphi 5 21.06.2011 19:43