TCHart. Как рисовать на канве поверх серий

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Nowichok
Сообщения: 8
Зарегистрирован: 07 дек 2006, 22:49

Всем привет ! Собственно, сабжевый вопрос - Как рисовать на канве поверх серий?

Имеется 2 серии. Надо нарисовать на графиках стрелки, решил использовать канву компонета TCHart,но оказалось, что рисовать можно только, если нет ни одной серии. Рисовать поверх он нехочет (.

Как Можно исправить это ? Или как можно нарисовать стрелки на графике, если имеются 2 серии ?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А как написано рисование? В каком месте?
Думаю что все должно быть ОК, если субклассить TChart и рисовать в методе Paint после Inherited Paint;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а какие стрелки хотел рисовать и на какой серии?
Изображение
Nowichok
Сообщения: 8
Зарегистрирован: 07 дек 2006, 22:49

2Naeel Maqsudov - Можно чуток поподробнее ,как это осуществить ? А то не кодил уже 1.5 года ,ползабыл многое.

2Игорь Акопян - стрелки вверх, вниз, влево, вправо. Хочу, чтобы онирисовались поверх ВСЕХ серий, т.е. чтобы они были всегда видны. А так есть 2 серии. Каждая серия - отдельный график.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

если стрелки не привязаны к сериям, т.е. никак не связаны с отображаемыми данными - сделай картинку и положи подложкой на чарт, не катит?

"поверх всех серий", если стрелки будут толстыми - не напрягает то что данные серий будут закрываться?

и вапче, функционал этих стрелок какой?
Изображение
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

как вариант, в чарте есть TArrowSeries можно создать в рантайм несколько штук с нужными значениями
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Nowichok писал(а):2Naeel Maqsudov - Можно чуток поподробнее ,как это осуществить ?

Код: Выделить всё


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, TeeProcs, TeEngine, Chart;

type
  TXChart = class(TChart)
    procedure paint; override;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

procedure TXChart.paint;
begin
  inherited paint;
  self.Canvas.Rectangle(100,100,120,120);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  self.InsertControl(TXChart.Create(application));
end;

end.

Здесь рисование на канве (self.Canvas.Rectangle(100,100,120,120); ) происходит само собой в любой момент после того, как компонент завершил все свои собственные работы по отрисовке (inherited paint; ) себя любимого :)

Бесспортное неудобство - вставку его на форму, а также задание значений всех свойств придется делать в runtime. В дезайнере уже ничего не сделаешь. Но следующим шагом может быть уже созданием собственного компонента, и тогда эта проблема решается.
Nowichok
Сообщения: 8
Зарегистрирован: 07 дек 2006, 22:49

Да, подкласс - это мощно ))
Спасибо за пример.
НО хотелось бы полегче )

а как использщовать серию TArrowSeries у TCHart ? Как вектор рисовтаь ? AddXY Не работае.т.что вполне логично....
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

тогда ответьте на пост №5 ;)
статическая картинка не подходит?

ArrowSeries1.AddArrow( x0, y0, x1, y1, '', clBlue);

кроме того можно составить стрелки из нескольких серий, в том числе TChartShape
Изображение
Ответить