home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 October / Chip_2002-10_cd1.bin / zkuste / delphi / kolekce / d56 / FLEXCEL.ZIP / Demo / UFlDemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-07-04  |  10.5 KB  |  375 lines

  1. unit UFlDemo;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ComCtrls, ExtCtrls, ActnList, ImgList, ToolWin, TemplateStore,
  8.   XLSAdapter, UExcelAdapter, OLEAdapter, UFlexCelImport, UFlexcelReport,
  9.   UReport, UFlDemoData, ShellApi, Grids, DBCtrls,
  10.   UFlDemoEdit, UWaitCursor;
  11.  
  12. type
  13.   TMain = class(TForm)
  14.     ActionList: TActionList;
  15.     ActionClose: TAction;
  16.     ActionReport: TAction;
  17.     ActionUseOle: TAction;
  18.     ActionUseNative: TAction;
  19.     ActionHtml: TAction;
  20.     ActionProtect: TAction;
  21.     ActionViewTemplate: TAction;
  22.     ActionUseTStore: TAction;
  23.     Panel1: TPanel;
  24.     Splitter1: TSplitter;
  25.     ListDemos: TTreeView;
  26.     Tabs: TPageControl;
  27.     TabSheet1: TTabSheet;
  28.     Panel2: TPanel;
  29.     TxtWelcome: TRichEdit;
  30.     TabSheet2: TTabSheet;
  31.     Panel3: TPanel;
  32.     Label3: TLabel;
  33.     TabSheet3: TTabSheet;
  34.     Panel4: TPanel;
  35.     Label2: TLabel;
  36.     TxtSimpleDemo: TRichEdit;
  37.     TabSheet4: TTabSheet;
  38.     Panel5: TPanel;
  39.     Label1: TLabel;
  40.     TxtVarArr: TRichEdit;
  41.     Panel6: TPanel;
  42.     Label4: TLabel;
  43.     TabSheet5: TTabSheet;
  44.     Panel7: TPanel;
  45.     Label5: TLabel;
  46.     TxtDbDemo: TRichEdit;
  47.     Panel8: TPanel;
  48.     Label6: TLabel;
  49.     DBLookupComboBox1: TDBLookupComboBox;
  50.     TabSheet6: TTabSheet;
  51.     Panel9: TPanel;
  52.     Label7: TLabel;
  53.     TxtMultMast: TRichEdit;
  54.     TabSheet7: TTabSheet;
  55.     Panel10: TPanel;
  56.     Label8: TLabel;
  57.     TxtSheets: TRichEdit;
  58.     TabSheet8: TTabSheet;
  59.     TabSheet9: TTabSheet;
  60.     TabSheet10: TTabSheet;
  61.     TabSheet11: TTabSheet;
  62.     TabSheet12: TTabSheet;
  63.     TabSheet13: TTabSheet;
  64.     ToolBar: TToolBar;
  65.     BtnUseNative: TToolButton;
  66.     BtnUseOle: TToolButton;
  67.     ToolButton5: TToolButton;
  68.     BtnHTML: TToolButton;
  69.     BtnProtect: TToolButton;
  70.     BtnUseTStore: TToolButton;
  71.     ToolButton2: TToolButton;
  72.     BtnReport: TToolButton;
  73.     BtnViewTemplate: TToolButton;
  74.     BtnClose: TToolButton;
  75.     StatusBar: TStatusBar;
  76.     Panel11: TPanel;
  77.     Label9: TLabel;
  78.     TxtFishFacts: TRichEdit;
  79.     PageControl1: TPageControl;
  80.     TabSheet15: TTabSheet;
  81.     TabSheet16: TTabSheet;
  82.     GridVarArray1: TStringGrid;
  83.     GridVarArray2: TStringGrid;
  84.     Panel12: TPanel;
  85.     Label10: TLabel;
  86.     TxtPivot: TRichEdit;
  87.     Panel13: TPanel;
  88.     Label11: TLabel;
  89.     TxtEvents: TRichEdit;
  90.     Panel14: TPanel;
  91.     Label12: TLabel;
  92.     TxtCustom: TRichEdit;
  93.     Label13: TLabel;
  94.     edSQL: TMemo;
  95.     Panel15: TPanel;
  96.     Label14: TLabel;
  97.     TxtReadFile: TRichEdit;
  98.     ToolButton1: TToolButton;
  99.     TabSheet17: TTabSheet;
  100.     Panel16: TPanel;
  101.     Label15: TLabel;
  102.     TxtCharts: TRichEdit;
  103.     Panel17: TPanel;
  104.     Label16: TLabel;
  105.     TxtImport: TRichEdit;
  106.     TxtReport: TRichEdit;
  107.     BtnPreview: TToolButton;
  108.     ActionPreview: TAction;
  109.     TabSheet14: TTabSheet;
  110.     Panel18: TPanel;
  111.     Label17: TLabel;
  112.     TxtImgDemo: TRichEdit;
  113.     Panel19: TPanel;
  114.     Label18: TLabel;
  115.     edMyImage: TEdit;
  116.     btnOpenMyImage: TButton;
  117.     procedure FormCreate(Sender: TObject);
  118.     procedure ListDemosChange(Sender: TObject; Node: TTreeNode);
  119.     procedure ActionCloseExecute(Sender: TObject);
  120.     procedure ActionReportUpdate(Sender: TObject);
  121.     procedure ActionUseOleExecute(Sender: TObject);
  122.     procedure ActionHtmlUpdate(Sender: TObject);
  123.     procedure ActionViewTemplateUpdate(Sender: TObject);
  124.     procedure ActionUseTStoreExecute(Sender: TObject);
  125.     procedure ActionUseNativeExecute(Sender: TObject);
  126.     procedure ActionViewTemplateExecute(Sender: TObject);
  127.     procedure ActionReportExecute(Sender: TObject);
  128.     procedure ActionPreviewUpdate(Sender: TObject);
  129.     procedure ActionPreviewExecute(Sender: TObject);
  130.     procedure btnOpenMyImageClick(Sender: TObject);
  131.   private
  132.     DemoEdit: TDemoEdit;
  133.     DlgReport: TReport;
  134.  
  135.     procedure FillGridVarArray(const GridVarArray: TStringGrid);
  136.     procedure DoReport(const Preview: boolean);
  137.     procedure DoImport;
  138.     { Private declarations }
  139.   public
  140.     { Public declarations }
  141.   end;
  142.  
  143. var
  144.   Main: TMain;
  145.  
  146. implementation
  147.  
  148. {$R *.DFM}
  149.  
  150. procedure TMain.FillGridVarArray(const GridVarArray: TStringGrid);
  151. var
  152.   i,k: integer;
  153. begin
  154.   for i:=1 to GridVarArray.ColCount-1 do GridVarArray.Cells[ i , 0]:= chr(ord('A')+i-1);
  155.   for i:=1 to GridVarArray.RowCount-1 do GridVarArray.Cells[ 0 , i]:= IntToStr(i+3);
  156.   for i:=1 to GridVarArray.ColCount-1 do
  157.     for k:=1 to GridVarArray.RowCount-1 do
  158.       GridVarArray.Cells[ i , k]:= IntToStr(Random(5));
  159.   GridVarArray.Cells[3,2]:='FlexCel';
  160. end;
  161.  
  162. procedure TMain.FormCreate(Sender: TObject);
  163. var
  164.   i:integer;
  165.   ExePath: string;
  166. begin
  167.   try
  168.     for i:=0 to Tabs.PageCount-1 do Tabs.Pages[i].TabVisible:=false;
  169.     ListDemos.FullExpand;
  170.  
  171.     ExePath:=ExtractFilePath(ParamStr(0));
  172.     for i:=0 to ComponentCount-1 do if (Components[i] is TRichEdit) and (copy(Components[i].Name,1,3)='Txt') then
  173.       (Components[i] as TRichEdit).Lines.LoadFromFile( ExePath + copy(Components[i].Name,4,length(Components[i].Name))+'.rtf');
  174.  
  175.  
  176.     FillGridVarArray(GridVarArray1);
  177.     FillGridVarArray(GridVarArray2);
  178.  
  179.     edMyImage.Text:= ExePath+'FlexCel.bmp';
  180.   except
  181.     on e: Exception do
  182.     begin
  183.       Application.ShowException(e);
  184.       ShowMessage('Make sure you have unzipped all the files');
  185.       Application.Terminate;
  186.     end;
  187.   end;//Except
  188. end;
  189.  
  190. procedure TMain.ListDemosChange(Sender: TObject; Node: TTreeNode);
  191. begin
  192.   Tabs.ActivePageIndex:= Node.AbsoluteIndex;
  193.   if Tabs.ActivePage.Tag=4 then DemoData.Cust.Open else DemoData.Cust.Close;
  194. end;
  195.  
  196. procedure TMain.ActionCloseExecute(Sender: TObject);
  197. begin
  198.   Close;
  199. end;
  200.  
  201. procedure TMain.DoReport(const Preview: boolean);
  202. var
  203.   Dlg: TSaveDialog;
  204.   StartTime, EndTime: TDateTime;
  205. begin
  206.   StatusBar.SimpleText:='';
  207.   //Process Options
  208.   if BtnUseNative.Down then
  209.     DemoData.SetAdapter(DemoData.XLSAdapter) else
  210.     DemoData.SetAdapter(DemoData.OLEAdapter);
  211.  
  212.   DemoData.Protect:= BtnProtect.Down;
  213.  
  214.   //if it's native or HTML, ask the user for a filename
  215.   Dlg:=nil;
  216.   if BtnUseNative.Down then Dlg:=DemoData.XlsSaveDialog
  217.   else if BtnHTML.Down then Dlg:=DemoData.HTMLSaveDialog;
  218.  
  219.   if Dlg<>nil then
  220.   begin
  221.     if not Dlg.Execute then exit;
  222.     DemoData.SetFileName(Dlg.FileName);
  223.     if FileExists(Dlg.FileName) then DeleteFile(Dlg.FileName);
  224.   end;
  225.   Application.ProcessMessages;
  226.  
  227.   if Tabs.ActivePage.Tag=2 then DemoData.FillArrayDemo([GridVarArray1, GridVarArray2]);
  228.   if Tabs.ActivePage.Tag=3 then DemoData.MyImageFilename:=edMyImage.Text;
  229.   if Tabs.ActivePage.Tag=6 then DemoData.Cust.Open;
  230.   DemoData.Cust.Filtered:= Tabs.ActivePage.Tag=6; //So we dont use so many records
  231.   if BtnUseNative.Down then DemoData.RepPivot.Template:='Templates\PivotDemo AutoOpen.xls' else DemoData.RepPivot.Template:='Templates\PivotDemo.xls';
  232.   if Tabs.ActivePage.Tag=11 then DemoData.Ds.SQL:= edSQL.Lines;
  233.  
  234.   {$IFNDEF Excel97}
  235.     DemoData.OLEAdapter.SaveFormatBasic:=[saHtml];
  236.     DemoData.GetReport(Tabs.ActivePage.Tag).AutoClose:= BtnHTML.Down and BtnHTML.Enabled;
  237.   {$ENDIF}
  238.  
  239.  
  240.   //Run the report
  241.   StartTime:=Now;
  242.   DemoData.GetReport(Tabs.ActivePage.Tag).Run;
  243.   EndTime:=Now;
  244.   StatusBar.SimpleText:=Format('Last Report took: %f seconds', [(EndTime-StartTime)*24*3600]);
  245.  
  246.   if Dlg<>nil then
  247.   begin
  248.     if Preview then
  249.     begin
  250.       if DlgReport= nil then DlgReport:=TReport.Create(Self);
  251.       DlgReport.WB.Navigate(Dlg.FileName);
  252.       try
  253.         DlgReport.ShowModal;
  254.       finally
  255.         FreeAndNil(DlgReport); //only way I've seen to free document
  256.       end; //finally
  257.     end
  258.     else
  259.       ShellExecute( Handle,'open', PCHAR(Dlg.FileName), NIL,NIL, SW_SHOW); 
  260.   end;
  261. end;
  262.  
  263. procedure TMain.DoImport;
  264. begin
  265.   if not DemoData.OpenDialog.Execute then exit;
  266.   Application.ProcessMessages;
  267.   if BtnUseNative.Down then
  268.     DemoData.SetAdapter(DemoData.XLSAdapter) else
  269.     DemoData.SetAdapter(DemoData.OLEAdapter);
  270.  
  271.   DemoData.XLSAdapter.TemplateStore:=nil;
  272.   try
  273.     DemoData.FlexCelImport.OpenFile(DemoData.OpenDialog.FileName);
  274.   finally
  275.     ActionUseTStore.Execute;
  276.   end;//finally
  277.   try
  278.     if DemoEdit=nil then DemoEdit:=TDemoEdit.Create(Self);
  279.     DemoEdit.FillData;
  280.     DemoEdit.ShowModal;
  281.   finally
  282.     DemoData.FlexCelImport.CloseFile;
  283.   end; //finally
  284.  
  285. end;
  286.  
  287. procedure TMain.ActionReportUpdate(Sender: TObject);
  288. begin
  289.   ActionReport.Enabled:= Tabs.ActivePage.Tag>0;
  290.   if Tabs.ActivePage.Tag<100 then
  291.   begin
  292.     ActionReport.ImageIndex:= 13;
  293.     ActionReport.Caption:='Report !';
  294.   end else
  295.   begin
  296.     ActionReport.ImageIndex:= 0;
  297.     ActionReport.Caption:='Import !';
  298.   end;
  299. end;
  300.  
  301. procedure TMain.ActionUseOleExecute(Sender: TObject);
  302. begin
  303.  //
  304. end;
  305.  
  306. procedure TMain.ActionHtmlUpdate(Sender: TObject);
  307. begin
  308.   ActionUseNative.Checked:=  BtnUseNative.Down;
  309.   ActionUseOle.Checked:=  BtnUseOle.Down and (Tabs.ActivePage.Tag<100);
  310.   ActionProtect.Enabled:=ActionUseOle.Checked and (Tabs.ActivePage.Tag<100);
  311.   ActionUseTStore.Enabled:=ActionUseNative.Checked and (Tabs.ActivePage.Tag<100);
  312.  
  313.   {$IfDef Excel97}
  314.   ActionHTML.Enabled:=false;
  315.   {$Else}
  316.   ActionHtml.Enabled:=ActionUseOle.Checked and (Tabs.ActivePage.Tag<100);
  317.   {$Endif}
  318.  
  319. end;
  320.  
  321. procedure TMain.ActionViewTemplateUpdate(Sender: TObject);
  322. begin
  323.   ActionViewTemplate.Enabled:=ActionReport.Enabled and (Tabs.ActivePage.Tag<100);
  324. end;
  325.  
  326. procedure TMain.ActionUseTStoreExecute(Sender: TObject);
  327. begin
  328.   if BtnUseTStore.Down then
  329.    DemoData.XLSAdapter.TemplateStore:=DemoData.XlsTemplateStore
  330.   else DemoData.XLSAdapter.TemplateStore:=nil;
  331. end;
  332.  
  333. procedure TMain.ActionUseNativeExecute(Sender: TObject);
  334. begin
  335.   //
  336. end;
  337.  
  338. procedure TMain.ActionViewTemplateExecute(Sender: TObject);
  339. var
  340.   WaitCursor: IWaitCursor;
  341. begin
  342.   WaitCursor:=TWaitCursor.Create;
  343.   ShellExecute( Handle,'open', PCHAR(ExtractFilePath(Paramstr(0))+DemoData.GetReport(Tabs.ActivePage.Tag).Template), NIL,NIL, SW_SHOW);
  344. end;
  345.  
  346. procedure TMain.ActionReportExecute(Sender: TObject);
  347. var
  348.   WaitCursor: IWaitCursor;
  349. begin
  350.   WaitCursor:=TWaitCursor.Create;
  351.   if Tabs.ActivePage.Tag<100 then DoReport(false) else DoImport;
  352. end;
  353.  
  354. procedure TMain.ActionPreviewUpdate(Sender: TObject);
  355. begin
  356.   ActionPreview.Enabled:= ActionViewTemplate.Enabled and
  357.      (not BtnUseOle.Down  or BtnHTML.Down);
  358. end;
  359.  
  360. procedure TMain.ActionPreviewExecute(Sender: TObject);
  361. var
  362.   WaitCursor: IWaitCursor;
  363. begin
  364.   WaitCursor:=TWaitCursor.Create;
  365.   DoReport(true);
  366. end;
  367.  
  368. procedure TMain.btnOpenMyImageClick(Sender: TObject);
  369. begin
  370.   if not DemoData.OpenPictureDialog.Execute then exit;
  371.   edMyImage.Text:= DemoData.OpenPictureDialog.FileName;
  372. end;
  373.  
  374. end.
  375.