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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 17:22   #1
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию Разрыв в графике Series

Как зделать разрыв в графике? При использовании AddNull крайняя точка перед разрывом соединяется с 1-й точкой после разрыва, рисовать график в месте разрыва цветом clButtonFace не получится из-за очень мелкой сетки
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 27.11.2009, 17:57   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

тип серии tpoint не подойдет? ну, или отрисовывайте вручную на канве (придется хранить массив + смысл tchart теряется)
зы: разрыв как таковой в fastline и line не предусмотрен по определению, ну разве сымитировать созданием второй серии
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 27.11.2009 в 18:02.
raxp вне форума Ответить с цитированием
Старый 27.11.2009, 18:13   #3
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

к сожалению tPoint тоже не подходит, просят непрерывный график с пробелами в тех местах, где отображаемые данные признаны недостоверными
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 27.11.2009, 18:16   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
ну разве сымитировать созданием второй серии
столько сколько нужно будет... заведите динамический массив типа sn: array of tfastlineseries
зы: кстати, а почему tPointseries не подойдет? ведь он отображает конкретную существующую точку, внешний вид можно задавать
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 27.11.2009 в 18:20.
raxp вне форума Ответить с цитированием
Старый 03.12.2009, 12:07   #5
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

В компоненте TChart созданном по дефолту, с типом графика TSeriesLine, при вызове AddNull разрыв отображается верно. А если Chart создавать вот так:
Код:
with Chart do begin
    Legend.Alignment := laBottom;
    Parent := Panel;
    Align := alClient;
    Chart.AllowPanning := pmVertical;
    AllowZoom := true;
    BevelInner := bvNone;
    BevelOuter := bvNone;
    BevelWidth := 2;
    BorderStyle := bsNone;
    BorderWidth := 0;
    with BottomAxis do begin
      Automatic := false;
      AutomaticMaximum := false;
      AutomaticMinimum := false;
      Axis.Color := clBlack;
      Axis.Mode := pmCopy;
      Axis.Style := psSolid;
      Axis.Visible := True;
      Axis.Width := 2;
      // Здесь формат значений по оси
      ExactDateTime := True;
//      DateTimeFormat := 'dd.mm.yy hh:mm:ss';
      Increment := DateTimeStep[dtOneSecond];
      LabelsSeparation := 25;
      LabelStyle := talAuto;
      // Здесь максимум и минимум значеий на оси
      Maximum := Now;
      Minimum := Maximum - DateTimeStep[dtOneHour];
      MinorTicks.Visible := false;
      TickOnLabelsOnly := false;
      Ticks.Color := clGray;
      Ticks.Mode := pmCopy;
      Ticks.Style := psSolid;
      Ticks.Visible := True;
      Ticks.Width := 1;
      TicksInner.Visible := false;
      Visible := True;
    end;
    SetDefaultTimeFormat();
    ClipPoints := True;
    Color := clBtnFace;
    DepthAxis.Visible := false;
    Enabled := True;
    Foot.Visible := false;
    Frame.Visible := false;
    Gradient.Visible := false;
    with LeftAxis do begin
      Increment := 0.001;
      Automatic := false;
      AutomaticMaximum := false;
      AutomaticMinimum := false;
      Axis.Color := clBlack;
      Axis.Mode := pmCopy;
      Axis.Style := psSolid;
      Axis.Visible := True;
      Axis.Width := 2;
      LabelsSeparation := 25;
      LabelStyle := talAuto;
      MinorTicks.Visible := false;
      TickInnerLength := 0;
      TickLength := 4;
      TickOnLabelsOnly := True;
      Ticks.Color := clGray;
      Ticks.Mode := pmCopy;
      Ticks.Style := psSolid;
      Ticks.Visible := True;
      Ticks.Width := 1;
      TicksInner.Visible := false;
      Visible := True;
    end;
    with Title do begin
      Frame.Visible := false;
      Text.Text := FDesc;
      Visible := True;
    end;
    if not Multiple then Legend.Visible := false
    else begin
      Legend.Visible := True;
      Legend.ResizeChart := True;
      Legend.LegendStyle := lsSeries;
      Legend.ShadowColor := clGray;
      Legend.TextStyle := ltsLeftValue;
      Frame.Visible := True;
      Align := alClient;
    end;
    MarginBottom := 0;
    MarginLeft := 3;
    MarginRight := 1;
    MarginTop := 1;
    MaxPointsPerPage := 240;
    RightAxis.Visible := false;
    ScaleLastPage := false;
    TopAxis.Visible := false;
    View3D := false;
    View3DWalls := false;
    OnMouseDown := ChartMouseDown;
    OnMouseUp := ChartMouseUp;
    OnMouseMove := ChartMouseMove;
    onZoom:=ChartZoom;
    OnUndoZoom:=ChartUndoZoom;
  end;
то крайняя точка перед разрывом соединяется с первой после разрыва!
сам Series в обоих случаях создается одинаково.
в чем может быть ошибка?
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 03.12.2009, 12:16   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

а кто будет задавать тип серии при динамическом создании chart?
Код:
var SuN: TLineSeries;
...
SuN:= TLineSeries.Create(self);
chart.AddSeries(SuN);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.12.2009, 13:19   #7
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

тип серии я задаю

Код:
var
 Ser: TLineSeries;
...
  Ser := TLineSeries.Create(nil);
  with Ser  do begin
        LinePen.Visible := True;
        LinePen.Width := 2;
        HorizAxis := aBottomAxis;
        InvertedStairs := false;
        Marks.Visible := false;
        SeriesColor := clRed;
        VertAxis := aLeftAxis;
        Stairs := false;
        XValues.DateTime := True;
        Pointer.Visible := false;
        ParentChart := Chart;
      end;
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 03.12.2009, 13:58   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
тип серии я задаю
может вы весь код уже приложите или проект, а то каждый раз уточнять...

попробуйте не ParentChart := Chart , а chart.AddSeries(Ser)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.12.2009, 11:12   #9
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

Для тех, кто столкнется с подобной проблемой: метод TSeries.AddNull был задуман, как добавление разрыва при неизвестном значении по оси X. При использовании по этой оси данных типа TDateTime метод AddNull приведет к интерполяции графика, так как все значения времени между двумя добавляемыми значениями извесны. Решил проблему использованием AddNullXY.
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение вида Series в TChart ViNcHeStEr Помощь студентам 2 20.04.2009 16:17
Печать Series в Chart... Vremya-Dengy Общие вопросы Delphi 2 10.03.2009 21:47
Дублирование объекта Series в Delphi Jean-Esther Помощь студентам 1 16.01.2009 00:34
Как обработать разрыв связи ADO с БД slips БД в Delphi 3 18.11.2008 16:53