Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.119.251] |
|
Сообщ.
#1
,
|
|
|
Конечно, в Delphi есть достаточно мощный компонент TChart для построения любых графиков.
Но бывает необходимо что-то более простое без претензий и особых наворотов. Предлагается вашему вниманию компонент для Delphi, который рисует линейные графики. Возможности. - Кривых на графике может быть более одной (кривые выводятся только в run-time заполнением массивов значений точек). - Автомасштабирование. При добавлении точек в кривую и выходе их значений за установленные максимум или минимум по обеим осям происходит пересчет максимальных и/или минимальных значений. - Ручное масштабирование графика мышкой или с клавиатуры (после формирования всех кривых). - Панорамирование графика при масштабе > 100% - сдвиг по всем четырем направлениям также мышкой или с клавиатуры. - "Датализация" - два режима отображения кривых. - Отображение значений точек в виде хинта при нахождении курсора мыши около точки. - Наличие "навигатора" - отдельное полупрозрачное окнце, отображающее весь график и которое можно таскать мышкой по экрану. Есть возможность показывать или скрывать это окно. - Могут изменяться: толщина кривых, цвет компонента, цвет кривых, цвет осей, цвет и видимость сетки графика. При перерисовке (а это может происходить очень часто, например, при панорамировании, добавлении точек) график не дергается. Исходные тексты и пример использования компонента прилагается. Прикреплённый файлgraph_w_e.zip (56.5 Кбайт, скачиваний: 2593) |
Сообщ.
#2
,
|
|
|
Цитата sansans @ Предлагается вашему вниманию компонент для Delphi Читая такое в первую очередь хочется увидеть что это такое, а потом уже если понравится как-то с этим связываться. Ты бы скриншоты приложил... |
Сообщ.
#3
,
|
|
|
Не понял как на этом форуме прикреплять более одного файла, поэтому только один скришот даю.
А еще снимки можно посмотреть здесь: http://san-46.narod.ru/GraphLinear.htm Прикреплённый файлclip01.gif (12.96 Кбайт, скачиваний: 3295) |
Сообщ.
#4
,
|
|
|
>[Error] Unit1.pas(39): Undeclared identifier: 'TFormatSettings'
|
Сообщ.
#5
,
|
|
|
Какая версия Delphi? Пример и компонент компилировался в D7. Там все в порядке. TFormatSettings объявлен в SysUtils.
|
Сообщ.
#6
,
|
|
|
Delphi 6
Добавлено Единственное место где нашёл версию Delphi - это на главной странице сайта внизу |
Сообщ.
#7
,
|
|
|
Ну, чем я помогу? Насколько помню в D6 тоже есть TFormatSettings. Можно и выбросить из Unit1 эту структуру. Тогда придется менять функцию StrToFloatDef (тоже реализована в SysUtils), с помощью которой происходит преобразование чисел, читаемых из текстового файла.
Или не применять тот текстовый файл (ht_02.htl). Он всего лишь для примера большого количества точек графика. "Единственное место где нашёл версию Delphi - это на главной странице сайта внизу". Так все же есть? Пример есть пример. Можно сделать свой проект и разместить на его форме компонент. Он же не сложный в использовании. |
Сообщ.
#8
,
|
|
|
Не корекнтное отобажение первого графика в начале, где маленькие значения.
Маштаб не соответствует отображаемым данным |
Сообщ.
#9
,
|
|
|
А конкретно, в чем не корректность?
И, опять же, как определено, что "масштаб не соответствует..."? А то хотелось бы исправить, только непонятно что. |
Сообщ.
#10
,
|
|
|
Не удаётся посмотреть на начальные значения, поскольку иасштаб очень большой а значения очень маленькие. Приходится многократно увеличивать изображение, при этом оно увеличивается и по вертикили и по горизонтали и в итоге, когда всё же изображение достигло более-менее читабельного размера (M=9000) ширина при этом огромная.
|
Сообщ.
#11
,
|
|
|
Особенность данных, которые отображаются на графике.
Для таких случаях, видимо, надо иметь возможность изменять масштаб отдельно по горизонтальной и вертикальной осям. Но это уже в другой жизни. Для моих приложений компонент и с его теперешними возможностями достаточен. |
Сообщ.
#12
,
|
|
|
Форма с вашим компонентом - 422 кб
Форма с TChart - 600 кб Лично я выбираю TChart, поскольку возможности просто огромные, а размер не на много больше. Думаю что изобретение велосипеда никому не нужно. |
Сообщ.
#13
,
|
|
|
Каждый имеет право на собственное мнение. Спасибо за конструктивную критику.
Но, ИМХО, не в размере дело, а в простоте. Кому то может и пригодится именно в таком воплощении. Как было отмечено, для моих проектов компонент был нужен именно в этой реализации. |
Сообщ.
#14
,
|
|
|
Цитата sansans @ - Кривых на графике может быть более одной (кривые выводятся только в run-time заполнением массивов значений точек). - Автомасштабирование. Как оно ведет себя, когда точек несколько тысяч? TChart тормозит жутко, приходится делать его невидимым, вводить точки, делать видимым. |
Сообщ.
#15
,
|
|
|
В текстовом файле примера, из которого извлекаются точки, этих точек 1433.
Увеличил я их количество в четыре раза, получилось более 5700 точек. И что в первом, что во втором, никакой разницы в скорости вывода не заметил. Наверное, скорость еще от железа зависит. Алгоритм выборки точек в конкретных задачах тоже ведь может быть медленным, он и будет узким местом при отображении кривых во время выполнения. А сам компонент выводит точки максимально быстро. Прикреплённый файлclip02.gif (17.15 Кбайт, скачиваний: 2992) |
Сообщ.
#16
,
|
|
|
> TChart тормозит жутко
Для такого количества следует использовать BeginUpdate/EndUpdate Простой тест var a,b,i: cardinal; const n = 100000; begin a := Gettickcount; Series1.BeginUpdate; for i := 0 to N do Series1.AddXY(i,sin(i/n*2*pi)); Series1.EndUpdate; b := Gettickcount; caption := format('%d',[b-a]); end; Если заремить BeginUpdate/EndUpdate результат 187 милисекунд, иначе 32 милисекунды. Мне кажется вполне прилично для 100000 точек |
Сообщ.
#17
,
|
|
|
Слегка модифицированный компонент для построения линейных графиков.
Из состава убран модуль для отображения навигационного окошка (форма навигации реализована внутри основного модуля). Возможность вставлять легенду (текст) по левому обрезу прямоугольника компонента (для оси Y). Шрифт, при этом поворачивается на 90 градусов. Взять можно здесь. |