На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Компонент для построения линейных графиков, Простой (в использовании) компонент
    Конечно, в Delphi есть достаточно мощный компонент TChart для построения любых графиков.
    Но бывает необходимо что-то более простое без претензий и особых наворотов.

    Предлагается вашему вниманию компонент для Delphi, который рисует линейные графики.

    Возможности.

    - Кривых на графике может быть более одной (кривые выводятся только в run-time заполнением массивов значений точек).
    - Автомасштабирование.
    При добавлении точек в кривую и выходе их значений за установленные максимум или минимум по обеим осям происходит пересчет максимальных и/или минимальных значений.
    - Ручное масштабирование графика мышкой или с клавиатуры (после формирования всех кривых).
    - Панорамирование графика при масштабе > 100% - сдвиг по всем четырем направлениям также мышкой или с клавиатуры.
    - "Датализация" - два режима отображения кривых.
    - Отображение значений точек в виде хинта при нахождении курсора мыши около точки.
    - Наличие "навигатора" - отдельное полупрозрачное окнце, отображающее весь график и которое можно таскать мышкой по экрану. Есть возможность показывать или скрывать это окно.
    - Могут изменяться: толщина кривых, цвет компонента, цвет кривых, цвет осей, цвет и видимость сетки графика.

    При перерисовке (а это может происходить очень часто, например, при панорамировании, добавлении точек) график не дергается.

    Исходные тексты и пример использования компонента прилагается.
    Сообщение отредактировано: sansans -

    Прикреплённый файлПрикреплённый файлgraph_w_e.zip (56.5 Кбайт, скачиваний: 1309)
      Цитата sansans @
      Предлагается вашему вниманию компонент для Delphi

      Читая такое в первую очередь хочется увидеть что это такое, а потом уже если понравится как-то с этим связываться.
      Ты бы скриншоты приложил...
        Не понял как на этом форуме прикреплять более одного файла, поэтому только один скришот даю.
        А еще снимки можно посмотреть здесь: http://san-46.narod.ru/GraphLinear.htm
        Сообщение отредактировано: sansans -

        Прикреплённый файлПрикреплённый файлclip01.gif (12.96 Кбайт, скачиваний: 1104)
          >[Error] Unit1.pas(39): Undeclared identifier: 'TFormatSettings'
            Какая версия Delphi? Пример и компонент компилировался в D7. Там все в порядке. TFormatSettings объявлен в SysUtils.
              Delphi 6

              Добавлено
              Единственное место где нашёл версию Delphi - это на главной странице сайта внизу
                Ну, чем я помогу? Насколько помню в D6 тоже есть TFormatSettings. Можно и выбросить из Unit1 эту структуру. Тогда придется менять функцию StrToFloatDef (тоже реализована в SysUtils), с помощью которой происходит преобразование чисел, читаемых из текстового файла.
                Или не применять тот текстовый файл (ht_02.htl). Он всего лишь для примера большого количества точек графика.

                "Единственное место где нашёл версию Delphi - это на главной странице сайта внизу". Так все же есть? :)

                Пример есть пример. Можно сделать свой проект и разместить на его форме компонент. Он же не сложный в использовании.
                Сообщение отредактировано: sansans -
                  Не корекнтное отобажение первого графика в начале, где маленькие значения.
                  Маштаб не соответствует отображаемым данным
                    А конкретно, в чем не корректность?
                    И, опять же, как определено, что "масштаб не соответствует..."?
                    А то хотелось бы исправить, только непонятно что.
                      Не удаётся посмотреть на начальные значения, поскольку иасштаб очень большой а значения очень маленькие. Приходится многократно увеличивать изображение, при этом оно увеличивается и по вертикили и по горизонтали и в итоге, когда всё же изображение достигло более-менее читабельного размера (M=9000) ширина при этом огромная.
                        Особенность данных, которые отображаются на графике.
                        Для таких случаях, видимо, надо иметь возможность изменять масштаб отдельно по горизонтальной и вертикальной осям.
                        Но это уже в другой жизни. Для моих приложений компонент и с его теперешними возможностями достаточен.
                          Форма с вашим компонентом - 422 кб
                          Форма с TChart - 600 кб

                          Лично я выбираю TChart, поскольку возможности просто огромные, а размер не на много больше. Думаю что изобретение велосипеда никому не нужно.
                            Каждый имеет право на собственное мнение. Спасибо за конструктивную критику.
                            Но, ИМХО, не в размере дело, а в простоте. Кому то может и пригодится именно в таком воплощении.
                            Как было отмечено, для моих проектов компонент был нужен именно в этой реализации.
                            Сообщение отредактировано: sansans -
                              Цитата sansans @

                              - Кривых на графике может быть более одной (кривые выводятся только в run-time заполнением массивов значений точек).
                              - Автомасштабирование.

                              Как оно ведет себя, когда точек несколько тысяч?
                              TChart тормозит жутко, приходится делать его невидимым, вводить точки, делать видимым.
                              Цитата KILLER @
                              А что такое стековерфлоу что ему можно доверять? Это Украинский портал или что?
                                В текстовом файле примера, из которого извлекаются точки, этих точек 1433.
                                Увеличил я их количество в четыре раза, получилось более 5700 точек.
                                И что в первом, что во втором, никакой разницы в скорости вывода не заметил.
                                Наверное, скорость еще от железа зависит.
                                Алгоритм выборки точек в конкретных задачах тоже ведь может быть медленным, он и будет узким местом при отображении кривых во время выполнения. А сам компонент выводит точки максимально быстро.
                                Сообщение отредактировано: sansans -

                                Прикреплённый файлПрикреплённый файлclip02.gif (17.15 Кбайт, скачиваний: 864)
                                  > TChart тормозит жутко
                                  Для такого количества следует использовать BeginUpdate/EndUpdate

                                  Простой тест
                                  ExpandedWrap disabled
                                    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 точек
                                    Слегка модифицированный компонент для построения линейных графиков.
                                    Из состава убран модуль для отображения навигационного окошка (форма навигации
                                    реализована внутри основного модуля).
                                    Возможность вставлять легенду (текст) по левому обрезу прямоугольника компонента (для оси Y).
                                    Шрифт, при этом поворачивается на 90 градусов.

                                    Взять можно здесь.
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script Execution time: 0,1589 ]   [ 20 queries used ]   [ Generated: 23.11.17, 11:25 GMT ]