Page 1 of 1

Question about ver 8 import / export functions

Posted: Tue Sep 18, 2007 3:34 pm
by 9336044
Hello,

We are looking to provide a way to build a chart and export it - both data and all markup settings - to a file. We would then like the ability to reimport this exported information to a TChart object and have a "new" live chart.

We are experimenting with the trial for version 8. I see there are several export functions for Text, XML, HTML, etc. For import, I see there is the ability to import from a *.TEE file.

Please bear with me for this question but can you elaborate on exactly *how* we could accomplish this little task? I created a simple test application consisting of one form with two TChart components. This form has three buttons. The first populates the first TChart with 3 series of sample data, the second exports the contents of Chart1 using SaveChartToFile, and the third tries to populate the second Chart from the export file created by button2.

Here is the source code for my one and only unit...

Code: Select all

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btnCreate: TButton;
    btnExport: TButton;
    Chart1: TChart;
    btnImport: TButton;
    Chart2: TChart;
    procedure btnCreateClick(Sender: TObject);
    procedure btnExportClick(Sender: TObject);
    procedure btnImportClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses TeeStore;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  Chart1.AddSeries(TPieSeries);
  Chart1.AddSeries(TBarSeries);
  Chart1.AddSeries(TLineSeries);
  Chart1.SeriesList.FillSampleValues(15);
end;

procedure TForm1.btnExportClick(Sender: TObject);
begin
  SaveChartToFile(Chart1, 'c:\Export.tee', True);
end;

procedure TForm1.btnImportClick(Sender: TObject);
begin
  LoadChartFromFile(TCustomChart(Chart2), 'c:\Export.tee');
end;

end.
To import my data, I tried both the LoadChartFromFile method AND the TImportChart class's LoadFromFile method. Both report the same errors, neither can locate the needed Series classes to create my second chart. So where my source chart had three series (one bar, one line, one pie), during Import, I get three error messages "Class TBarSeries not found", "Class TPieSeries not found", and "Class TLineSeries not found".

Can you please tell me what I am doing wrong?

Re: Question about ver 8 import / export functions

Posted: Tue Sep 18, 2007 9:23 pm
by 9047589
9336044 wrote: Can you please tell me what I am doing wrong?
The code you put here must produce compiler errors ;)
Anyhow, add lines
RegisterClass(TPieSeries);
RegisterClass(TBarSeries);
RegisterClass(TLineSeries);
before
LoadChartFromFile(TCustomChart(Chart2), 'c:\Export.tee');
or include EditChar into uses clause.

Posted: Tue Sep 18, 2007 10:40 pm
by 9336044
Thanks for the reply.

Nope, the code I posted produced NO compiler errors and I was even able to run the application. The only error came when I tried to run LoadChartFromFile.

Anyway, adding EditChar to the uses clause fixed the problem, although I did have to add a little more code because evidently the Save and Load methods save EVERYTHING, including placement on the screen. Until I backed up the original position of my destination chart, calling LoadChartFromFile not only made a mirror image of Chart1 in Chart2, it also moved Chart2 on top of Chart1, completely covering it.

What I don't understand is why I should have to add anything to my code. The Chart Series types I was using are declared in the Series unit, if I am not mistaken. The Series unit is already included in this project and I was able to reference the TPieSeries, TBarSeries, and TLineSeries types in the btnCreateClick method. Why should these be "lost" later on in the same module?

Posted: Wed Sep 19, 2007 8:44 am
by narcis
Hi rackerson,

Before loading chart you have to register all series/tools classes you originally exported. This can be done by using RegisterTeeSeries(...) and RegisterTeeTool(...) routines. Or (much better and simpler solution) by including the TeeEditPRO unit to the import form Uses section. Including TeeEditPRO automatically registers all series/tool types.

Re: Question about ver 8 import / export functions

Posted: Wed May 05, 2010 6:39 am
by 16556071
Hello,

I am facing the same problem when try loading a tee chart template from a file. An error occured that a specific series class cannot be found. Adding the TeeEditPro Unit to the uses clause works but it also nearly doubles the size of the resulting application. Is there another way to register all series classes without that oversize?

Markus

Re: Question about ver 8 import / export functions

Posted: Wed May 05, 2010 7:34 am
by narcis
Hi Markus,

I'm afraid not. The only alternative is using RegisterTeeSeries but it must be one by one.

Re: Question about ver 8 import / export functions

Posted: Wed May 05, 2010 9:31 am
by 16556071
Hi NarcĂ­s,

thank you for your quick reply! I tried it series by series but at least that leaded to just a bigger size so I decided to put the TeeEditPro to the uses clause.

But now I have just another question concerning the export and import of charts to a template. I am using the native tee-chart format for that task. Everything works fine but some properties are overwritten whenever I call the "LoadChartFromFile" function and view the chart in a TChart component. For example the Panel-Gradient property allways is checked and the background of the TChart is gradient even if it was unchecked when saving the file. When I open up a preview with a TChartPreviewer that is connected to the same TChart, the backgound is not gardient. Saving the chart again allways stores the Panel-Gradient property as checked if I do not manually uncheck it before saving.

Do you have any idea what's going wrong?

Thank you
Markus

Re: Question about ver 8 import / export functions

Posted: Wed May 05, 2010 11:53 am
by yeray
Hi Markus,

I'm trying the following with TeeChart VCL v2010 and I can see the same chart before and after clicking button2. Could you please modify the example so that we can reproduce the problem here?

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.Gradient.Visible:=false;

  Chart1.AddSeries(TPointSeries.Create(Self));
  Chart1[0].FillSampleValues;

  SaveChartToFile(Chart1,'C:\tmp\chart.tee');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Chart1.Free;
  Chart1:=nil;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.Click;
  Chart1:=TChart.Create(Self);
  RegisterClass(TPointSeries);
  LoadChartFromFile(TCustomChart(Chart1),'C:\tmp\chart.tee');
  Chart1.Parent:=Form1;
end;

Re: Question about ver 8 import / export functions

Posted: Wed May 05, 2010 1:17 pm
by 16556071
Hello Yeray,

ok I tried a bit and I can reproduce the behavior. I attached a project where you can see the problem. You muss do the following:

1. Start the project
2. Uncheck then Panel-Gradient-Visible property in the chart editor
3. Close the chart editor
4. Save the chart to file by clicking the "Save" button
5. Close the application
6. Restart the application
7. Click the "Open" Button and load the file you saved in step 4

Now you should see that the gradient background is still there. If you load the file right after you saved it without closing the app the effect doesn't occur.

Regards Markus

Re: Question about ver 8 import / export functions

Posted: Thu May 06, 2010 10:08 am
by narcis
Hi Markus,

Thanks for the example project. I'm afraid this is a bug which I have added to the defect list (TV52014854) to be fixed for future releases.

Re: Question about ver 8 import / export functions

Posted: Fri May 07, 2010 11:26 am
by 16556071
Hi Yeray,

thank you. Can I access this defect list so that I can see when the bug is fixed?

Regards
Markus

Re: Question about ver 8 import / export functions

Posted: Fri May 07, 2010 11:41 am
by yeray
Hi Markus,

I'm afraid we don't have a public bug tracking system. You should see if the ticket number you are interested in is in the release notes of the new release.