Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / FastReport Chart цвет каждой линии / 4 сообщений из 4, страница 1 из 1
22.06.2011, 17:40
    #37320544
FastReport Chart цвет каждой линии
Требуется построить график и раскрасить каждую линию нужным цветом. Реализация должна быть, как при установке свойства серии ColorEachPoint := True, но значение цвета необходимо выставлять самому.

На форму бросил TfrxReport, в нём добавил TfrxMasterData, на него установил TfrxChartView с одной серией HorizontalLine. Так же на форму добавил TfrxUserDataSet, для получения значений X, Y графика.

Как раскрашивать отдельные линии?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
 unit  Unit1;

 interface 

 uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, frxChart, frxClass;

 type 
  TForm1 =  class (TForm)
    frxReport1: TfrxReport;
    frxChartObject1: TfrxChartObject;
    frxUserDataSet1: TfrxUserDataSet;
     procedure  FormCreate(Sender: TObject);
     procedure  frxUserDataSet1GetValue( const  VarName:  string ;
       var  Value: Variant);
     procedure  frxUserDataSet1CheckEOF(Sender: TObject;  var  Eof: Boolean);
   private 
    FInt:         Integer;
    FChart:       TfrxChartView;
    FMasterData:  TfrxMasterData;
   public 
   end ;

 var 
  Form1: TForm1;

 implementation 

 {$R *.dfm} 

 procedure  TForm1.FormCreate(Sender: TObject);
 begin 
  FInt :=  0 ;

  FChart := TfrxChartView(frxReport1.FindObject('Chart1'));
  FMasterData := TfrxMasterData(frxReport1.FindObject('MasterData1'));

  frxUserDataSet1.Fields.Add('X');
  frxUserDataSet1.Fields.Add('Y');

  frxReport1.DataSets.Add(frxUserDataSet1);
  FMasterData.DataSet := frxUserDataSet1;

  FChart.SeriesData[ 0 ].DataSet  := frxUserDataSet1;
  FChart.SeriesData[ 0 ].XSource  := FMasterData.DataSetName + '."X"';
  FChart.SeriesData[ 0 ].YSource  := FMasterData.DataSetName + '."Y"';

  frxReport1.ShowReport();

  Application.Terminate;
 end ;

 procedure  TForm1.frxUserDataSet1CheckEOF(Sender: TObject;  var  Eof: Boolean);
 begin 
  Eof := FInt >  50 ;
 end ;

 procedure  TForm1.frxUserDataSet1GetValue( const  VarName:  string ;
   var  Value: Variant);
 begin 
   if  VarName = 'X'  then 
    Value := FInt
   else 
    Value := FInt * Random( 5 );

  Inc(FInt);
 end ;

 end .

Вопрос скорее всего очень простой, но решения нагуглить не получилось. Заранее благодарен.
...
Рейтинг: 0 / 0
22.06.2011, 19:12
    #37320678
FastReport Chart цвет каждой линии
Если данные брать из фиксированного набора, то цвет добавляется следующим образом:
Код: plaintext
1.
2.
3.
  FChart.SeriesData[ 0 ].Source2 := '21;25;22;44';
  FChart.SeriesData[ 0 ].Source3 := '11;22;33;21';
  FChart.SeriesData[ 0 ].Source4 := 'clRed;clBlue;clBlack;clYellow';

Как цвет получать через TfrxUserDataSet или хотя бы выставлять в скрипте, до сих пор не соображу...
...
Рейтинг: 0 / 0
24.06.2011, 00:43
    #37322831
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport Chart цвет каждой линии
Попробуйте в скрипте отчёта пройтись по датасету
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 var  DS: TfrxDataSet;
 begin 
    DS:=Report.GetDataset('Items');
    DS.First;
     while   not  DS.Eof  do       
       begin           
        ShowMessage(DS.Value('Part Name'));
        DS.NEXT;
       end ;        
 end .
и сформируйте Source2-Source4
...
Рейтинг: 0 / 0
24.06.2011, 12:16
    #37323393
FastReport Chart цвет каждой линии
Оказалось всё намного проще. Необходимо добавить в датасет поле 'color', чтобы оно запрашивалось, что логично. А запрашиваться оно должно для FChart.SeriesData[0].Source4, это и не мог найти в документации.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 procedure  TForm1.FormCreate(Sender: TObject);
 begin 
  FInt :=  0 ;

  FChart := TfrxChartView(frxReport1.FindObject('Chart1'));
  FMasterData := TfrxMasterData(frxReport1.FindObject('MasterData1'));

  frxUserDataSet1.Fields.Add('X');
  frxUserDataSet1.Fields.Add('Y');
  frxUserDataSet1.Fields.Add('COLOR');

  frxReport1.DataSets.Add(frxUserDataSet1);
  FMasterData.DataSet := frxUserDataSet1;

  FChart.SeriesData[ 0 ].DataSet  := frxUserDataSet1;
  FChart.SeriesData[ 0 ].XSource  := FMasterData.DataSetName + '."X"';
  FChart.SeriesData[ 0 ].YSource  := FMasterData.DataSetName + '."Y"';
  FChart.SeriesData[ 0 ].Source4  := FMasterData.DataSetName + '."COLOR"';

  frxReport1.ShowReport();
  Application.Terminate;
 end ;

 procedure  TForm1.frxUserDataSet1GetValue( const  VarName:  string ;
   var  Value: Variant);
 begin 
   if  VarName = 'COLOR'  then 
    Value := Random(clWhite)
   else   if  VarName = 'X'  then 
    Value := FInt
   else 
    Value := FInt * Random( 5 );

  Inc(FInt);
 end ;
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / FastReport Chart цвет каждой линии / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]