Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
2368 / 770 / 561
Регистрация: 15.01.2019
Сообщений: 2,383
1

Отображение одиночных точек в компоненте TChart

30.06.2019, 22:47. Показов 3870. Ответов 6
Метки нет (Все метки)

На форме размещен компонент TChart. Координатные оси и нулевой отсчет координат сделаны по середине. Координатная сетка фиксированная и задается пользователем.
Вопрос: как отобразить на координатной плоскости TChart одиночные точки, не связанные между собой функциями, заданные координатами x,y. (желательно, чтобы точка была хорошо видна на плоскости, т.е. можно было задать ее размер и цвет, как задается размер и цвет линий графиков).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2019, 22:47
Ответы с готовыми решениями:

Ось Х в компоненте TChart
Добрый вечер, есть Stringgrid и в нем два столбца, один значения по оси Х, другой по У. Значения по...

Цвет градиента в компоненте TChart
Tchart 8.06 Pro BDS 2006 Серия типа Bar Стиль: Rect.Gradient Задача - дать пользователям...

Ось времени в компоненте TChart
Доброго времени суток, подскажите пожалуйста как можно настроить ось Х в формат времени (hh:mm:ss)?

Ось времени в компоненте TChart
Всем здравствуйте. В компоненте TChart выводится плоский график изменения параметра во времени....

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
01.07.2019, 01:50 2
Лучший ответ Сообщение было отмечено ValentinNemo как решение

Решение

Обычная серия "График" (TLineSeries), с выставленными значениями: ShowPoint = True, LineType = ltNone, ColorEach = cePoint позволяет сделать все, что написано выше.
1
2368 / 770 / 561
Регистрация: 15.01.2019
Сообщений: 2,383
01.07.2019, 07:56  [ТС] 3
ShowPoint = True, LineType = ltNone, это нашел. А где найти ColorEach = cePoint?

Добавлено через 16 минут
Спасибо огромное! Все отобразилось. Точки только получились не круглые, а квадратные.
Еще вопрос. На координатной плоскости TChart можно рисовать линии, фигуры, области с помощью штатных процедур (line(), circle(), rectangle())?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
01.07.2019, 09:25 4
Лучший ответ Сообщение было отмечено ValentinNemo как решение

Решение

Цитата Сообщение от ValentinNemo Посмотреть сообщение
Точки только получились не круглые, а квадратные
Pointer.Style выставить в psCircle - будут круглые.

Цитата Сообщение от ValentinNemo Посмотреть сообщение
На координатной плоскости TChart можно рисовать линии, фигуры, области с помощью штатных процедур (line(), circle(), rectangle())?
У TChart есть свойство Canvas, которое ничем не отличается от любой другой канвы. Ну, почти ничем. А рисовать можно, скажем, по OnDrawAfterBackWall - фигура будет рисоваться над задней стенкой чарта, но под самими точками/линиями.

Pascal
1
2
3
4
5
6
7
procedure TForm1.Chart1AfterDrawBackWall(ASender: TChart; ACanvas: TCanvas;
  const ARect: TRect);
begin
  ACanvas.Brush.Style:=bsClear;
  ACanvas.Pen.Color:=clRed;
  ACanvas.Ellipse(Rect(10, 20, 100, 100));
end;
1
2368 / 770 / 561
Регистрация: 15.01.2019
Сообщений: 2,383
02.07.2019, 08:33  [ТС] 5
Спасибо огромное! Все получилось! Точки стали круглые, красивые.
Вот только координаты фигур нужно задавать в единицах размера экрана, и чтобы привязать их к графику, нужно каким-то образом переводить единицы шкалы осей (и координатной сетки) в единицы размера экрана. Есть ли такая встроенная в TChart функция, которая переводит единицы шкалы в единицы размера экрана? А может это как-то по другому делается.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
02.07.2019, 08:58 6
Есть несколько: ImageToGraph/GraphToImage, и для каждой координаты в отдельности тоже (XImageToGraph/XGraphToImage, YImageToGraph/YGraphToImage). Скажем:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Chart1AfterDrawBackWall(ASender: TChart; ACanvas: TCanvas;
  const ARect: TRect);
var
  p : TPoint;
  dp : TDoublePoint; // uses TAChartUtils
begin
  ACanvas.Brush.Style:=bsClear;
  ACanvas.Pen.Color:=clRed;
 
  dp.X := 15; dp.Y := 20; // очень неудобно, что нет готовой функции по образцу Point, которая заполняет структуру, но ее несложно написать самому
  p := Chart1.GraphToImage(dp);
  // рисуем окружность вокруг точки с координатами (15;20) на чарте
  ACanvas.Ellipse(Rect(p.X - 3, p.Y - 3, p.X + 3, p.Y + 3));
end;
1
2368 / 770 / 561
Регистрация: 15.01.2019
Сообщений: 2,383
02.07.2019, 13:23  [ТС] 7
Супер! Спасибо большое! Все получилось, работает. Если есть желание посмотрите мои упражнения.
Единственно, что работает не так как надо - это порядок закраски линий. Линии осей и линии сетки перекрывают линии нарисованных отрезков. Если координаты точек и отрезка попадают на ось, то линия отрезка не прорисовывается, хотя точки прорисовываются.
Вложения
Тип файла: zip GraphWindow.zip (424.0 Кб, 29 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2019, 13:23

Форматированный вывод по Осям X, Y в компоненте TChart
Уже парюсь который день не могу понять как мне сделать нормальный вывод по Осям X,Y в компоненте...

Подпись оси абсцисс OX в компоненте TChart
Уважаемые форумчане, 2 дня бьюсь уже над вроде бы тривиальной задачей, но никак не могу найти её...

Построение графика функции в компоненте TChart
Здраствуйте. Мне нужна помощь в построении графика y=sin(x), а точнее сама функция для TChart

Цвет текста меток по осям в компоненте TChart
Понадобилось сделать график с черным фоном. В компоненте TChart нашел как менять цвет фона, нашел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru