home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd1.bin / zkuste / delphi / kolekce / d567 / FLEXCEL.ZIP / Demo / XlsViewer / UXlsViewer.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-10-11  |  9.9 KB  |  371 lines

  1. unit UXlsViewer;
  2. interface
  3.  
  4. uses
  5.   SysUtils, Classes,
  6.   {$IFDEF WIN32}
  7.     Graphics, Controls, Forms, Dialogs, Menus, ActnList,
  8.     StdCtrls, ComCtrls, ImgList, ToolWin, ExtCtrls, Grids,
  9.   {$ENDIF}
  10.   {$IFDEF LINUX}
  11.     QGraphics, QControls, QForms, QDialogs, QMenus, QActnList,
  12.     QStdCtrls, QComCtrls, QImgList, QTypes, QExtCtrls, QGrids,
  13.   {$ENDIF}
  14.  
  15.   UExcelAdapter, XLSAdapter,
  16.   UFlexCelImport, UFlexCelGrid, UFormatDialog, UWaitCursor;
  17.  
  18. type
  19.   TMain = class(TForm)
  20.     ImageList1: TImageList;
  21.     ImageList2: TImageList;
  22.     ImageList3: TImageList;
  23.     FlexCelImport: TFlexCelImport;
  24.     XLSAdapter: TXLSAdapter;
  25.     MainMenu1: TMainMenu;
  26.     File2: TMenuItem;
  27.     ReadOnly1: TMenuItem;
  28.     ReadOnly2: TMenuItem;
  29.     N2: TMenuItem;
  30.     Close1: TMenuItem;
  31.     View1: TMenuItem;
  32.     Zoom1: TMenuItem;
  33.     N102: TMenuItem;
  34.     N252: TMenuItem;
  35.     N502: TMenuItem;
  36.     N1002: TMenuItem;
  37.     N2002: TMenuItem;
  38.     N4002: TMenuItem;
  39.     N3: TMenuItem;
  40.     FullWorksheet1: TMenuItem;
  41.     Format1: TMenuItem;
  42.     CopyFormat1: TMenuItem;
  43.     PasteFormat1: TMenuItem;
  44.     N1: TMenuItem;
  45.     CellFormat1: TMenuItem;
  46.     ColFormat1: TMenuItem;
  47.     ColFormat2: TMenuItem;
  48.     ActionList1: TActionList;
  49.     ActionZoom: TAction;
  50.     Action10: TAction;
  51.     Action25: TAction;
  52.     ActionCopyFormat: TAction;
  53.     ActionPasteFormat: TAction;
  54.     ActionCellFormat: TAction;
  55.     Action50: TAction;
  56.     ActionRowFormat: TAction;
  57.     ActionColFormat: TAction;
  58.     ActionReadOnly: TAction;
  59.     ActionSaveAs: TAction;
  60.     ActionClose: TAction;
  61.     Action100: TAction;
  62.     Action200: TAction;
  63.     Action400: TAction;
  64.     ActionFullWorksheet: TAction;
  65.     MenuZoom: TPopupMenu;
  66.     N101: TMenuItem;
  67.     N251: TMenuItem;
  68.     N501: TMenuItem;
  69.     N1001: TMenuItem;
  70.     N2001: TMenuItem;
  71.     N4001: TMenuItem;
  72.     TabControl: TTabControl;
  73.     Data: TFlexCelGrid;
  74.     XlsSaveDialog: TSaveDialog;
  75.     ActionOpen: TAction;
  76.     Open1: TMenuItem;
  77.     N4: TMenuItem;
  78.     OpenDialog: TOpenDialog;
  79.     ToolBar1: TToolBar;
  80.     ToolButton13: TToolButton;
  81.     ToolButton15: TToolButton;
  82.     ToolButton16: TToolButton;
  83.     ToolButton14: TToolButton;
  84.     ToolButton12: TToolButton;
  85.     ToolButton1: TToolButton;
  86.     ToolButton2: TToolButton;
  87.     ToolButton3: TToolButton;
  88.     ToolButton4: TToolButton;
  89.     ToolButton5: TToolButton;
  90.     ToolButton6: TToolButton;
  91.     ToolButton9: TToolButton;
  92.     ToolButton8: TToolButton;
  93.     TrackBarZoom: TTrackBar;
  94.     PanelZoom: TPanel;
  95.     ToolButton10: TToolButton;
  96.     Panel1: TPanel;
  97.     EdCell: TEdit;
  98.     PanelCellVal: TPanel;
  99.     procedure ActionReadOnlyExecute(Sender: TObject);
  100.     procedure ActionOpenExecute(Sender: TObject);
  101.     procedure ActionSaveAsExecute(Sender: TObject);
  102.     procedure ActionCloseExecute(Sender: TObject);
  103.     procedure ActionCopyFormatExecute(Sender: TObject);
  104.     procedure ActionPasteFormatExecute(Sender: TObject);
  105.     procedure ActionCellFormatExecute(Sender: TObject);
  106.     procedure ActionRowFormatExecute(Sender: TObject);
  107.     procedure ActionColFormatExecute(Sender: TObject);
  108.     procedure ActionZoomExecute(Sender: TObject);
  109.     procedure Action10Execute(Sender: TObject);
  110.     procedure Action25Execute(Sender: TObject);
  111.     procedure Action50Execute(Sender: TObject);
  112.     procedure Action100Execute(Sender: TObject);
  113.     procedure Action200Execute(Sender: TObject);
  114.     procedure Action400Execute(Sender: TObject);
  115.     procedure ActionFullWorksheetExecute(Sender: TObject);
  116.     procedure TabControlChange(Sender: TObject);
  117.     procedure TrackBarZoomChange(Sender: TObject);
  118.     procedure FormCreate(Sender: TObject);
  119.     procedure DataSelectCell(Sender: TObject; ACol, ARow: Integer;
  120.       var CanSelect: Boolean);
  121.     procedure EdCellChange(Sender: TObject);
  122.     procedure EdCellKeyPress(Sender: TObject; var Key: Char);
  123.     procedure DataSetEditText(Sender: TObject; ACol, ARow: Integer;
  124.       const Value: WideString);
  125.   private
  126.     ClipFormat: integer;
  127.     FormatDialog: TFormatDialog;
  128.     DisableTabs: boolean;
  129.     LoadingEdCell: boolean;
  130.     procedure LoadFile;
  131.    { Private declarations }
  132.   public
  133.     { Public declarations }
  134.   end;
  135.  
  136. var
  137.   Main: TMain;
  138.  
  139. implementation
  140.  
  141. {$IFDEF WIN32}
  142.   {$R *.dfm}
  143. {$ENDIF}
  144. {$IFDEF LINUX}
  145.   {$R *.xfm}
  146. {$ENDIF}
  147.  
  148. procedure TMain.ActionReadOnlyExecute(Sender: TObject);
  149. begin
  150.   ActionReadOnly.Checked:=not ActionReadOnly.Checked;
  151.   Data.ReadOnly:=ActionReadOnly.Checked;
  152. end;
  153.  
  154. procedure TMain.LoadFile;
  155. var
  156.   p: integer;
  157. begin
  158.   DisableTabs:=true;
  159.   try
  160.     Caption:='XlsViewer';
  161.     FlexCelImport.OpenFile(OpenDialog.FileName);
  162.     TabControl.Tabs.Clear;
  163.  
  164.     for p:=1 to FlexCelImport.SheetCount do
  165.     begin
  166.       FlexCelImport.ActiveSheet:=p;
  167.       TabControl.Tabs.Add(FlexCelImport.ActiveSheetName);
  168.     end;
  169.  
  170.     FlexCelImport.ActiveSheet:=1;
  171.     TabControl.TabIndex:=FlexCelImport.ActiveSheet-1;
  172.     Data.LoadSheet;
  173.     Caption:=Caption+': '+OpenDialog.FileName;
  174.   finally
  175.     DisableTabs:=false;
  176.   end;
  177. end;
  178.  
  179. procedure TMain.ActionOpenExecute(Sender: TObject);
  180. var
  181.   WaitCursor: IWaitCursor;
  182. begin
  183.   if not OpenDialog.Execute then exit;
  184.   WaitCursor:= TWaitCursor.Create;
  185.   LoadFile;
  186. end;
  187.  
  188. procedure TMain.ActionSaveAsExecute(Sender: TObject);
  189. var
  190.   WaitCursor: IWaitCursor;
  191. begin
  192.   if not XlsSaveDialog.Execute then exit;
  193.   WaitCursor:= TWaitCursor.Create;
  194.   if FileExists(XlsSaveDialog.FileName) then DeleteFile(XlsSaveDialog.FileName);
  195.  
  196.   Data.ApplySheet;
  197.   FlexCelImport.Save(XlsSaveDialog.FileName);
  198. end;
  199.  
  200. procedure TMain.ActionCloseExecute(Sender: TObject);
  201. begin
  202.   Close;
  203. end;
  204.  
  205. procedure TMain.ActionCopyFormatExecute(Sender: TObject);
  206. begin
  207.   ClipFormat:=FlexCelImport.CellFormat[Data.Row, Data.Col];
  208. end;
  209.  
  210. procedure TMain.ActionPasteFormatExecute(Sender: TObject);
  211. begin
  212.   FlexCelImport.CellFormat[Data.Row, Data.Col]:=ClipFormat;
  213.   Invalidate;
  214. end;
  215.  
  216. procedure TMain.ActionCellFormatExecute(Sender: TObject);
  217. begin
  218.   if FormatDialog=nil then
  219.   begin
  220.     FormatDialog:= TFormatDialog.Create(Self);
  221.     FormatDialog.SetData(FlexCelImport);
  222.   end;
  223.   FormatDialog.Caption:='Choose CELL Format:';
  224.   FormatDialog.Load;
  225.   FormatDialog.SelectedFormat:=FlexCelImport.CellFormat[Data.Row, Data.Col];
  226.   if FormatDialog.ShowModal<>mrOk then exit;
  227.   FlexCelImport.CellFormat[Data.Row, Data.Col]:=FormatDialog.SelectedFormat;
  228. end;
  229.  
  230. procedure TMain.ActionRowFormatExecute(Sender: TObject);
  231. begin
  232.   if FormatDialog=nil then
  233.   begin
  234.     FormatDialog:= TFormatDialog.Create(Self);
  235.     FormatDialog.SetData(FlexCelImport);
  236.   end;
  237.   FormatDialog.Caption:='Choose ROW Format:';
  238.   FormatDialog.Load;
  239.   FormatDialog.SelectedFormat:=FlexCelImport.RowFormat[Data.Row];
  240.   if FormatDialog.ShowModal<>mrOk then exit;
  241.   FlexCelImport.RowFormat[Data.Row]:=FormatDialog.SelectedFormat;
  242.   Data.Invalidate;
  243. end;
  244.  
  245. procedure TMain.ActionColFormatExecute(Sender: TObject);
  246. begin
  247.   if FormatDialog=nil then
  248.   begin
  249.     FormatDialog:= TFormatDialog.Create(Self);
  250.     FormatDialog.SetData(FlexCelImport);
  251.   end;
  252.   FormatDialog.Caption:='Choose COLUMN Format:';
  253.   FormatDialog.Load;
  254.   FormatDialog.SelectedFormat:=FlexCelImport.ColumnFormat[Data.Col];
  255.   if FormatDialog.ShowModal<>mrOk then exit;
  256.   FlexCelImport.ColumnFormat[Data.Col]:=FormatDialog.SelectedFormat;
  257.   Data.Invalidate;
  258. end;
  259.  
  260. procedure TMain.ActionZoomExecute(Sender: TObject);
  261. begin
  262.   if TrackBarZoom.Position<25 then TrackBarZoom.Position:=25 else
  263.   if TrackBarZoom.Position<50 then TrackBarZoom.Position:=50 else
  264.   if TrackBarZoom.Position<100 then TrackBarZoom.Position:=100 else
  265.   if TrackBarZoom.Position<200 then TrackBarZoom.Position:=200 else
  266.   if TrackBarZoom.Position<400 then TrackBarZoom.Position:=400 else
  267.   TrackBarZoom.Position:=10;
  268. end;
  269.  
  270. procedure TMain.Action10Execute(Sender: TObject);
  271. begin
  272.   TrackBarZoom.Position:=10;
  273. end;
  274.  
  275. procedure TMain.Action25Execute(Sender: TObject);
  276. begin
  277.   TrackBarZoom.Position:=25;
  278. end;
  279.  
  280. procedure TMain.Action50Execute(Sender: TObject);
  281. begin
  282.   TrackBarZoom.Position:=50;
  283. end;
  284.  
  285. procedure TMain.Action100Execute(Sender: TObject);
  286. begin
  287.   TrackBarZoom.Position:=100;
  288. end;
  289.  
  290. procedure TMain.Action200Execute(Sender: TObject);
  291. begin
  292.   TrackBarZoom.Position:=200;
  293. end;
  294.  
  295. procedure TMain.Action400Execute(Sender: TObject);
  296. begin
  297.   TrackBarZoom.Position:=400;
  298. end;
  299.  
  300. procedure TMain.ActionFullWorksheetExecute(Sender: TObject);
  301. begin
  302.   ActionFullWorksheet.Checked:=not ActionFullWorksheet.Checked;
  303.   Data.FullWorksheet:= ActionFullWorksheet.Checked;
  304.   Data.LoadSheet;
  305. end;
  306.  
  307.  
  308. procedure TMain.TabControlChange(Sender: TObject);
  309. begin
  310.   if DisableTabs then exit; 
  311.   Data.ApplySheet;
  312.   FlexCelImport.ActiveSheet:= TabControl.TabIndex+1;
  313.   Data.LoadSheet;
  314. end;
  315.  
  316. procedure TMain.TrackBarZoomChange(Sender: TObject);
  317. begin
  318.   if FlexCelImport.IsLoaded then
  319.     Data.Zoom:=(Sender as TTrackBar).Position;
  320.   PanelZoom.Caption:=Format('%d%%',[ (Sender as TTrackBar).Position]);
  321. end;
  322.  
  323. procedure TMain.FormCreate(Sender: TObject);
  324. begin
  325.   TrackBarZoom.Position:=100;
  326.   if ParamCount>0 then
  327.   begin
  328.     OpenDialog.FileName:=ParamStr(1);
  329.     LoadFile;
  330.   end;
  331. end;
  332.  
  333. procedure TMain.DataSelectCell(Sender: TObject; ACol, ARow: Integer;
  334.   var CanSelect: Boolean);
  335. begin
  336.   LoadingEdCell:=true; //So EdCellChange doesn't fire...
  337.   try
  338.     EdCell.Text:=FlexCelImport.CellValue[ARow, ACol];
  339.   finally
  340.     LoadingEdCell:=false;
  341.   end;
  342. end;
  343.  
  344. procedure TMain.EdCellChange(Sender: TObject);
  345. begin
  346.   if not LoadingEdCell and (Data.CanEdit) then
  347.     Data.SetCell(Data.Row, Data.Col, EdCell.Text);
  348. end;
  349.  
  350. procedure TMain.EdCellKeyPress(Sender: TObject; var Key: Char);
  351. begin
  352.   if Key=#13 then
  353.   begin
  354.     Data.SetFocus;
  355.     Key:=#0;
  356.   end;
  357. end;
  358.  
  359. procedure TMain.DataSetEditText(Sender: TObject; ACol, ARow: Integer;
  360.   const Value: WideString);
  361. begin
  362.   LoadingEdCell:=true; //So EdCellChange doesn't fire...
  363.   try
  364.     EdCell.Text:=Value;
  365.   finally
  366.     LoadingEdCell:=false;
  367.   end;
  368. end;
  369.  
  370. end.
  371.