home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Delphi1_And_Delphi2 / EXAMPLES / EXTENDED / DSGNMAIN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  9.9 KB  |  340 lines

  1. {*********************************************}
  2. {  TeeChart Designer Example                  }
  3. {  Copyright (c) 1997 by David Berneda        }
  4. {  All rights reserved                        }
  5. {*********************************************}
  6. {$I Teedefs.inc}
  7. unit DsgnMain;
  8.  
  9. interface
  10.  
  11. { The Chart designer application allows you to create, store, reload,
  12.   edit, print, copy to clipboard, etc CHART files  ( *.TEE files ).
  13.  
  14.   It also connects Series values to a StringGrid component for easy
  15.   point values editing.
  16. }
  17. uses
  18.   SysUtils, Wintypes,WinProcs, Messages, Classes, Graphics, Controls,
  19.   Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus,
  20.   Teengine, Chart, Series, TeeProcs, Grids,
  21.   TeeGrid, TeeComma           { <-- to show points at TStringGrid }
  22.   ;
  23.  
  24. type
  25.   TTeeDesignerForm = class(TForm)
  26.     MainMenu: TMainMenu;
  27.     FileNewItem: TMenuItem;
  28.     FileOpenItem: TMenuItem;
  29.     FileSaveItem: TMenuItem;
  30.     FileSaveAsItem: TMenuItem;
  31.     FilePrintItem: TMenuItem;
  32.     FilePrintSetupItem: TMenuItem;
  33.     FileExitItem: TMenuItem;
  34.     EditCopyItem: TMenuItem;
  35.     HelpAboutItem: TMenuItem;
  36.     OpenDialog: TOpenDialog;
  37.     SaveDialog: TSaveDialog;
  38.     SpeedBar: TPanel;
  39.     SpeedButton1: TSpeedButton;  { &New }
  40.     SpeedButton2: TSpeedButton;  { &Open... }
  41.     SpeedButton3: TSpeedButton;  { &Save }
  42.     SpeedButton4: TSpeedButton;  { P&rint Setup... }
  43.     SpeedButton7: TSpeedButton;  { &Arrange All }
  44.     SpeedButton13: TSpeedButton;
  45.     CopyasMetafile1: TMenuItem;
  46.     SpeedButton6: TSpeedButton;
  47.     StringGrid1: TStringGrid;
  48.     Chart1: TChart;
  49.     Panel1: TPanel;
  50.     Panel2: TPanel;
  51.     ShowColors: TCheckBox;
  52.     ShowXValues: TCheckBox;
  53.     SpeedButton9: TSpeedButton;
  54.     SpeedButton10: TSpeedButton;
  55.     ShowLabels: TCheckBox;
  56.     TeeCommander1: TTeeCommander;  { &About... }
  57.     procedure FormCreate(Sender: TObject);
  58.     procedure FileNew(Sender: TObject);
  59.     procedure FileOpen(Sender: TObject);
  60.     procedure FileSave(Sender: TObject);
  61.     procedure FileSaveAs(Sender: TObject);
  62.     procedure FileExit(Sender: TObject);
  63.     procedure HelpContents(Sender: TObject);
  64.     procedure HelpSearch(Sender: TObject);
  65.     procedure HelpHowToUse(Sender: TObject);
  66.     procedure HelpAbout(Sender: TObject);
  67.     procedure CopyasMetafile1Click(Sender: TObject);
  68.     procedure SpeedButton6Click(Sender: TObject);
  69.     procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  70.       Shift: TShiftState; X, Y: Integer);
  71.     procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  72.       Shift: TShiftState; X, Y: Integer);
  73.     procedure Chart1ClickSeries(Sender: TCustomChart; Series: TChartSeries;
  74.       ValueIndex: Longint; Button: TMouseButton; Shift: TShiftState; X,
  75.       Y: Integer);
  76.     procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Longint;
  77.       const Value: String);
  78.     procedure SpeedButton9Click(Sender: TObject);
  79.     procedure SpeedButton10Click(Sender: TObject);
  80.     procedure ShowXValuesClick(Sender: TObject);
  81.     procedure ShowColorsClick(Sender: TObject);
  82.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  83.   public
  84.     { current editing chart file name and path }
  85.     CurrentName:String;
  86.     { has been the current chart modified ? }
  87.     Modified,
  88.     { is the user dragging the splitter panel ? }
  89.     Splitting:Boolean;
  90.     { temporary variable to use the grid... }
  91.     ColumnValues:TTeeGridColumnValues;
  92.     { show any error when loading *.tee files... }
  93.     Function CheckLoadingErrors(const Message: string): Boolean;
  94.     { refill the stringgrid... }
  95.     Procedure RefreshGrid;
  96.   end;
  97.  
  98. implementation
  99.  
  100. {$R *.DFM}
  101. uses teestore,          { <-- to load / save Charts }
  102.      EditChar,EditPro,  { <-- to access the Editor Dialog }
  103.      TeePrevi,          { <-- to print preview Charts }
  104.      TeeAbout;
  105.  
  106. { add some random values for new Charts... }
  107. Procedure FillSamples(ASeries:TChartSeries);
  108. Const
  109.   NumSamples=6;
  110.   ALabel:Array[1..NumSamples] of String=('Anne','John','Mary','Mike','Dave','Charles');
  111. Var t:Integer;
  112. begin
  113.   for t:=1 to NumSamples do ASeries.Add(Random(1000),ALabel[t],clTeeColor);
  114. end;
  115.  
  116. { show a new Chart on editor... }
  117. procedure TTeeDesignerForm.FormCreate(Sender: TObject);
  118. begin
  119.   CurrentName:='';
  120.   Modified:=False;
  121.   Splitting:=False;
  122.   FileNew(Self);
  123. end;
  124.  
  125. { ask user a question... }
  126. Function YesNo(Const S:String):Boolean;
  127. Var St:Array[0..255] of Char; { 16bit compatibility }
  128. begin
  129.   result:=Application.MessageBox(StrPCopy(St,S),'Warning!',MB_YESNO)=IDYES;
  130. end;
  131.  
  132. { create a new chart... }
  133. procedure TTeeDesignerForm.FileNew(Sender: TObject);
  134. begin
  135.   if (not Modified) or YesNo('Chart has been modified. Are you sure?') then
  136.   begin
  137.     Chart1.Free;
  138.     Chart1:=TChart.Create(Self);
  139.     TeeCommander1.Panel:=Chart1;
  140.     With Chart1 do
  141.     begin
  142.       Parent:=Self;
  143.       Align:=alClient;
  144.       AddSeries(TBarSeries.Create(Self));
  145.       With Series[0] do
  146.       begin
  147.         Name:='Series1';
  148.         ColorEachPoint:=True;
  149.         Marks.Style:=smsValue;
  150.       end;
  151.       FillSamples(Series[0]);
  152.       OnClickSeries:=Chart1ClickSeries;
  153.     end;
  154.     { fill the grid with values... }
  155.     RefreshGrid;
  156.     Modified:=False;
  157.   end;
  158. end;
  159.  
  160. { open an existing *.tee file... }
  161. procedure TTeeDesignerForm.FileOpen(Sender: TObject);
  162. var tmpChart:TCustomChart;
  163. begin
  164.   if (not Modified) or YesNo('Chart has been modified. Are you sure?') then
  165.   begin
  166.     OpenDialog.FileName:='*.tee';
  167.     if OpenDialog.Execute then
  168.     begin
  169.       { load the chart... }
  170.       Chart1.Free;
  171.       tmpChart:=TChart.Create(Self);
  172.       TeeCommander1.Panel:=tmpChart;
  173.       LoadChartFromFileCheck(tmpChart,OpenDialog.FileName,CheckLoadingErrors);
  174.       Chart1:=tmpChart as TChart;
  175.       Chart1.OnClickSeries:=Chart1ClickSeries;
  176.       Chart1.Align:=alClient;
  177.       Chart1.Parent:=Self;
  178.       { fill the grid with values... }
  179.       RefreshGrid;
  180.       Modified:=False;
  181.       CurrentName:=OpenDialog.FileName;
  182.     end;
  183.   end;
  184. end;
  185.  
  186. procedure TTeeDesignerForm.FileSave(Sender: TObject);
  187. begin
  188.   if CurrentName='' then FileSaveAs(Self)
  189.                     else
  190.                     begin
  191.                       SaveChartToFile(Chart1,CurrentName);
  192.                       Modified:=False;
  193.                     end;
  194. end;
  195.  
  196. procedure TTeeDesignerForm.FileSaveAs(Sender: TObject);
  197. begin
  198.   if SaveDialog.Execute then
  199.   begin
  200.     SaveChartToFile(Chart1,SaveDialog.FileName);
  201.     CurrentName:=SaveDialog.FileName;
  202.     Modified:=False;
  203.   end;
  204. end;
  205.  
  206. procedure TTeeDesignerForm.FileExit(Sender: TObject);
  207. begin
  208.   if (not Modified) or YesNo('Chart has been modified. Are you sure?') then
  209.      Close;
  210. end;
  211.  
  212. procedure TTeeDesignerForm.HelpContents(Sender: TObject);
  213. begin
  214.   Application.HelpCommand(HELP_CONTENTS, 0);
  215. end;
  216.  
  217. procedure TTeeDesignerForm.HelpSearch(Sender: TObject);
  218. const EmptyString: PChar = '';
  219. begin
  220.   Application.HelpCommand(HELP_PARTIALKEY, Longint(EmptyString));
  221. end;
  222.  
  223. procedure TTeeDesignerForm.HelpHowToUse(Sender: TObject);
  224. begin
  225.   Application.HelpCommand(HELP_HELPONHELP, 0);
  226. end;
  227.  
  228. procedure TTeeDesignerForm.HelpAbout(Sender: TObject);
  229. begin
  230.   TeeShowAboutBox(True);
  231. end;
  232.  
  233. procedure TTeeDesignerForm.CopyasMetafile1Click(Sender: TObject);
  234. begin
  235.   Chart1.CopyToClipboardMetafile(True);
  236. end;
  237.  
  238. procedure TTeeDesignerForm.SpeedButton6Click(Sender: TObject);
  239. begin
  240.   EditChart(Self,Chart1);
  241.   RefreshGrid;
  242.   Modified:=True;
  243. end;
  244.  
  245. procedure TTeeDesignerForm.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  246.   Shift: TShiftState; X, Y: Integer);
  247. begin
  248.   if Splitting then
  249.   begin
  250.     StringGrid1.Height:=StringGrid1.Height-Y;
  251.     Splitting:=False;
  252.   end;
  253. end;
  254.  
  255. procedure TTeeDesignerForm.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  256.   Shift: TShiftState; X, Y: Integer);
  257. begin
  258.   Splitting:=True;
  259. end;
  260.  
  261. { Select a Grid cell when the user clicks a Series point... }
  262. procedure TTeeDesignerForm.Chart1ClickSeries(Sender: TCustomChart;
  263.   Series: TChartSeries; ValueIndex: Longint; Button: TMouseButton;
  264.   Shift: TShiftState; X, Y: Integer);
  265. begin
  266.   StringGrid1.Col:=ColumnValues.FirstColSeries+Chart1.SeriesList.IndexOf(Series);
  267.   StringGrid1.Row:=1+ValueIndex;
  268. end;
  269.  
  270. { Change the Series point values when user types in the grid... }
  271. procedure TTeeDesignerForm.StringGrid1SetEditText(Sender: TObject; ACol,
  272.   ARow: Longint; const Value: String);
  273. begin
  274.   Modified:=True;
  275.   TeeModifyGrid(Chart1,ACol,ARow,Value,ColumnValues);
  276. end;
  277.  
  278. Function TTeeDesignerForm.CheckLoadingErrors(const Message: string): Boolean;
  279. begin
  280.   result:=True;
  281. {  result:=YesNo(Message); }  { <- for debug }
  282. end;
  283.  
  284. procedure TTeeDesignerForm.SpeedButton9Click(Sender: TObject);
  285. Var t:Integer;
  286. begin
  287.   if StringGrid1.Col>0 then
  288.   begin
  289.     for t:=0 to Chart1.SeriesCount-1 do Chart1[t].Add(0,'',clTeeColor);
  290.     RefreshGrid;
  291.   end;
  292. end;
  293.  
  294. procedure TTeeDesignerForm.SpeedButton10Click(Sender: TObject);
  295. Var t,ValueIndex:Integer;
  296. begin
  297.   if (StringGrid1.Col>0) and (StringGrid1.Row>0) then
  298.   begin
  299.     ValueIndex:=StringGrid1.Row-1;
  300.     for t:=0 to Chart1.SeriesCount-1 do
  301.     begin
  302.       if Chart1[t].Count>ValueIndex then
  303.       begin
  304.         Chart1[t].Delete(ValueIndex);
  305.         if not HasNoMandatoryValues(Chart1[t]) then
  306.            NotMandatoryList(Chart1[t]).FillSequence;
  307.       end;
  308.     end;
  309.     RefreshGrid;
  310.   end;
  311. end;
  312.  
  313. procedure TTeeDesignerForm.ShowXValuesClick(Sender: TObject);
  314. begin
  315.   RefreshGrid;
  316. end;
  317.  
  318. procedure TTeeDesignerForm.ShowColorsClick(Sender: TObject);
  319. begin
  320.   RefreshGrid;
  321. end;
  322.  
  323. Procedure TTeeDesignerForm.RefreshGrid;
  324. var tmp:TChartGridOptions;
  325. begin
  326.   tmp:=[];
  327.   if ShowLabels.Checked then tmp:=tmp+[cgLabels];
  328.   if ShowColors.Checked then tmp:=tmp+[cgColors];
  329.   if ShowXValues.Checked then tmp:=tmp+[cgXValues];
  330.   TeeFillGrid(StringGrid1,Chart1,tmp,ColumnValues);
  331. end;
  332.  
  333.  
  334. procedure TTeeDesignerForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  335. begin
  336.   CanClose:=(not Modified) or YesNo('Chart has been modified. Are you sure to EXIT?');
  337. end;
  338.  
  339. end.
  340.