home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / DELPHI3.EXE / %MAINDIR% / Examples / Delphi3 / Jpeg / Teejpeg.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1998-11-17  |  7.6 KB  |  252 lines

  1. {****************************************}
  2. {       TeeChart Charting Library        }
  3. {          For Delphi 1, 2 & 3           }
  4. {           & C++ Builder 1              }
  5. { Copyright (c) 1996-97 by David Berneda }
  6. {          All Rights Reserved           }
  7. {****************************************}
  8. unit TeeJPEG;
  9.  
  10. { This unit shows an example of EXPORTING a TeeChart component to
  11.   a graphic FILE.
  12.  
  13.   Bitmap and Metafile image formats are supported in Delphi 1,2 and 3.
  14.   JPEG format is supported in Delphi 3.0 only.
  15.  
  16.   INSTALLATION:
  17.  
  18.   BEFORE running this project, you should do the following in Delphi 3.0:
  19.  
  20.   Component --> Install Component --> Unit file Name:
  21.  
  22.   \Delphi 3.0\Lib\JPEG.DCU
  23.  
  24.   and recompile and install the selected PACKAGE.
  25.  
  26. }
  27. interface
  28.  
  29. uses
  30.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  31.   StdCtrls, Buttons, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Spin,
  32.   ComCtrls;
  33.  
  34. type
  35.   TForm1 = class(TForm)
  36.     EditFilePath: TEdit;
  37.     PageControl1: TPageControl;
  38.     TabSheet1: TTabSheet;
  39.     TabSheet2: TTabSheet;
  40.     Chart1: TChart;
  41.     Image1: TImage;
  42.     ButtonEdit: TBitBtn;
  43.     Series1: TBarSeries;
  44.     Label2: TLabel;
  45.     GroupBox1: TGroupBox;
  46.     CheckBoxGrayScale: TCheckBox;
  47.     CheckBoxProgressiveEncoding: TCheckBox;
  48.     Label1: TLabel;
  49.     CheckBoxProgressiveDisplay: TCheckBox;
  50.     CheckBoxSmoothing: TCheckBox;
  51.     RadioPixelFormat: TRadioGroup;
  52.     RadioPerformance: TRadioGroup;
  53.     RadioScale: TRadioGroup;
  54.     TrackQuality: TTrackBar;
  55.     Series2: TLineSeries;
  56.     Label3: TLabel;
  57.     LabelFileSize: TLabel;
  58.     Label4: TLabel;
  59.     BitBtn1: TBitBtn;
  60.     TabSheet3: TTabSheet;
  61.     Image2: TImage;
  62.     Image3: TImage;
  63.     procedure FormCreate(Sender: TObject);
  64.     procedure CheckBoxGrayScaleClick(Sender: TObject);
  65.     procedure ButtonEditClick(Sender: TObject);
  66.     procedure BitBtn1Click(Sender: TObject);
  67.     procedure PageControl1Change(Sender: TObject);
  68.   private
  69.     { Private declarations }
  70.   public
  71.     { Public declarations }
  72.     procedure RefreshBMPImage;
  73.     procedure RefreshJPEGImage;
  74.     procedure RefreshMetaImage;
  75.     Function ImageFileName:String;
  76.   end;
  77.  
  78. var
  79.   Form1: TForm1;
  80.  
  81. implementation
  82.  
  83. {$R *.DFM}
  84. uses JPEG,               { <-- This unit comes with Delphi 3.0 }
  85.      EditChar;           { <-- TeeChart unit necessary to show the Chart Editor }
  86.  
  87. { This function returns a FILE SIZE in BYTES }
  88. Function SizeFile(Const FileName:String):Integer;
  89. var f:File of byte;
  90. begin
  91.   AssignFile(f,FileName);
  92.   Reset(f);
  93.   result:=FileSize(f);
  94.   CloseFile(f);
  95. end;
  96.  
  97. { This function creates a TJPEGImage and draws a TeeChart on it }
  98. Function GetChartJPEG(AChart:TCustomChart; Params:TJPEGDefaults):TJPEGImage;
  99. var tmpBitmap:TBitmap;
  100. begin
  101.   result:=TJPEGImage.Create;   { <-- create a TJPEGImage }
  102.   tmpBitmap:=TBitmap.Create;   { <-- create a temporary TBitmap }
  103.   try
  104.     tmpBitmap.Width :=AChart.Width;   { <-- set the bitmap dimensions }
  105.     tmpBitmap.Height:=AChart.Height;
  106.     { draw the Chart on the temporary Bitmap... }
  107.     AChart.Draw(tmpBitmap.Canvas,Rect(0,0,tmpBitmap.Width,tmpBitmap.Height));
  108.     { set the desired JPEG options... }
  109.     With result do
  110.     begin
  111.       GrayScale            :=Params.GrayScale;
  112.       ProgressiveEncoding  :=Params.ProgressiveEncoding;
  113.       CompressionQuality   :=Params.CompressionQuality;
  114.       PixelFormat          :=Params.PixelFormat;
  115.       ProgressiveDisplay   :=Params.ProgressiveDisplay;
  116.       Performance          :=Params.Performance;
  117.       Scale                :=Params.Scale;
  118.       Smoothing            :=Params.Smoothing;
  119.       { Copy the temporary Bitmap onto the JPEG image... }
  120.       Assign(tmpBitmap);
  121.     end;
  122.   finally
  123.     tmpBitmap.Free;  { <-- free the temporary Bitmap }
  124.   end;
  125. end;
  126.  
  127. { Create a Bitmap, draw the Chart on it and Save the Bitmap }
  128. procedure TForm1.RefreshBMPImage;
  129. begin
  130.   With TBitmap.Create do
  131.   try
  132.     Width:=Chart1.Width;   { <-- set the bitmap dimensions }
  133.     Height:=Chart1.Height;
  134.     Chart1.Draw(Canvas,Rect(0,0,Width,Height)); { <-- draw the Chart }
  135.     SaveToFile(ImageFileName);  { <-- save the bitmap to disk }
  136.   finally
  137.     Free;
  138.   end;
  139. end;
  140.  
  141. { This function creates a Metafile with a Chart image on it and
  142.   Saves the Metafile to disk }
  143. procedure TForm1.RefreshMetaImage;
  144. var tmpMeta:TMetafile;
  145. begin
  146.   { Create the Metafile with the desired dimensions }
  147.   With Chart1 do tmpMeta:=TeeCreateMetafile(True,Rect(0,0,Width,Height));
  148.   try
  149.     tmpMeta.SaveToFile(ImageFileName);   { <-- save the metafile to disk }
  150.     Image2.Picture.LoadFromFile(ImageFileName);   { <-- load the metafile }
  151.   finally
  152.     tmpMeta.Free;  { <-- free the temporary Metafile }
  153.   end;
  154. end;
  155.  
  156. { This function creates a JPEG Image, sets the desired JPEG
  157.   parameters, draws a Chart on it, Saves the JPEG on disk and
  158.   Loads the JPEG from disk to show it on this Form. }
  159. procedure TForm1.RefreshJPEGImage;
  160. Var Params:TJPEGDefaults;
  161. begin
  162.   Screen.Cursor:=crHourGlass;
  163.   try
  164.     { Get the JPEG params }
  165.     With Params do
  166.     begin
  167.       GrayScale:=CheckBoxGrayScale.Checked;
  168.       ProgressiveEncoding:=CheckBoxProgressiveEncoding.Checked;
  169.       CompressionQuality:=TrackQuality.Position;
  170.       if RadioPixelFormat.ItemIndex=0 then PixelFormat:=jf24bit
  171.                                       else PixelFormat:=jf8bit;
  172.       ProgressiveDisplay:=CheckBoxProgressiveDisplay.Checked;
  173.       if RadioPerformance.ItemIndex=0 then Performance:=jpBestQuality
  174.                                       else Performance:=jpBestSpeed;
  175.       Case RadioScale.ItemIndex of
  176.          0: Scale:=jsFullSize;
  177.          1: Scale:=jsHalf;
  178.          2: Scale:=jsQuarter;
  179.          3: Scale:=jsEighth;
  180.       end;
  181.       Smoothing:=CheckBoxSmoothing.Checked;
  182.     end;
  183.     { Create the JPEG with the Chart image }
  184.     With GetChartJPEG(Chart1,Params) do
  185.     try
  186.       SaveToFile(ImageFileName);    { <-- save the JPEG to disk }
  187.       Image1.Picture.LoadFromFile(ImageFileName);  { <-- Load the JPEG }
  188.     finally
  189.       Free;  { <-- free the temporary JPEG object }
  190.     end;
  191.     { refresh the saved File Size }
  192.     LabelFileSize.Caption:=IntToStr(SizeFile(ImageFileName));
  193.   finally
  194.     Screen.Cursor:=crDefault;
  195.   end;
  196. end;
  197.  
  198. { Fill the TeeChart with some random values and refresh the JPEG image }
  199. procedure TForm1.FormCreate(Sender: TObject);
  200. begin
  201.   Series1.FillSampleValues(8);
  202.   Series2.FillSampleValues(28);
  203.   PageControl1.ActivePage:=TabSheet1;
  204.   PageControl1Change(Self);
  205. end;
  206.  
  207. procedure TForm1.CheckBoxGrayScaleClick(Sender: TObject);
  208. begin
  209.   RefreshJPEGImage;
  210. end;
  211.  
  212. procedure TForm1.ButtonEditClick(Sender: TObject);
  213. begin
  214.   EditChart(Self,Chart1);
  215.   RefreshJPEGImage;
  216. end;
  217.  
  218. procedure TForm1.BitBtn1Click(Sender: TObject);
  219. begin
  220.   Close;
  221. end;
  222.  
  223. { This function returns a temporary file name to save the Chart
  224.   image with the correct File extension }
  225. Function TForm1.ImageFileName:String;
  226. Var Extension:String;
  227. begin
  228.   With PageControl1 do
  229.   begin
  230.     if ActivePage=TabSheet1 then Extension:='JPG' else
  231.     if ActivePage=TabSheet2 then Extension:='BMP' else
  232.     if ActivePage=TabSheet3 then Extension:='EMF';
  233.   end;
  234.   result:=EditFilePath.Text+'teechart.'+Extension;
  235. end;
  236.  
  237. { Refresh the Chart image and controls }
  238. procedure TForm1.PageControl1Change(Sender: TObject);
  239. begin
  240.   With PageControl1 do
  241.   begin
  242.     ButtonEdit.Visible:=ActivePage=TabSheet2;
  243.     if ActivePage=TabSheet1 then RefreshJPEGImage else
  244.     if ActivePage=TabSheet2 then RefreshBMPImage else
  245.     if ActivePage=TabSheet3 then RefreshMetaImage;
  246.     LabelFileSize.Caption:=IntToStr(SizeFile(ImageFileName));
  247.     GroupBox1.Visible:=ActivePage=TabSheet1;
  248.   end;
  249. end;
  250.  
  251. end.
  252.