diff --git a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi index fb3d43d42..ac816a44d 100644 --- a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi +++ b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi @@ -108,7 +108,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -129,31 +129,33 @@ - - - + + + + + + - + - - - + + + - - + - - - + + + @@ -162,7 +164,7 @@ - + @@ -170,7 +172,7 @@ - + @@ -178,7 +180,7 @@ - + @@ -186,14 +188,14 @@ - + - + @@ -201,7 +203,7 @@ - + @@ -209,7 +211,7 @@ - + @@ -217,27 +219,26 @@ - + + - - - - - - + + + + - + - + @@ -245,7 +246,7 @@ - + @@ -253,68 +254,71 @@ - + - + - + + - - - + + + + - - - + + + + - + - + - + - + - + - + - + @@ -323,7 +327,7 @@ - + @@ -331,7 +335,7 @@ - + @@ -339,14 +343,14 @@ - + - + @@ -354,136 +358,203 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/components/fpspreadsheet/examples/fpsgrid/mainform.lfm b/components/fpspreadsheet/examples/fpsgrid/mainform.lfm index ec5f4582e..ff4b27296 100644 --- a/components/fpspreadsheet/examples/fpsgrid/mainform.lfm +++ b/components/fpspreadsheet/examples/fpsgrid/mainform.lfm @@ -4,84 +4,75 @@ object Form1: TForm1 Top = 258 Width = 518 Caption = 'fpsGrid' - ClientHeight = 361 + ClientHeight = 366 ClientWidth = 518 Menu = MainMenu1 OnActivate = FormActivate + OnCreate = FormCreate ShowHint = True LCLVersion = '1.3' object Panel1: TPanel Left = 0 Height = 73 - Top = 288 + Top = 293 Width = 518 Align = alBottom BevelOuter = bvNone ClientHeight = 73 ClientWidth = 518 TabOrder = 0 - object btnPopulateGrid: TButton - Left = 392 - Height = 31 - Top = 24 - Width = 120 - Caption = 'Populate Grid' - OnClick = btnPopulateGridClick - TabOrder = 0 - Visible = False - end object CbShowHeaders: TCheckBox Left = 8 - Height = 24 + Height = 19 Top = 11 - Width = 116 + Width = 93 Caption = 'Show headers' Checked = True OnClick = CbShowHeadersClick State = cbChecked - TabOrder = 1 + TabOrder = 0 end object CbShowGridLines: TCheckBox Left = 8 - Height = 24 + Height = 19 Top = 36 - Width = 125 + Width = 100 Caption = 'Show grid lines' Checked = True OnClick = CbShowGridLinesClick State = cbChecked - TabOrder = 2 + TabOrder = 1 end object EdFrozenCols: TSpinEdit Left = 238 - Height = 28 + Height = 23 Top = 8 Width = 52 OnChange = EdFrozenColsChange - TabOrder = 3 + TabOrder = 2 end object EdFrozenRows: TSpinEdit Left = 238 - Height = 28 + Height = 23 Top = 39 Width = 52 OnChange = EdFrozenRowsChange - TabOrder = 4 + TabOrder = 3 end object Label1: TLabel Left = 152 - Height = 20 + Height = 15 Top = 13 - Width = 77 + Width = 62 Caption = 'Frozen cols:' FocusControl = EdFrozenCols ParentColor = False end object Label2: TLabel Left = 153 - Height = 20 + Height = 15 Top = 40 - Width = 82 + Width = 66 Caption = 'Frozen rows:' FocusControl = EdFrozenRows ParentColor = False @@ -89,8 +80,8 @@ object Form1: TForm1 end object PageControl1: TPageControl Left = 0 - Height = 262 - Top = 26 + Height = 241 + Top = 52 Width = 518 ActivePage = TabSheet1 Align = alClient @@ -99,13 +90,15 @@ object Form1: TForm1 OnChange = PageControl1Change object TabSheet1: TTabSheet Caption = 'Sheet1' - ClientHeight = 229 + ClientHeight = 213 ClientWidth = 510 object sWorksheetGrid1: TsWorksheetGrid Left = 0 - Height = 229 + Height = 213 Top = 0 Width = 510 + FrozenCols = 0 + FrozenRows = 0 Align = alClient ColCount = 2 ExtendedSelect = False @@ -113,8 +106,9 @@ object Form1: TForm1 RowCount = 2 TabOrder = 0 TitleStyle = tsNative + OnSelectCell = sWorksheetGrid1SelectCell ColWidths = ( - 56 + 42 64 ) end @@ -141,7 +135,7 @@ object Form1: TForm1 Action = AcSaveAs end object ToolButton3: TToolButton - Left = 52 + Left = 80 Top = 0 Action = AcQuit end @@ -152,6 +146,72 @@ object Form1: TForm1 Caption = 'ToolButton5' Style = tbsDivider end + object ToolButton4: TToolButton + Left = 52 + Top = 0 + Action = AcEdit + end + object ToolButton6: TToolButton + Left = 75 + Top = 0 + Width = 5 + Caption = 'ToolButton6' + Style = tbsDivider + end + end + object FormatToolBar: TToolBar + Left = 0 + Height = 26 + Top = 26 + Width = 518 + Caption = 'FormatToolBar' + Images = ImageList1 + TabOrder = 3 + object ToolButton10: TToolButton + Left = 168 + Top = 2 + Action = AcLeftAlign + end + object ToolButton12: TToolButton + Left = 191 + Top = 2 + Action = AcHorCenterAlign + end + object ToolButton13: TToolButton + Left = 214 + Top = 2 + Action = AcRightAlign + end + object FontComboBox: TComboBox + Left = 1 + Height = 23 + Top = 2 + Width = 127 + ItemHeight = 15 + OnSelect = FontComboBoxSelect + TabOrder = 0 + end + object FontSizeComboBox: TComboBox + Left = 128 + Height = 23 + Top = 2 + Width = 40 + ItemHeight = 15 + Items.Strings = ( + '8' + '9' + '10' + '11' + '12' + '14' + '16' + '18' + '20' + '24' + ) + OnSelect = FontComboBoxSelect + TabOrder = 1 + end end object OpenDialog1: TOpenDialog DefaultExt = '.xls' @@ -163,14 +223,14 @@ object Form1: TForm1 object SaveDialog1: TSaveDialog DefaultExt = '.xls' Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_wikimedia' - Options = [ofExtensionDifferent, ofEnableSizing, ofViewDetail] + Options = [ofOverwritePrompt, ofExtensionDifferent, ofEnableSizing, ofViewDetail] left = 176 top = 176 end object MainMenu1: TMainMenu Images = ImageList1 left = 288 - top = 176 + top = 64 object mnuFile: TMenuItem Caption = '&File' object mnuOpen: TMenuItem @@ -297,12 +357,37 @@ object Form1: TForm1 OnClick = acQuitExecute end end + object mnuEdit: TMenuItem + Caption = 'Edit' + object MenuItem2: TMenuItem + Action = AcEdit + AutoCheck = True + end + end + object mnuFormat: TMenuItem + Caption = 'Format' + object MnuHorAlignment: TMenuItem + Caption = 'Horizontal alignment' + object MnuHorDefault: TMenuItem + Action = AcHorDefaultAlign + end + object MenuItem3: TMenuItem + Action = AcLeftAlign + end + object MenuItem4: TMenuItem + Action = AcHorCenterAlign + end + object MenuItem5: TMenuItem + Action = AcRightAlign + end + end + end end object ImageList1: TImageList left = 176 top = 120 Bitmap = { - 4C69030000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + 4C69070000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 @@ -398,10 +483,139 @@ object Form1: TForm1 4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7CAFFF4784 B5FF4E8ABAFF3E7EADFF0C578FEAFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D639B1619609839145D9562105A - 92880D5890A4135C92FC0C578FED + 92880D5890A4135C92FC0C578FEDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4094FAADBEA5093 + CAFD4E90C8FF2F9DD2DF35A4DE19FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A8D9FF6AA5D8FFC9E1 + F7FFCBE3F8FF4295CAFF3182C2AEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFA7D4F4FFC5E1F8FFCCE3 + F9FFCCE3F9FFBDDBF7FF4F90C9FDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFA8E2F8FF6CAEDDFFA5CF + F4FFA5CFF4FFBDDBF7FF5393CBF7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF68D9F5FF6FCFF3FF599D + D0FF73ABDDFF4F91C9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4 + E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8F + D9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002790 + BFFFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002689B9FFBEE6 + F2FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00206398202689B9FFB0CBE1FF67A9 + C8FF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001E6D93FFC8E1F2FFD1E7FAFF347D + B5FF3199C3FF6DC4DCFF4A9CCFFF3483C7FFFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001E6D93FFCBE3F9FF61AAECFF4098 + E8FF1567C2FF1660AAFF2C76B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00124259FF5D9CD4FFA6CFF5FFA9CF + ECFF488BC1FF2C76B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00134058FF15425EFF25699CFF2C76 + B4FF3B8BBAADFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070 + 70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848 + 48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006F6F6FFF6B6B6BFF6666 + 66FF616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A + 5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B + 2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00585858FF525252FF4C4C + 4CFF464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E + 3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111 + 11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C3C3CFF353535FF2F2F + 2FFF292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070 + 70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848 + 48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B6B6B6B6666 + 66FF616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FF3F3F3FFF3939 + 396BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A + 5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B + 2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005252526B4C4C + 4CFF464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FF232323FF1D1D + 1D6BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E + 3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111 + 11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003535356B2F2F + 2FFF292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFF0B0B0BFF0707 + 076BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070 + 70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848 + 48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FF3F3F3FFF3939 + 39FF333333FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A + 5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B + 2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FF232323FF1D1D + 1DFF181818FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E + 3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111 + 11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFF0B0B0BFF0707 + 07FF030303FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00 } end object ActionList1: TActionList + Images = ImageList1 left = 176 top = 64 object AcOpen: TAction @@ -419,5 +633,40 @@ object Form1: TForm1 ImageIndex = 2 OnExecute = acQuitExecute end + object AcEdit: TAction + AutoCheck = True + Caption = 'Edit mode' + Hint = 'Enable/disable editing' + ImageIndex = 3 + OnExecute = AcEditExecute + end + object AcHorDefaultAlign: TAction + Tag = 100 + Category = 'Format' + Caption = 'Default' + Checked = True + OnExecute = AcHorAlignmentExecute + end + object AcLeftAlign: TAction + Tag = 101 + Category = 'Format' + Caption = 'Left' + ImageIndex = 4 + OnExecute = AcHorAlignmentExecute + end + object AcHorCenterAlign: TAction + Tag = 102 + Category = 'Format' + Caption = 'Centered' + ImageIndex = 5 + OnExecute = AcHorAlignmentExecute + end + object AcRightAlign: TAction + Tag = 103 + Category = 'Format' + Caption = 'Right' + ImageIndex = 6 + OnExecute = AcHorAlignmentExecute + end end end diff --git a/components/fpspreadsheet/examples/fpsgrid/mainform.lrs b/components/fpspreadsheet/examples/fpsgrid/mainform.lrs index c59c1159a..61fbb86c1 100644 --- a/components/fpspreadsheet/examples/fpsgrid/mainform.lrs +++ b/components/fpspreadsheet/examples/fpsgrid/mainform.lrs @@ -2,370 +2,582 @@ LazarusResources.Add('TForm1','FORMDATA',[ 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'r'#1#6'Height'#3#130#1#3'Top'#3#2#1#5'Wid' - +'th'#3#6#2#7'Caption'#6#7'fpsGrid'#12'ClientHeight'#3'i'#1#11'ClientWidth'#3 - +#6#2#4'Menu'#7#9'MainMenu1'#10'OnActivate'#7#12'FormActivate'#8'ShowHint'#9 - +#10'LCLVersion'#6#3'1.3'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'I'#3 - +'Top'#3' '#1#5'Width'#3#6#2#5'Align'#7#8'alBottom'#10'BevelOuter'#7#6'bvNone' - +#12'ClientHeight'#2'I'#11'ClientWidth'#3#6#2#8'TabOrder'#2#0#0#7'TButton'#15 - +'btnPopulateGrid'#4'Left'#3#136#1#6'Height'#2#31#3'Top'#2#24#5'Width'#2'x'#7 - +'Caption'#6#13'Populate Grid'#7'OnClick'#7#20'btnPopulateGridClick'#8'TabOrd' - +'er'#2#0#7'Visible'#8#0#0#9'TCheckBox'#13'CbShowHeaders'#4'Left'#2#8#6'Heigh' - +'t'#2#24#3'Top'#2#11#5'Width'#2't'#7'Caption'#6#12'Show headers'#7'Checked'#9 - +#7'OnClick'#7#18'CbShowHeadersClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#1 - +#0#0#9'TCheckBox'#15'CbShowGridLines'#4'Left'#2#8#6'Height'#2#24#3'Top'#2'$' - +#5'Width'#2'}'#7'Caption'#6#15'Show grid lines'#7'Checked'#9#7'OnClick'#7#20 - +'CbShowGridLinesClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#2#0#0#9'TSpinEd' - +'it'#12'EdFrozenCols'#4'Left'#3#238#0#6'Height'#2#28#3'Top'#2#8#5'Width'#2'4' - +#8'OnChange'#7#18'EdFrozenColsChange'#8'TabOrder'#2#3#0#0#9'TSpinEdit'#12'Ed' - +'FrozenRows'#4'Left'#3#238#0#6'Height'#2#28#3'Top'#2''''#5'Width'#2'4'#8'OnC' - +'hange'#7#18'EdFrozenRowsChange'#8'TabOrder'#2#4#0#0#6'TLabel'#6'Label1'#4'L' - +'eft'#3#152#0#6'Height'#2#20#3'Top'#2#13#5'Width'#2'M'#7'Caption'#6#12'Froze' - +'n cols:'#12'FocusControl'#7#12'EdFrozenCols'#11'ParentColor'#8#0#0#6'TLabel' - +#6'Label2'#4'Left'#3#153#0#6'Height'#2#20#3'Top'#2'('#5'Width'#2'R'#7'Captio' - +'n'#6#12'Frozen rows:'#12'FocusControl'#7#12'EdFrozenRows'#11'ParentColor'#8 - +#0#0#0#12'TPageControl'#12'PageControl1'#4'Left'#2#0#6'Height'#3#6#1#3'Top'#2 - +#26#5'Width'#3#6#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'Ta' - +'bIndex'#2#0#8'TabOrder'#2#1#8'OnChange'#7#18'PageControl1Change'#0#9'TTabSh' - +'eet'#9'TabSheet1'#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#229#0#11'Client' - +'Width'#3#254#1#0#15'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Heig' - +'ht'#3#229#0#3'Top'#2#0#5'Width'#3#254#1#5'Align'#7#8'alClient'#8'ColCount'#2 - +#2#14'ExtendedSelect'#8#7'Options'#11#15'goFixedVertLine'#15'goFixedHorzLine' - +#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goRowSizing'#11'goColSiz' - +'ing'#15'goThumbTracking'#14'goSmoothScroll'#16'goFixedColSizing'#0#8'RowCou' - +'nt'#2#2#8'TabOrder'#2#0#10'TitleStyle'#7#8'tsNative'#9'ColWidths'#1#2'8'#2 + +'th'#3#6#2#7'Caption'#6#7'fpsGrid'#12'ClientHeight'#3'n'#1#11'ClientWidth'#3 + +#6#2#4'Menu'#7#9'MainMenu1'#10'OnActivate'#7#12'FormActivate'#8'OnCreate'#7 + +#10'FormCreate'#8'ShowHint'#9#10'LCLVersion'#6#3'1.3'#0#6'TPanel'#6'Panel1'#4 + +'Left'#2#0#6'Height'#2'I'#3'Top'#3'%'#1#5'Width'#3#6#2#5'Align'#7#8'alBottom' + +#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'I'#11'ClientWidth'#3#6#2#8'Ta' + +'bOrder'#2#0#0#9'TCheckBox'#13'CbShowHeaders'#4'Left'#2#8#6'Height'#2#19#3'T' + +'op'#2#11#5'Width'#2']'#7'Caption'#6#12'Show headers'#7'Checked'#9#7'OnClick' + +#7#18'CbShowHeadersClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#0#0#0#9'TChe' + +'ckBox'#15'CbShowGridLines'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'$'#5'Width'#2 + +'d'#7'Caption'#6#15'Show grid lines'#7'Checked'#9#7'OnClick'#7#20'CbShowGrid' + +'LinesClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#1#0#0#9'TSpinEdit'#12'EdF' + +'rozenCols'#4'Left'#3#238#0#6'Height'#2#23#3'Top'#2#8#5'Width'#2'4'#8'OnChan' + +'ge'#7#18'EdFrozenColsChange'#8'TabOrder'#2#2#0#0#9'TSpinEdit'#12'EdFrozenRo' + +'ws'#4'Left'#3#238#0#6'Height'#2#23#3'Top'#2''''#5'Width'#2'4'#8'OnChange'#7 + +#18'EdFrozenRowsChange'#8'TabOrder'#2#3#0#0#6'TLabel'#6'Label1'#4'Left'#3#152 + +#0#6'Height'#2#15#3'Top'#2#13#5'Width'#2'>'#7'Caption'#6#12'Frozen cols:'#12 + +'FocusControl'#7#12'EdFrozenCols'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4 + +'Left'#3#153#0#6'Height'#2#15#3'Top'#2'('#5'Width'#2'B'#7'Caption'#6#12'Froz' + +'en rows:'#12'FocusControl'#7#12'EdFrozenRows'#11'ParentColor'#8#0#0#0#12'TP' + +'ageControl'#12'PageControl1'#4'Left'#2#0#6'Height'#3#241#0#3'Top'#2'4'#5'Wi' + +'dth'#3#6#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex' + +#2#0#8'TabOrder'#2#1#8'OnChange'#7#18'PageControl1Change'#0#9'TTabSheet'#9'T' + +'abSheet1'#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#213#0#11'ClientWidth'#3 + +#254#1#0#15'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Height'#3#213 + +#0#3'Top'#2#0#5'Width'#3#254#1#10'FrozenCols'#2#0#10'FrozenRows'#2#0#5'Align' + +#7#8'alClient'#8'ColCount'#2#2#14'ExtendedSelect'#8#7'Options'#11#15'goFixed' + +'VertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelec' + +'t'#11'goRowSizing'#11'goColSizing'#15'goThumbTracking'#14'goSmoothScroll'#16 + +'goFixedColSizing'#0#8'RowCount'#2#2#8'TabOrder'#2#0#10'TitleStyle'#7#8'tsNa' + +'tive'#12'OnSelectCell'#7#25'sWorksheetGrid1SelectCell'#9'ColWidths'#1#2'*'#2 +'@'#0#0#0#0#0#8'TToolBar'#8'ToolBar1'#4'Left'#2#0#6'Height'#2#26#3'Top'#2#0#5 +'Width'#3#6#2#12'ButtonHeight'#2#24#7'Caption'#6#8'ToolBar1'#11'EdgeBorders' +#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2#2#0#11'TToolButton'#11'ToolBu' +'tton1'#4'Left'#2#1#3'Top'#2#0#6'Action'#7#6'AcOpen'#0#0#11'TToolButton'#11 +'ToolButton2'#4'Left'#2#24#3'Top'#2#0#6'Action'#7#8'AcSaveAs'#0#0#11'TToolBu' - +'tton'#11'ToolButton3'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'AcQuit'#0#0#11 + +'tton'#11'ToolButton3'#4'Left'#2'P'#3'Top'#2#0#6'Action'#7#6'AcQuit'#0#0#11 +'TToolButton'#11'ToolButton5'#4'Left'#2'/'#3'Top'#2#0#5'Width'#2#5#7'Caption' - +#6#11'ToolButton5'#5'Style'#7#10'tbsDivider'#0#0#0#11'TOpenDialog'#11'OpenDi' - +'alog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel spreadsheet (*.xls)|*' - +'.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenOffice spreadshe' - +'et (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_pipes|All ' - +'files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnableSizing' - +#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11'TSaveDialog'#11'SaveD' - +'ialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel spreadsheet (*.xls)|' - +'*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsh' - +'eet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_' - +'wikimedia'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnableSizing'#12'ofV' - +'iewDetail'#0#4'left'#3#176#0#3'top'#3#176#0#0#0#9'TMainMenu'#9'MainMenu1'#6 - +'Images'#7#10'ImageList1'#4'left'#3' '#1#3'top'#3#176#0#0#9'TMenuItem'#7'mnu' - +'File'#7'Caption'#6#5'&File'#0#9'TMenuItem'#7'mnuOpen'#6'Action'#7#6'AcOpen' - +#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 - +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0',' - +#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216#247'-'#136#216#247'-'#136 - +#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136 - +#216#247'-'#135#216#247'-'#136#216#247','#134#216#0#255#255#255#0#255#255#255 - +#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246 - +#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215 - +#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255 - +#255#0#255#255#255#0'5'#148#218#247#239#250#254#255#147#229#248#255#143#228 - +#248#255#137#227#248#255#130#225#247#255'z'#223#247#255'q'#222#246#255'g'#219 - +#245#255'['#216#244#255'M'#212#243#255'@'#209#242#255#202#242#251#255'5'#148 - +#218#255#255#255#255#0#255#255#255#0'6'#154#218#248#242#250#253#255#148#230 - ,#248#255#146#229#248#255#144#229#248#255#139#227#248#255#134#226#247#255#127 - +#225#247#255'w'#222#246#255'l'#220#246#255'^'#217#244#255'O'#213#243#255#204 - +#242#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'6'#161#218#249#246 - +#252#254#255#148#229#248#255#147#229#248#255#147#229#248#255#145#229#248#255 - +#147#219#233#255#147#215#227#255#147#210#220#255#144#206#215#255#140#200#207 - +#255#134#193#198#255#201#216#214#255'5'#148#218#255#197'tD'#232#202#127'S' - +#241'7'#166#218#250#254#255#255#255#248#253#255#255#246#253#255#255#245#252 - +#255#255#243#252#254#255#154#228#244#255#154#230#247#255#155#230#246#255#157 - +#229#245#255#158#229#245#255#159#229#244#255#218#243#248#255'5'#148#218#255 - +#253#244#238#255#202#128'T'#249'5'#171#218#250#232#246#251#255'p'#188#231#255 - +'U'#170#226#255'M'#165#224#255#145#201#235#255#250#243#239#255#253#254#253 - +#255#255#253#252#255#255#253#252#255#254#253#252#255#254#252#251#255#254#254 - +#253#255'5'#148#218#255#239#242#232#255#206#129'V'#255'6'#170#218#242#241#250 - +#253#255#148#222#245#255#147#220#244#255'd'#188#233#255'5'#148#218#255'5'#148 - +#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148 - +#218#255'5'#148#218#255'5'#148#218#255#251#246#239#255#204#131'U'#254'5'#175 - +#218#240#247#252#254#255#142#228#248#255#145#222#245#255#159#224#245#255#172 - +#225#246#255#202#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255 - +#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241 - +#255#203#133'U'#254'6'#179#218#248#253#254#254#255#254#255#255#255#254#254 - +#255#255#253#254#255#255#254#255#255#255#228#186#145#255#255#247#240#255#255 - +#231#213#255#253#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255 - +#250#220#194#255#254#243#232#255#204#134'V'#254'4'#180#217#208'^'#194#225#250 - +'`'#195#226#250'`'#195#226#250'`'#195#226#250'_'#195#226#250#228#187#145#255 - +#255#247#242#255#254#231#213#255#254#231#213#255#253#229#209#255#250#224#202 - +#255#249#222#196#255#247#217#188#255#253#242#231#255#204#135'W'#254#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#228#187#146#255#254#247#241#255#252#229#210#255#252#228#209#255#251#226#204 - +#255#249#221#196#255#246#215#187#255#243#209#175#255#250#239#228#255#204#135 - +'X'#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#228#187#146#255#254#246#240#255#252#226#205#255#252#227#205 - +#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243#235#255#251#248 - +#243#255#202#131'S'#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245#237#255#252#222#197 - +#255#251#224#199#255#249#220#194#255#245#211#180#255#254#249#243#255#250#226 - +#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#229#190#150#255#255#255#254#255 - +#253#243#233#255#253#243#234#255#252#242#232#255#250#239#227#255#250#242#231 - +#255#234#187#136#255#207#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#234#195#157#255#230 - +#191#150#255#228#187#146#255#228#187#146#255#209#160'l'#245#208#158'm'#246 - +#204#150'_'#218#196'yB~'#178'g<'#9#255#255#255#0#7'OnClick'#7#13'acOpenExecu' - +'te'#0#0#9'TMenuItem'#9'mnuSaveAs'#6'Action'#7#8'AcSaveAs'#11'Bitmap.Data'#10 - +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 - +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#186'j6'#0#185'i5'#181 - +#184'i5'#238#183'h5'#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255#174 - +'d3'#255#172'c2'#255#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166'`1' - +#241#168'a1'#196#186'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255 - +#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 - +#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#200#154 - +'|'#255#199#152'y'#255#167'`1'#237#186'k7'#254#237#202#179#255#224#162'z'#255 - +#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255 - +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255 - +#202#141'e'#255#201#155'|'#255#167'`1'#254#187'l8'#255#238#204#182#255#225 - +#162'z'#255#254#250#247#255#191#220#194#255#191#220#194#255#191#220#194#255 - +#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194 - +#255#253#249#246#255#205#144'h'#255#204#158#129#255#168'a2'#255#187'k8'#255 - +#239#206#184#255#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192#136#255 - +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255 - +'b'#192#136#255#253#249#246#255#207#147'j'#255#206#163#132#255#170'a2'#255 - +#186'j6'#255#239#208#187#255#226#162'z'#255#254#251#248#255#254#251#248#255 - +#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 - +#255#254#251#248#255#254#251#248#255#254#251#248#255#211#150'm'#255#210#167 - +#138#255#171'b2'#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z' - ,#255#225#163'z'#255#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w' - +#255#221#159'v'#255#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p' - +#255#213#171#142#255#173'c3'#255#187'j6'#255#242#213#194#255#227#163'z'#255 - +#227#163'z'#255#226#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255 - +#224#161'x'#255#222#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255 - +#217#155's'#255#218#176#149#255#175'd3'#255#187'j6'#255#242#216#197#255#227 - +#164'{'#255#227#163'z'#255#227#164'z'#255#226#164'{'#255#226#163'{'#255#225 - +#163'{'#255#225#162'y'#255#223#160'w'#255#222#159'v'#255#221#158't'#255#219 - +#156'r'#255#220#157't'#255#221#181#154#255#177'e4'#255#187'k6'#255#244#217 - +#199#255#230#166'}'#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203#146 - +'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200#140 - +'d'#255#200#140'd'#255#218#156't'#255#225#186#159#255#179'f4'#255#187'k6'#254 - +#244#220#201#255#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227 - +#255#252#244#238#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231 - +#219#255#247#229#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180 - +'g4'#255#188'k6'#250#245#221#204#255#231#168'~'#255#250#240#232#255#250#240 - +#232#255#201#141'f'#255#250#240#233#255#253#248#243#255#254#250#248#255#252 - +#244#239#255#249#233#223#255#247#231#219#255#247#229#217#255#224#162'x'#255 - +#231#194#169#255#182'h5'#255#188'k6'#240#246#223#208#255#232#168'~'#255#252 - +#246#241#255#252#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255 - +#253#250#247#255#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219 - +#255#225#163'z'#255#239#213#195#255#183'i5'#254#188'k6'#216#246#223#209#255 - +#233#170#128#255#254#250#246#255#253#250#246#255#200#140'd'#255#251#243#238 - +#255#251#241#234#255#252#246#242#255#254#251#248#255#252#246#241#255#249#236 - +#226#255#248#231#219#255#238#208#186#255#236#208#189#255#187'p>'#248#188'k6' - +#155#246#224#209#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249 - +#246#255#252#245#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253 - +#250#247#255#251#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236 - +#181'i5c'#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6' - +#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255 - +#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#7'OnClick'#7#15'acSaveAsExec' - +'ute'#0#0#9'TMenuItem'#9'MenuItem1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7'mnu' - +'Quit'#6'Action'#7#6'AcQuit'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0 - +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0 - +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146 - +#252#12'W'#143#237#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL' - +#255'JJJ'#255'GGG'#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132 - +#181#255'N'#138#186#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0 - +'XXX'#255#162#162#162#255#162#162#162#255#163#163#163#255#164#164#164#255#164 - +#164#164#255#165#165#165#255'/o'#165#255'x'#171#210#255'x'#171#211#255's'#167 - +#209#255'i'#160#205#255'@'#127#174#255#15'Y'#145#234#255#255#255#0#255#255 - +#255#0'\\\'#255#161#161#161#255''#255'4~;'#255'1y7' - +#255'.u4'#255'I'#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162 - +#162#255'E~'#180#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204 - +#255'E'#131#177#255#31'd'#156#234';'#135'B'#255#137#203#146#255#132#200#141 - +#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161 - +#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_' - +#180#223#255'G'#133#177#255'%i'#161#234'>'#139'F'#255#143#206#153#255'}'#198 - +#135#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O' - +#255'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225 - +#255'K'#212#255#255'B'#139#184#255',n'#166#234'A'#144'J'#255#148#210#159#255 - +#145#208#154#255#141#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X' - +#255'A|F'#255#159#159#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255 - +'t'#175#214#255'^'#196#237#255'K'#136#179#255'4s'#171#234'D'#148'M'#255'B' - +#145'K'#255'?'#141'H'#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K' - +#255#158#158#158#255#158#158#158#255'`'#146#201#255#158#199#226#255#131#184 - +#218#255'}'#180#215#255'~'#179#215#255'O'#137#180#255';y'#177#234#255#255#255 - ,#0#255#255#255#0'www'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255#156#156 - +#156#255#157#157#157#255#157#157#157#255'f'#150#204#255#162#203#227#255#137 - +#189#220#255#131#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182#234#255 - +#255#255#0#255#255#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153 - +#255#155#155#155#255#156#156#156#255#156#156#156#255'l'#154#208#255#167#206 - +#229#255#143#193#223#255#137#189#220#255#139#189#220#255'S'#141#182#255'K' - +#132#188#234#255#255#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153 - +#255#154#154#154#255#154#154#154#255#155#155#155#255#155#155#155#255'o'#157 - +#211#255#170#209#231#255#171#209#231#255#152#199#225#255#145#194#222#255'V' - +#143#183#255'R'#137#193#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~' - +#255'|||'#255'zzz'#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214 - +#255#135#178#220#255#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142 - +#198#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0'p'#158#214#219'm'#156#212#255#133#177#218#255'Z'#145#185#255'`' - +#147#203#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0#255#255#255#0#255#255#255#0'm'#156#212#137'j'#154#210#251'f' - +#151#207#238#7'OnClick'#7#13'acQuitExecute'#0#0#0#0#10'TImageList'#10'ImageL' - +'ist1'#4'left'#3#176#0#3'top'#2'x'#6'Bitmap'#10#14#12#0#0'Li'#3#0#0#0#16#0#0 - +#0#16#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228#187#146#255#228#187 - +#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~'#178'g<'#9#255 + +#6#11'ToolButton5'#5'Style'#7#10'tbsDivider'#0#0#11'TToolButton'#11'ToolButt' + +'on4'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'AcEdit'#0#0#11'TToolButton'#11'T' + +'oolButton6'#4'Left'#2'K'#3'Top'#2#0#5'Width'#2#5#7'Caption'#6#11'ToolButton' + +'6'#5'Style'#7#10'tbsDivider'#0#0#0#8'TToolBar'#13'FormatToolBar'#4'Left'#2#0 + +#6'Height'#2#26#3'Top'#2#26#5'Width'#3#6#2#7'Caption'#6#13'FormatToolBar'#6 + +'Images'#7#10'ImageList1'#8'TabOrder'#2#3#0#11'TToolButton'#12'ToolButton10' + +#4'Left'#3#168#0#3'Top'#2#2#6'Action'#7#11'AcLeftAlign'#0#0#11'TToolButton' + +#12'ToolButton12'#4'Left'#3#191#0#3'Top'#2#2#6'Action'#7#16'AcHorCenterAlign' + +#0#0#11'TToolButton'#12'ToolButton13'#4'Left'#3#214#0#3'Top'#2#2#6'Action'#7 + +#12'AcRightAlign'#0#0#9'TComboBox'#12'FontComboBox'#4'Left'#2#1#6'Height'#2 + +#23#3'Top'#2#2#5'Width'#2#127#10'ItemHeight'#2#15#8'OnSelect'#7#18'FontCombo' + +'BoxSelect'#8'TabOrder'#2#0#0#0#9'TComboBox'#16'FontSizeComboBox'#4'Left'#3 + +#128#0#6'Height'#2#23#3'Top'#2#2#5'Width'#2'('#10'ItemHeight'#2#15#13'Items.' + +'Strings'#1#6#1'8'#6#1'9'#6#2'10'#6#2'11'#6#2'12'#6#2'14'#6#2'16'#6#2'18'#6#2 + +'20'#6#2'24'#0#8'OnSelect'#7#18'FontComboBoxSelect'#8'TabOrder'#2#1#0#0#0#11 + +'TOpenDialog'#11'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel' + +' spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffic' + +'e/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)' + +'|.wikitable_pipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferen' + +'t'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11 + +'TSaveDialog'#11'SaveDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel' + +' spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffic' + +'e/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wi' + +'kimedia)|*.wikitable_wikimedia'#7'Options'#11#17'ofOverwritePrompt'#20'ofEx' + +'tensionDifferent'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#176#0#3't' + +'op'#3#176#0#0#0#9'TMainMenu'#9'MainMenu1'#6'Images'#7#10'ImageList1'#4'left' + ,#3' '#1#3'top'#2'@'#0#9'TMenuItem'#7'mnuFile'#7'Caption'#6#5'&File'#0#9'TMen' + +'uItem'#7'mnuOpen'#6'Action'#7#6'AcOpen'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0','#134#216#0'-'#136#216#247'-'#135#216 + +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216 + +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216 + +#247','#134#216#0#255#255#255#0#255#255#255#0'3'#142#217#251#220#240#250#255 + +#152#225#246#255#149#224#246#255#146#223#246#255#142#222#245#255#137#220#245 + +#255#133#218#244#255#128#217#244#255'z'#215#243#255't'#213#243#255'p'#211#242 + +#255#194#234#248#255'5'#148#218#255#255#255#255#0#255#255#255#0'5'#148#218 + +#247#239#250#254#255#147#229#248#255#143#228#248#255#137#227#248#255#130#225 + +#247#255'z'#223#247#255'q'#222#246#255'g'#219#245#255'['#216#244#255'M'#212 + +#243#255'@'#209#242#255#202#242#251#255'5'#148#218#255#255#255#255#0#255#255 + +#255#0'6'#154#218#248#242#250#253#255#148#230#248#255#146#229#248#255#144#229 + +#248#255#139#227#248#255#134#226#247#255#127#225#247#255'w'#222#246#255'l' + +#220#246#255'^'#217#244#255'O'#213#243#255#204#242#251#255'5'#148#218#255#255 + +#255#255#0#255#255#255#0'6'#161#218#249#246#252#254#255#148#229#248#255#147 + +#229#248#255#147#229#248#255#145#229#248#255#147#219#233#255#147#215#227#255 + +#147#210#220#255#144#206#215#255#140#200#207#255#134#193#198#255#201#216#214 + +#255'5'#148#218#255#197'tD'#232#202#127'S'#241'7'#166#218#250#254#255#255#255 + +#248#253#255#255#246#253#255#255#245#252#255#255#243#252#254#255#154#228#244 + +#255#154#230#247#255#155#230#246#255#157#229#245#255#158#229#245#255#159#229 + +#244#255#218#243#248#255'5'#148#218#255#253#244#238#255#202#128'T'#249'5'#171 + +#218#250#232#246#251#255'p'#188#231#255'U'#170#226#255'M'#165#224#255#145#201 + +#235#255#250#243#239#255#253#254#253#255#255#253#252#255#255#253#252#255#254 + +#253#252#255#254#252#251#255#254#254#253#255'5'#148#218#255#239#242#232#255 + +#206#129'V'#255'6'#170#218#242#241#250#253#255#148#222#245#255#147#220#244 + +#255'd'#188#233#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218 + +#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218 + +#255#251#246#239#255#204#131'U'#254'5'#175#218#240#247#252#254#255#142#228 + +#248#255#145#222#245#255#159#224#245#255#172#225#246#255#202#132'R'#255#255 + +#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231#215#255 + +#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'#254'6'#179#218 + +#248#253#254#254#255#254#255#255#255#254#254#255#255#253#254#255#255#254#255 + +#255#255#228#186#145#255#255#247#240#255#255#231#213#255#253#231#214#255#253 + +#230#212#255#252#228#208#255#251#227#203#255#250#220#194#255#254#243#232#255 + +#204#134'V'#254'4'#180#217#208'^'#194#225#250'`'#195#226#250'`'#195#226#250 + +'`'#195#226#250'_'#195#226#250#228#187#145#255#255#247#242#255#254#231#213 + +#255#254#231#213#255#253#229#209#255#250#224#202#255#249#222#196#255#247#217 + +#188#255#253#242#231#255#204#135'W'#254#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254#247#241 + +#255#252#229#210#255#252#228#209#255#251#226#204#255#249#221#196#255#246#215 + +#187#255#243#209#175#255#250#239#228#255#204#135'X'#254#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146 + +#255#254#246#240#255#252#226#205#255#252#227#205#255#250#223#200#255#247#217 + +#188#255#245#233#221#255#250#243#235#255#251#248#243#255#202#131'S'#254#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#228#187#147#255#254#245#237#255#252#222#197#255#251#224#199#255#249 + +#220#194#255#245#211#180#255#254#249#243#255#250#226#196#255#236#193#147#255 + +#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#0#255#255#255#0#229#190#150#255#255#255#254#255#253#243#233#255#253#243 +#234#255#252#242#232#255#250#239#227#255#250#242#231#255#234#187#136#255#207 +#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245#237#255#252#222#197 - +#255#251#224#199#255#249#220#194#255#245#211#180#255#254#249#243#255#250#226 - +#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254#246#240#255 - +#252#226#205#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221 - +#255#250#243#235#255#251#248#243#255#202#131'S'#254#255#255#255#0#255#255#255 - +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255 - +#254#247#241#255#252#229#210#255#252#228#209#255#251#226#204#255#249#221#196 - +#255#246#215#187#255#243#209#175#255#250#239#228#255#204#135'X'#254'4'#180 - +#217#208'^'#194#225#250'`'#195#226#250'`'#195#226#250'`'#195#226#250'_'#195 - +#226#250#228#187#145#255#255#247#242#255#254#231#213#255#254#231#213#255#253 - +#229#209#255#250#224#202#255#249#222#196#255#247#217#188#255#253#242#231#255 - +#204#135'W'#254'6'#179#218#248#253#254#254#255#254#255#255#255#254#254#255 - +#255#253#254#255#255#254#255#255#255#228#186#145#255#255#247#240#255#255#231 - +#213#255#253#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255#250 - +#220#194#255#254#243#232#255#204#134'V'#254'5'#175#218#240#247#252#254#255 - +#142#228#248#255#145#222#245#255#159#224#245#255#172#225#246#255#202#132'R' - +#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231 - +#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'#254'6' - +#170#218#242#241#250#253#255#148#222#245#255#147#220#244#255'd'#188#233#255 - +'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255 - +'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255#251#246#239#255 - +#204#131'U'#254'5'#171#218#250#232#246#251#255'p'#188#231#255'U'#170#226#255 - +'M'#165#224#255#145#201#235#255#250#243#239#255#253#254#253#255#255#253#252 - +#255#255#253#252#255#254#253#252#255#254#252#251#255#254#254#253#255'5'#148 - +#218#255#239#242#232#255#206#129'V'#255'7'#166#218#250#254#255#255#255#248 - +#253#255#255#246#253#255#255#245#252#255#255#243#252#254#255#154#228#244#255 - +#154#230#247#255#155#230#246#255#157#229#245#255#158#229#245#255#159#229#244 - +#255#218#243#248#255'5'#148#218#255#253#244#238#255#202#128'T'#249'6'#161#218 - +#249#246#252#254#255#148#229#248#255#147#229#248#255#147#229#248#255#145#229 - +#248#255#147#219#233#255#147#215#227#255#147#210#220#255#144#206#215#255#140 - +#200#207#255#134#193#198#255#201#216#214#255'5'#148#218#255#197'tD'#232#202 - +#127'S'#241'6'#154#218#248#242#250#253#255#148#230#248#255#146#229#248#255 - +#144#229#248#255#139#227#248#255#134#226#247#255#127#225#247#255'w'#222#246 - +#255'l'#220#246#255'^'#217#244#255'O'#213#243#255#204#242#251#255'5'#148#218 - +#255#255#255#255#0#255#255#255#0'5'#148#218#247#239#250#254#255#147#229#248 - +#255#143#228#248#255#137#227#248#255#130#225#247#255'z'#223#247#255'q'#222 - ,#246#255'g'#219#245#255'['#216#244#255'M'#212#243#255'@'#209#242#255#202#242 - +#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'3'#142#217#251#220#240 - +#250#255#152#225#246#255#149#224#246#255#146#223#246#255#142#222#245#255#137 - +#220#245#255#133#218#244#255#128#217#244#255'z'#215#243#255't'#213#243#255'p' - +#211#242#255#194#234#248#255'5'#148#218#255#255#255#255#0#255#255#255#0',' - +#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216#247'-'#136#216#247'-'#136 - +#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136 - +#216#247'-'#135#216#247'-'#136#216#247','#134#216#0#255#255#255#0#255#255#255 - +#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'#254#187 - +'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255#187'k8' - +#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209#255#247#224 - +#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245#240#255#250 - +#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251#241#235#255 - +#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6'#216#246#223 - +#209#255#233#170#128#255#254#250#246#255#253#250#246#255#200#140'd'#255#251 - +#243#238#255#251#241#234#255#252#246#242#255#254#251#248#255#252#246#241#255 - +#249#236#226#255#248#231#219#255#238#208#186#255#236#208#189#255#187'p>'#248 - +#188'k6'#240#246#223#208#255#232#168'~'#255#252#246#241#255#252#246#241#255 - +#200#140'd'#255#250#241#233#255#251#244#238#255#253#250#247#255#253#249#246 - +#255#250#240#232#255#248#232#221#255#247#230#219#255#225#163'z'#255#239#213 - +#195#255#183'i5'#254#188'k6'#250#245#221#204#255#231#168'~'#255#250#240#232 - +#255#250#240#232#255#201#141'f'#255#250#240#233#255#253#248#243#255#254#250 - +#248#255#252#244#239#255#249#233#223#255#247#231#219#255#247#229#217#255#224 - +#162'x'#255#231#194#169#255#182'h5'#255#187'k6'#254#244#220#201#255#231#167 - +'}'#255#249#236#225#255#249#236#225#255#249#237#227#255#252#244#238#255#253 - +#250#247#255#253#247#243#255#250#237#229#255#247#231#219#255#247#229#217#255 - +#246#229#216#255#222#160'w'#255#228#190#164#255#180'g4'#255#187'k6'#255#244 - +#217#199#255#230#166'}'#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203 - +#146'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200 - +#140'd'#255#200#140'd'#255#218#156't'#255#225#186#159#255#179'f4'#255#187'j6' - +#255#242#216#197#255#227#164'{'#255#227#163'z'#255#227#164'z'#255#226#164'{' - +#255#226#163'{'#255#225#163'{'#255#225#162'y'#255#223#160'w'#255#222#159'v' - +#255#221#158't'#255#219#156'r'#255#220#157't'#255#221#181#154#255#177'e4'#255 - +#187'j6'#255#242#213#194#255#227#163'z'#255#227#163'z'#255#226#163'{'#255#226 - +#163'{'#255#226#164'{'#255#225#162'y'#255#224#161'x'#255#222#160'w'#255#222 - +#158'u'#255#220#157't'#255#218#155's'#255#217#155's'#255#218#176#149#255#175 - +'d3'#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'#255#225#163'z' - +#255#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'#255#221#159'v' - +#255#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'#255#213#171#142 - +#255#173'c3'#255#186'j6'#255#239#208#187#255#226#162'z'#255#254#251#248#255 + +#0#255#255#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228#187#146 + +#255#228#187#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~' + +#178'g<'#9#255#255#255#0#7'OnClick'#7#13'acOpenExecute'#0#0#9'TMenuItem'#9'm' + +'nuSaveAs'#6'Action'#7#8'AcSaveAs'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6' + +#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0 + +'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#186'j6'#0#185'i5'#181#184'i5'#238#183'h5' + +#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255#174'd3'#255#172'c2'#255 + +#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166'`1'#241#168'a1'#196#186 + +'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255#254#251#248#255#254 + +#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255 + +#254#251#248#255#254#251#248#255#254#251#248#255#200#154'|'#255#199#152'y' + ,#255#167'`1'#237#186'k7'#254#237#202#179#255#224#162'z'#255#254#250#247#255 + +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255 + +'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255#202#141'e'#255 + +#201#155'|'#255#167'`1'#254#187'l8'#255#238#204#182#255#225#162'z'#255#254 + +#250#247#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255 + +#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#253#249#246 + +#255#205#144'h'#255#204#158#129#255#168'a2'#255#187'k8'#255#239#206#184#255 + +#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255 + +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255 + +#253#249#246#255#207#147'j'#255#206#163#132#255#170'a2'#255#186'j6'#255#239 + +#208#187#255#226#162'z'#255#254#251#248#255#254#251#248#255#254#251#248#255 +#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 - +#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#211#150 - +'m'#255#210#167#138#255#171'b2'#255#187'k8'#255#239#206#184#255#225#162'y' - +#255#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136 - +#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246 - +#255#207#147'j'#255#206#163#132#255#170'a2'#255#187'l8'#255#238#204#182#255 - +#225#162'z'#255#254#250#247#255#191#220#194#255#191#220#194#255#191#220#194 - +#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220 - +#194#255#253#249#246#255#205#144'h'#255#204#158#129#255#168'a2'#255#186'k7' - +#254#237#202#179#255#224#162'z'#255#254#250#247#255'b'#192#136#255'b'#192#136 - +#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136 - +#255'b'#192#136#255#253#249#246#255#202#141'e'#255#201#155'|'#255#167'`1'#254 - +#186'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255#254#251#248#255 - +#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 - +#255#254#251#248#255#254#251#248#255#254#251#248#255#200#154'|'#255#199#152 - +'y'#255#167'`1'#237#186'j6'#0#185'i5'#181#184'i5'#238#183'h5'#255#181'h5'#255 - +#180'g4'#255#178'f4'#255#176'e3'#255#174'd3'#255#172'c2'#255#170'b2'#255#169 - +'a2'#255#168'`1'#255#167'`1'#254#166'`1'#241#168'a1'#196#255#255#255#0#255 + +#255#254#251#248#255#254#251#248#255#211#150'm'#255#210#167#138#255#171'b2' + +#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'#255#225#163'z'#255 + +#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'#255#221#159'v'#255 + +#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'#255#213#171#142#255 + +#173'c3'#255#187'j6'#255#242#213#194#255#227#163'z'#255#227#163'z'#255#226 + +#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255#224#161'x'#255#222 + +#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255#217#155's'#255#218 + +#176#149#255#175'd3'#255#187'j6'#255#242#216#197#255#227#164'{'#255#227#163 + +'z'#255#227#164'z'#255#226#164'{'#255#226#163'{'#255#225#163'{'#255#225#162 + +'y'#255#223#160'w'#255#222#159'v'#255#221#158't'#255#219#156'r'#255#220#157 + +'t'#255#221#181#154#255#177'e4'#255#187'k6'#255#244#217#199#255#230#166'}' + +#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203#146'l'#255#203#146'm' + +#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200#140'd'#255#200#140'd' + +#255#218#156't'#255#225#186#159#255#179'f4'#255#187'k6'#254#244#220#201#255 + +#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227#255#252#244#238 + +#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231#219#255#247#229 + +#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180'g4'#255#188'k6' + +#250#245#221#204#255#231#168'~'#255#250#240#232#255#250#240#232#255#201#141 + +'f'#255#250#240#233#255#253#248#243#255#254#250#248#255#252#244#239#255#249 + +#233#223#255#247#231#219#255#247#229#217#255#224#162'x'#255#231#194#169#255 + +#182'h5'#255#188'k6'#240#246#223#208#255#232#168'~'#255#252#246#241#255#252 + +#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255#253#250#247#255 + +#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219#255#225#163'z' + +#255#239#213#195#255#183'i5'#254#188'k6'#216#246#223#209#255#233#170#128#255 + +#254#250#246#255#253#250#246#255#200#140'd'#255#251#243#238#255#251#241#234 + +#255#252#246#242#255#254#251#248#255#252#246#241#255#249#236#226#255#248#231 + +#219#255#238#208#186#255#236#208#189#255#187'p>'#248#188'k6'#155#246#224#209 + +#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245 + +#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251 + +#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6q' + +#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'#254#187'k6'#255#187 + +'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255#187'k8'#239#187'p>' + +#203#182'i5T'#255#255#255#0#7'OnClick'#7#15'acSaveAsExecute'#0#0#9'TMenuItem' + +#9'MenuItem1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7'mnuQuit'#6'Action'#7#6'Ac' + +'Quit'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0 + +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'c'#155#22#25'`' + +#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146#252#12'W'#143#237 + +#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'#255'JJJ'#255'GGG' + +#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132#181#255'N'#138#186 + +#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0'XXX'#255#162#162 + +#162#255#162#162#162#255#163#163#163#255#164#164#164#255#164#164#164#255#165 + +#165#165#255'/o'#165#255'x'#171#210#255'x'#171#211#255's'#167#209#255'i'#160 + +#205#255'@'#127#174#255#15'Y'#145#234#255#255#255#0#255#255#255#0'\\\'#255 + +#161#161#161#255''#255'4~;'#255'1y7'#255'.u4'#255'I' + +#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180 + ,#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177 + +#255#31'd'#156#234';'#135'B'#255#137#203#146#255#132#200#141#255#128#198#136 + +#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161#255'L' + +#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'#180#223#255'G' + +#133#177#255'%i'#161#234'>'#139'F'#255#143#206#153#255'}'#198#135#255'x'#195 + +#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255'T'#127'W' + +#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255'K'#212#255 + +#255'B'#139#184#255',n'#166#234'A'#144'J'#255#148#210#159#255#145#208#154#255 + +#141#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159 + +#159#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^' + +#196#237#255'K'#136#179#255'4s'#171#234'D'#148'M'#255'B'#145'K'#255'?'#141'H' + +#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K'#255#158#158#158#255 + +#158#158#158#255'`'#146#201#255#158#199#226#255#131#184#218#255'}'#180#215 + +#255'~'#179#215#255'O'#137#180#255';y'#177#234#255#255#255#0#255#255#255#0'w' + +'ww'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255#156#156#156#255#157#157 + +#157#255#157#157#157#255'f'#150#204#255#162#203#227#255#137#189#220#255#131 + +#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182#234#255#255#255#0#255#255 + +#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153#255#155#155#155#255 + +#156#156#156#255#156#156#156#255'l'#154#208#255#167#206#229#255#143#193#223 + +#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'#132#188#234#255#255 + +#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153#255#154#154#154#255 + +#154#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255#170#209#231 + +#255#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183#255'R'#137 + +#193#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz' + +#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255 + +#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214 + +#219'm'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'm'#156#212#137'j'#154#210#251'f'#151#207#238#7'OnClick' + +#7#13'acQuitExecute'#0#0#0#9'TMenuItem'#7'mnuEdit'#7'Caption'#6#4'Edit'#0#9 + +'TMenuItem'#9'MenuItem2'#6'Action'#7#6'AcEdit'#9'AutoCheck'#9#0#0#0#9'TMenuI' + +'tem'#9'mnuFormat'#7'Caption'#6#6'Format'#0#9'TMenuItem'#15'MnuHorAlignment' + +#7'Caption'#6#20'Horizontal alignment'#0#9'TMenuItem'#13'MnuHorDefault'#6'Ac' + +'tion'#7#17'AcHorDefaultAlign'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#11 + +'AcLeftAlign'#0#0#9'TMenuItem'#9'MenuItem4'#6'Action'#7#16'AcHorCenterAlign' + +#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#12'AcRightAlign'#0#0#0#0#0#10'TIm' + +'ageList'#10'ImageList1'#4'left'#3#176#0#3'top'#2'x'#6'Bitmap'#10#14#28#0#0 + +'Li'#7#0#0#0#16#0#0#0#16#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228 + +#187#146#255#228#187#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196 + +'yB~'#178'g<'#9#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#229#190#150#255#255#255#254#255#253 + +#243#233#255#253#243#234#255#252#242#232#255#250#239#227#255#250#242#231#255 + +#234#187#136#255#207#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245 + +#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180#255#254 + +#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187 + +#146#255#254#246#240#255#252#226#205#255#252#227#205#255#250#223#200#255#247 + +#217#188#255#245#233#221#255#250#243#235#255#251#248#243#255#202#131'S'#254 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#228#187#146#255#254#247#241#255#252#229#210#255#252#228#209#255 + +#251#226#204#255#249#221#196#255#246#215#187#255#243#209#175#255#250#239#228 + +#255#204#135'X'#254'4'#180#217#208'^'#194#225#250'`'#195#226#250'`'#195#226 + +#250'`'#195#226#250'_'#195#226#250#228#187#145#255#255#247#242#255#254#231 + +#213#255#254#231#213#255#253#229#209#255#250#224#202#255#249#222#196#255#247 + +#217#188#255#253#242#231#255#204#135'W'#254'6'#179#218#248#253#254#254#255 + +#254#255#255#255#254#254#255#255#253#254#255#255#254#255#255#255#228#186#145 + +#255#255#247#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252#228 + +#208#255#251#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254'5' + +#175#218#240#247#252#254#255#142#228#248#255#145#222#245#255#159#224#245#255 + ,#172#225#246#255#202#132'R'#255#255#247#241#255#255#233#217#255#255#234#219 + +#255#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#255#247 + +#241#255#203#133'U'#254'6'#170#218#242#241#250#253#255#148#222#245#255#147 + +#220#244#255'd'#188#233#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5' + +#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5' + +#148#218#255#251#246#239#255#204#131'U'#254'5'#171#218#250#232#246#251#255'p' + +#188#231#255'U'#170#226#255'M'#165#224#255#145#201#235#255#250#243#239#255 + +#253#254#253#255#255#253#252#255#255#253#252#255#254#253#252#255#254#252#251 + +#255#254#254#253#255'5'#148#218#255#239#242#232#255#206#129'V'#255'7'#166#218 + +#250#254#255#255#255#248#253#255#255#246#253#255#255#245#252#255#255#243#252 + +#254#255#154#228#244#255#154#230#247#255#155#230#246#255#157#229#245#255#158 + +#229#245#255#159#229#244#255#218#243#248#255'5'#148#218#255#253#244#238#255 + +#202#128'T'#249'6'#161#218#249#246#252#254#255#148#229#248#255#147#229#248 + +#255#147#229#248#255#145#229#248#255#147#219#233#255#147#215#227#255#147#210 + +#220#255#144#206#215#255#140#200#207#255#134#193#198#255#201#216#214#255'5' + +#148#218#255#197'tD'#232#202#127'S'#241'6'#154#218#248#242#250#253#255#148 + +#230#248#255#146#229#248#255#144#229#248#255#139#227#248#255#134#226#247#255 + +#127#225#247#255'w'#222#246#255'l'#220#246#255'^'#217#244#255'O'#213#243#255 + +#204#242#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'5'#148#218#247 + +#239#250#254#255#147#229#248#255#143#228#248#255#137#227#248#255#130#225#247 + +#255'z'#223#247#255'q'#222#246#255'g'#219#245#255'['#216#244#255'M'#212#243 + +#255'@'#209#242#255#202#242#251#255'5'#148#218#255#255#255#255#0#255#255#255 + +#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246 + +#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215 + +#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255 + +#255#0#255#255#255#0','#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216 + +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216 + +#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216#0 + +#255#255#255#0#255#255#255#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188 + +'k6'#250#187'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;' + +#255#187'm:'#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155 + +#246#224#209#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246 + +#255#252#245#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250 + +#247#255#251#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181 + +'i5c'#188'k6'#216#246#223#209#255#233#170#128#255#254#250#246#255#253#250#246 + +#255#200#140'd'#255#251#243#238#255#251#241#234#255#252#246#242#255#254#251 + +#248#255#252#246#241#255#249#236#226#255#248#231#219#255#238#208#186#255#236 + +#208#189#255#187'p>'#248#188'k6'#240#246#223#208#255#232#168'~'#255#252#246 + +#241#255#252#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255#253 + +#250#247#255#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219#255 + +#225#163'z'#255#239#213#195#255#183'i5'#254#188'k6'#250#245#221#204#255#231 + +#168'~'#255#250#240#232#255#250#240#232#255#201#141'f'#255#250#240#233#255 + +#253#248#243#255#254#250#248#255#252#244#239#255#249#233#223#255#247#231#219 + +#255#247#229#217#255#224#162'x'#255#231#194#169#255#182'h5'#255#187'k6'#254 + +#244#220#201#255#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227 + +#255#252#244#238#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231 + +#219#255#247#229#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180 + +'g4'#255#187'k6'#255#244#217#199#255#230#166'}'#255#200#140'd'#255#201#141'e' + +#255#201#142'g'#255#203#146'l'#255#203#146'm'#255#202#144'i'#255#200#140'e' + +#255#200#140'd'#255#200#140'd'#255#200#140'd'#255#218#156't'#255#225#186#159 + +#255#179'f4'#255#187'j6'#255#242#216#197#255#227#164'{'#255#227#163'z'#255 + +#227#164'z'#255#226#164'{'#255#226#163'{'#255#225#163'{'#255#225#162'y'#255 + +#223#160'w'#255#222#159'v'#255#221#158't'#255#219#156'r'#255#220#157't'#255 + +#221#181#154#255#177'e4'#255#187'j6'#255#242#213#194#255#227#163'z'#255#227 + +#163'z'#255#226#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255#224 + +#161'x'#255#222#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255#217 + +#155's'#255#218#176#149#255#175'd3'#255#187'j6'#255#240#210#190#255#226#163 + +'z'#255#226#163'z'#255#225#163'z'#255#226#163'{'#255#225#163'{'#255#224#161 + +'x'#255#222#159'w'#255#221#159'v'#255#220#157't'#255#217#155'r'#255#216#153 + +'q'#255#214#153'p'#255#213#171#142#255#173'c3'#255#186'j6'#255#239#208#187 + +#255#226#162'z'#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251 + +#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254 + +#251#248#255#254#251#248#255#211#150'm'#255#210#167#138#255#171'b2'#255#187 + +'k8'#255#239#206#184#255#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192 + ,#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192 + +#136#255'b'#192#136#255#253#249#246#255#207#147'j'#255#206#163#132#255#170'a' + +'2'#255#187'l8'#255#238#204#182#255#225#162'z'#255#254#250#247#255#191#220 + +#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191 + +#220#194#255#191#220#194#255#191#220#194#255#253#249#246#255#205#144'h'#255 + +#204#158#129#255#168'a2'#255#186'k7'#254#237#202#179#255#224#162'z'#255#254 + +#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b' + +#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255#202 + +#141'e'#255#201#155'|'#255#167'`1'#254#186'j5'#222#235#198#173#255#234#197 + +#173#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254 + +#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255 + +#254#251#248#255#200#154'|'#255#199#152'y'#255#167'`1'#237#186'j6'#0#185'i5' + +#181#184'i5'#238#183'h5'#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255 + +#174'd3'#255#172'c2'#255#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166 + +'`1'#241#168'a1'#196#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'm'#156#212#137'j'#154 + +#210#251'f'#151#207#238#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'p'#158#214#219'm'#156#212#255#133#177#218#255'Z'#145 + +#185#255'`'#147#203#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255 + +'|||'#255'zzz'#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255 + +#135#178#220#255#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198 + +#234#255#255#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153#255#154 + +#154#154#255#154#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255 + +#170#209#231#255#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183 + +#255'R'#137#193#234#255#255#255#0#255#255#255#0'zzz'#255#153#153#153#255'R' + +#145'Y'#255#153#154#153#255#155#155#155#255#156#156#156#255#156#156#156#255 + +'l'#154#208#255#167#206#229#255#143#193#223#255#137#189#220#255#139#189#220 + +#255'S'#141#182#255'K'#132#188#234#255#255#255#0#255#255#255#0'www'#255#154 + +#154#154#255'='#138'E'#255'I'#138'O'#255#156#156#156#255#157#157#157#255#157 + +#157#157#255'f'#150#204#255#162#203#227#255#137#189#220#255#131#185#218#255 + +#132#185#218#255'Q'#139#181#255'C~'#182#234'D'#148'M'#255'B'#145'K'#255'?' + +#141'H'#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K'#255#158#158 + +#158#255#158#158#158#255'`'#146#201#255#158#199#226#255#131#184#218#255'}' + +#180#215#255'~'#179#215#255'O'#137#180#255';y'#177#234'A'#144'J'#255#148#210 + +#159#255#145#208#154#255#141#205#150#255#137#203#146#255#132#200#141#255'Q' + +#152'X'#255'A|F'#255#159#159#159#255'Z'#142#196#255#152#195#224#255'|'#179 + +#215#255't'#175#214#255'^'#196#237#255'K'#136#179#255'4s'#171#234'>'#139'F' + +#255#143#206#153#255'}'#198#135#255'x'#195#129#255's'#192'|'#255't'#192'|' + +#255'y'#194#129#255'I'#144'O'#255'T'#127'W'#255'T'#137#191#255#148#191#221 + +#255'u'#173#212#255'c'#184#225#255'K'#212#255#255'B'#139#184#255',n'#166#234 + +';'#135'B'#255#137#203#146#255#132#200#141#255#128#198#136#255'{'#195#131#255 + +'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161#255'L'#132#186#255#141#187 + +#219#255'n'#168#209#255'f'#166#209#255'_'#180#223#255'G'#133#177#255'%i'#161 + +#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'#145'P'#255'F'#143'L'#255'9s' + +'='#255#161#161#161#255#162#162#162#255'E~'#180#255#136#183#217#255'g'#163 + +#207#255'a'#158#204#255'c'#159#204#255'E'#131#177#255#31'd'#156#234#255#255 + +#255#0#255#255#255#0'```'#255#160#160#160#255'=vA'#255'6q9'#255#162#162#162 + +#255#162#162#162#255#163#163#163#255'=y'#176#255#130#179#215#255'b'#159#204 + +#255'Z'#154#201#255'^'#155#202#255'C'#129#175#255#25'`'#152#234#255#255#255#0 + +#255#255#255#0'\\\'#255#161#161#161#255'~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146 + +#252#12'W'#143#237#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'/'#186#228#9'O'#170#219#234'P'#147#202#253'N'#144#200#255'/'#157 + +#210#223'5'#164#222#25#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'P'#168#217#255'j'#165#216#255#201#225#247#255#203#227#248#255'B' + +#149#202#255'1'#130#194#174#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'/'#186#228#255#167#212#244#255#197#225#248#255#204#227#249#255#204#227#249 + +#255#189#219#247#255'O'#144#201#253#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186 + +#228#255#195#237#248#255#168#226#248#255'l'#174#221#255#165#207#244#255#165 + +#207#244#255#189#219#247#255'S'#147#203#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228 + +#255#195#237#248#255#179#244#252#255'h'#217#245#255'o'#207#243#255'Y'#157#208 + +#255's'#171#221#255'O'#145#201#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228#255#195 + +#237#248#255#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']' + +#180#230#255';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228#255#195#237#248 + +#255#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230 + +#255';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0''''#144#191#255#195#237#248#255 + +#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255 + +';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'&'#137#185#255#190#230#242#255#179#244 + +#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255';'#143 + +#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0' c'#152' &'#137#185#255#176#203#225#255'g'#169#200#255'`' + +#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255';'#143#217#255#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#30'm'#147#255#200#225#242#255#209#231#250#255'4}'#181 + +#255'1'#153#195#255'm'#196#220#255'J'#156#207#255'4'#131#199#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#30'm'#147#255#203#227#249#255'a'#170#236#255'@'#152 + +#232#255#21'g'#194#255#22'`'#170#255',v'#180#255#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#18'BY'#255']'#156#212#255#166#207#245#255#169#207 + +#236#255'H'#139#193#255',v'#180#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#19'@X'#255#21'B^'#255'%i'#156#255',v'#180#255';'#139 + +#186#173#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 - +#255#255#255#0'm'#156#212#137'j'#154#210#251'f'#151#207#238#255#255#255#0#255 - +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 - +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219 - +'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0 - ,#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255'www'#255'uuu'#255 - +'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171#211#232#255#169 - +#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255#255#255#0'}}}' - +#255#153#153#153#255#153#153#153#255#154#154#154#255#154#154#154#255#155#155 - +#155#255#155#155#155#255'o'#157#211#255#170#209#231#255#171#209#231#255#152 - +#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193#234#255#255#255#0#255 - +#255#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153#255#155#155#155 - +#255#156#156#156#255#156#156#156#255'l'#154#208#255#167#206#229#255#143#193 - +#223#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'#132#188#234#255 - +#255#255#0#255#255#255#0'www'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255 - +#156#156#156#255#157#157#157#255#157#157#157#255'f'#150#204#255#162#203#227 - +#255#137#189#220#255#131#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182 - +#234'D'#148'M'#255'B'#145'K'#255'?'#141'H'#255'='#137'E'#255']'#164'e'#255'Z' - +#160'a'#255'E'#131'K'#255#158#158#158#255#158#158#158#255'`'#146#201#255#158 - +#199#226#255#131#184#218#255'}'#180#215#255'~'#179#215#255'O'#137#180#255';y' - +#177#234'A'#144'J'#255#148#210#159#255#145#208#154#255#141#205#150#255#137 - +#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159#159#159#255'Z'#142 - +#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'#196#237#255'K'#136 - +#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135#255'x'#195#129 - +#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255'T'#127'W'#255 - +'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255'K'#212#255#255 - +'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132#200#141#255#128 - +#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161 - +#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'#180#223 - +#255'G'#133#177#255'%i'#161#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I' - +#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180 - +#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177 - +#255#31'd'#156#234#255#255#255#0#255#255#255#0'```'#255#160#160#160#255'=vA' - +#255'6q9'#255#162#162#162#255#162#162#162#255#163#163#163#255'=y'#176#255#130 - +#179#215#255'b'#159#204#255'Z'#154#201#255'^'#155#202#255'C'#129#175#255#25 - +'`'#152#234#255#255#255#0#255#255#255#0'\\\'#255#161#161#161#255'~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 - +#255#255#0#255#255#255#0#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136 - +#13'X'#144#164#19'\'#146#252#12'W'#143#237#0#0#11'TActionList'#11'ActionList' - +'1'#4'left'#3#176#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open..' - +'.'#10'ImageIndex'#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcS' - +'aveAs'#7'Caption'#6#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acS' - +'aveAsExecute'#0#0#7'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2 - +#2#9'OnExecute'#7#13'acQuitExecute'#0#0#0#0 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'ccc' + +#255'^^^'#255'YYY'#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'ooo'#255'kkk'#255'fff'#255'aaa'#255'\' + +'\\'#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255 + +'___'#255'ZZZ'#255'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111' + +#255'+++'#255'%%%'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'XXX'#255'RRR'#255'LLL'#255'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'(((' + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,' + +','#255'&&&'#255' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'<<<'#255'555'#255'/' + +'//'#255')))'#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20#255#15#15#15 + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'cc' + +'c'#255'^^^'#255'YYY'#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'kkkkfff'#255'aaa' + +#255'\\\'#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255'???'#255'999k'#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255'___'#255'Z' + +'ZZ'#255'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111'#255'+++' + +#255'%%%'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'RRRkLLL'#255'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'((('#255'##' + +'#'#255#29#29#29'k'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,,'#255'&&&'#255 + +' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'555k///'#255')))' + +#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20#255#15#15#15#255#11#11#11 + ,#255#7#7#7'k'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'ccc'#255'^^^'#255'YYY' + +#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'aaa'#255'\\\' + +#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255'???'#255'999'#255'333'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255'___'#255'ZZZ'#255 + +'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111'#255'+++'#255'%%%' + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'((' + +'('#255'###'#255#29#29#29#255#24#24#24#255#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,,' + +#255'&&&'#255' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0')))'#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20 + +#255#15#15#15#255#11#11#11#255#7#7#7#255#3#3#3#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#0#0#11'TActionList'#11'ActionList1'#6'Images'#7#10'ImageList1'#4'left'#3#176 + +#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open...'#10'ImageIndex' + +#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcSaveAs'#7'Caption'#6 + +#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acSaveAsExecute'#0#0#7 + +'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2#2#9'OnExecute'#7#13 + +'acQuitExecute'#0#0#7'TAction'#6'AcEdit'#9'AutoCheck'#9#7'Caption'#6#9'Edit ' + +'mode'#4'Hint'#6#22'Enable/disable editing'#10'ImageIndex'#2#3#9'OnExecute'#7 + +#13'AcEditExecute'#0#0#7'TAction'#17'AcHorDefaultAlign'#3'Tag'#2'd'#8'Catego' + +'ry'#6#6'Format'#7'Caption'#6#7'Default'#7'Checked'#9#9'OnExecute'#7#21'AcHo' + +'rAlignmentExecute'#0#0#7'TAction'#11'AcLeftAlign'#3'Tag'#2'e'#8'Category'#6 + +#6'Format'#7'Caption'#6#4'Left'#10'ImageIndex'#2#4#9'OnExecute'#7#21'AcHorAl' + +'ignmentExecute'#0#0#7'TAction'#16'AcHorCenterAlign'#3'Tag'#2'f'#8'Category' + +#6#6'Format'#7'Caption'#6#8'Centered'#10'ImageIndex'#2#5#9'OnExecute'#7#21'A' + ,'cHorAlignmentExecute'#0#0#7'TAction'#12'AcRightAlign'#3'Tag'#2'g'#8'Categor' + +'y'#6#6'Format'#7'Caption'#6#5'Right'#10'ImageIndex'#2#6#9'OnExecute'#7#21'A' + +'cHorAlignmentExecute'#0#0#0#0 ]); diff --git a/components/fpspreadsheet/examples/fpsgrid/mainform.pas b/components/fpspreadsheet/examples/fpsgrid/mainform.pas index 46b84111a..bcb44e675 100644 --- a/components/fpspreadsheet/examples/fpsgrid/mainform.pas +++ b/components/fpspreadsheet/examples/fpsgrid/mainform.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, - StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList, Spin, + StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList, Spin, ColorBox, fpspreadsheetgrid, fpspreadsheet, fpsallformats; type @@ -17,16 +17,30 @@ type AcOpen: TAction; AcSaveAs: TAction; AcQuit: TAction; + AcEdit: TAction; + AcLeftAlign: TAction; + AcHorCenterAlign: TAction; + AcRightAlign: TAction; + AcHorDefaultAlign: TAction; ActionList1: TActionList; - btnPopulateGrid: TButton; CbShowHeaders: TCheckBox; CbShowGridLines: TCheckBox; + FontComboBox: TComboBox; EdFrozenRows: TSpinEdit; + FontSizeComboBox: TComboBox; ImageList1: TImageList; Label1: TLabel; Label2: TLabel; MainMenu1: TMainMenu; MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + MenuItem5: TMenuItem; + MnuHorDefault: TMenuItem; + MnuHorAlignment: TMenuItem; + mnuFormat: TMenuItem; + mnuEdit: TMenuItem; mnuFile: TMenuItem; mnuOpen: TMenuItem; mnuQuit: TMenuItem; @@ -39,10 +53,18 @@ type sWorksheetGrid1: TsWorksheetGrid; TabSheet1: TTabSheet; ToolBar1: TToolBar; + FormatToolBar: TToolBar; ToolButton1: TToolButton; + ToolButton10: TToolButton; + ToolButton12: TToolButton; + ToolButton13: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; + ToolButton4: TToolButton; ToolButton5: TToolButton; + ToolButton6: TToolButton; + procedure AcEditExecute(Sender: TObject); + procedure AcHorAlignmentExecute(Sender: TObject); procedure btnPopulateGridClick(Sender: TObject); procedure CbShowHeadersClick(Sender: TObject); procedure CbShowGridLinesClick(Sender: TObject); @@ -51,11 +73,17 @@ type procedure acSaveAsExecute(Sender: TObject); procedure EdFrozenColsChange(Sender: TObject); procedure EdFrozenRowsChange(Sender: TObject); + procedure FontComboBoxSelect(Sender: TObject); procedure FormActivate(Sender: TObject); + procedure FormCreate(Sender: TObject); procedure PageControl1Change(Sender: TObject); + procedure sWorksheetGrid1SelectCell(Sender: TObject; aCol, aRow: Integer; + var CanSelect: Boolean); private { private declarations } procedure LoadFile(const AFileName: String); + procedure UpdateHorAlignment(AValue: TsHorAlignment); + procedure UpdateFont(AFont: TsFont); public { public declarations } end; @@ -66,7 +94,11 @@ var implementation uses - Grids, fpcanvas; + fpcanvas, Grids; + +const + HORALIGN_TAG = 100; + { TForm1 } @@ -81,6 +113,31 @@ begin sWorksheetGrid1.Invalidate; end; +procedure TForm1.AcEditExecute(Sender: TObject); +begin + if AcEdit.Checked then + sWorksheetGrid1.Options := sWorksheetGrid1.Options + [goEditing] + else + sWorksheetGrid1.Options := sWorksheetGrid1.Options - [goEditing]; +end; + +procedure TForm1.AcHorAlignmentExecute(Sender: TObject); +var + horalign: TsHorAlignment; + c, r: Cardinal; +begin + horalign := TsHorAlignment(TAction(Sender).Tag - HORALIGN_TAG); + if TAction(Sender).Checked then + horalign := haDefault; + UpdateHorAlignment(horalign); + with sWorksheetGrid1 do begin + c := GetWorksheetCol(Col); + r := GetWorksheetRow(Row); + if Worksheet <> nil then + Worksheet.WriteHorAlignment(r, c, horalign); + end; +end; + procedure TForm1.CbShowHeadersClick(Sender: TObject); begin sWorksheetGrid1.ShowHeaders := CbShowHeaders.Checked; @@ -104,24 +161,12 @@ end; procedure TForm1.acSaveAsExecute(Sender: TObject); // Saves sheet in grid to file, overwriting existing file -var - lWorkBook: TsWorkbook; - lWorkSheet:TsWorksheet; begin - ShowMessage('Not implemented...'); - exit; + if sWorksheetGrid1.Workbook = nil then + exit; if SaveDialog1.Execute then - begin - lWorkBook := TsWorkBook.Create; - lWorkSheet := lWorkBook.AddWorksheet('Sheet1'); - try - sWorksheetGrid1.SaveToWorksheet(lWorkSheet); - lWorkBook.WriteToFile(SaveDialog1.FileName,true); - finally - lWorkBook.Free; - end; - end; + sWorksheetGrid1.SaveToSpreadsheetFile(SaveDialog1.FileName); end; procedure TForm1.EdFrozenColsChange(Sender: TObject); @@ -134,12 +179,49 @@ begin sWorksheetGrid1.FrozenRows := EdFrozenRows.Value; end; +procedure TForm1.FontComboBoxSelect(Sender: TObject); +var + c, r: Cardinal; + f: Integer; + lFont: TsFont; + h: Integer; + s: String; +begin + if sWorksheetGrid1.Workbook = nil then + exit; + + with sWorksheetGrid1 do begin + c := GetWorksheetCol(Col); + r := GetWorksheetRow(Row); + f := Worksheet.GetCell(r, c)^.FontIndex; + lFont := Workbook.GetFont(f); + + if FontCombobox.ItemIndex = -1 then + s := lFont.FontName + else + s := FontCombobox.Items[FontCombobox.ItemIndex]; + + if FontSizeCombobox.ItemIndex = -1 then + h := round(lFont.Size) + else + h := StrToInt(FontSizeCombobox.Items[FontSizeCombobox.ItemIndex]); + + Worksheet.WriteFont(r, c, s, h, lFont.Style, lFont.Color); + end; +end; + procedure TForm1.FormActivate(Sender: TObject); begin if ParamCount > 0 then LoadFile(ParamStr(1)); end; +procedure TForm1.FormCreate(Sender: TObject); +begin + // Populate font combobox + FontCombobox.Items.Assign(Screen.Fonts); +end; + procedure TForm1.LoadFile(const AFileName: String); // Loads first worksheet from file into grid var @@ -180,6 +262,44 @@ begin sWorksheetGrid1.SelectSheetByIndex(PageControl1.ActivePageIndex); end; +procedure TForm1.sWorksheetGrid1SelectCell(Sender: TObject; + aCol, aRow: Integer; var CanSelect: Boolean); +var + cell: PCell; + c, r: Cardinal; + lFont: TsFont; +begin + with sWorksheetGrid1 do begin + if Worksheet = nil then exit; + c := GetWorksheetCol(ACol); + r := GetWorksheetRow(ARow); + cell := Worksheet.FindCell(r, c); + end; + if cell = nil then + exit; + UpdateHorAlignment(cell^.HorAlignment); + lFont := sWorksheetGrid1.Workbook.GetFont(cell^.FontIndex); + UpdateFont(lFont); +end; + +procedure TForm1.UpdateHorAlignment(AValue: TsHorAlignment); +var + i: Integer; + ac: TAction; +begin + for i:=0 to ActionList1.ActionCount-1 do begin + ac := TAction(ActionList1.Actions[i]); + if (ac.Tag >= HORALIGN_TAG) and (ac.Tag < HORALIGN_TAG+10) then + ac.Checked := ((ac.Tag - HORALIGN_TAG) = ord(AValue)); + end; +end; + +procedure TForm1.UpdateFont(AFont: TsFont); +begin + FontCombobox.ItemIndex := FontCombobox.Items.IndexOf(AFont.FontName); + FontsizeCombobox.ItemIndex := FontSizeCombobox.Items.IndexOf(IntToStr(Round(AFont.Size))); +end; + initialization {$I mainform.lrs} diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index cd056e275..dd44820aa 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -310,8 +310,11 @@ type TsCustomSpreadWriter = class; TsWorkbook = class; + { TsWorksheet } + TsCellEvent = procedure (Sender: TObject; ARow, ACol: Cardinal) of object; + TsWorksheet = class private FWorkbook: TsWorkbook; @@ -321,14 +324,17 @@ type FLeftPaneWidth: Integer; FTopPaneHeight: Integer; FOptions: TsSheetOptions; + FOnChangeCell: TsCellEvent; procedure RemoveCallback(data, arg: pointer); + protected + procedure ChangedCell(ARow, ACol: Cardinal); public Name: string; { Base methods } constructor Create; destructor Destroy; override; { Utils } - class function CellPosToText(ARow, ACol: Cardinal): string; + class function CellPosToText(ARow, ACol: Cardinal): string; { Data manipulation methods - For Cells } procedure CopyCell(AFromRow, AFromCol, AToRow, AToCol: Cardinal; AFromWorksheet: TsWorksheet); function FindCell(ARow, ACol: Cardinal): PCell; @@ -398,8 +404,10 @@ type property Options: TsSheetOptions read FOptions write FOptions; property LeftPaneWidth: Integer read FLeftPaneWidth write FLeftPaneWidth; property TopPaneHeight: Integer read FTopPaneHeight write FTopPaneHeight; + property OnChangeCell: TsCellEvent read FOnChangeCell write FOnChangeCell; end; + { TsWorkbook } TsWorkbook = class @@ -851,6 +859,12 @@ begin Result := Format('%s%d', [lStr, ARow+1]); end; +{ Is called whenever a cell value or formatting has changed. } +procedure TsWorksheet.ChangedCell(ARow, ACol: Cardinal); +begin + if Assigned(FOnChangeCell) then FOnChangeCell(Self, ARow, ACol); +end; + procedure TsWorksheet.CopyCell(AFromRow, AFromCol, AToRow, AToCol: Cardinal; AFromWorksheet: TsWorksheet); var @@ -1252,9 +1266,9 @@ var ACell: PCell; begin ACell := GetCell(ARow, ACol); - ACell^.ContentType := cctUTF8String; ACell^.UTF8StringValue := AText; + ChangedCell(ARow, ACol); end; {@@ @@ -1295,6 +1309,7 @@ begin ACell^.NumberFormatStr := '0' + decs; end; end; + ChangedCell(ARow, ACol); end; {@@ @@ -1311,6 +1326,7 @@ var begin ACell := GetCell(ARow, ACol); ACell^.ContentType := cctEmpty; + ChangedCell(ARow, ACol); end; {@@ @@ -1371,6 +1387,7 @@ begin nfTimeInterval: ACell^.NumberFormatStr := ''; end; + ChangedCell(ARow, ACol); end; {@@ @@ -1387,6 +1404,7 @@ begin ACell := GetCell(ARow, ACol); ACell^.ContentType := cctFormula; ACell^.FormulaValue := AFormula; + ChangedCell(ARow, ACol); end; {@@ @@ -1406,6 +1424,7 @@ begin ACell := GetCell(ARow, ACol); Include(ACell^.UsedFormattingFields, uffNumberFormat); ACell^.NumberFormat := ANumberFormat; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteRPNFormula(ARow, ACol: Cardinal; @@ -1416,6 +1435,7 @@ begin ACell := GetCell(ARow, ACol); ACell^.ContentType := cctRPNFormula; ACell^.RPNFormulaValue := AFormula; + ChangedCell(ARow, ACol); end; {@@ @@ -1441,6 +1461,7 @@ begin if Result = -1 then result := FWorkbook.AddFont(AFontName, AFontSize, AFontStyle, AFontColor); lCell^.FontIndex := Result; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteFont(ARow, ACol: Cardinal; AFontIndex: Integer); @@ -1453,6 +1474,7 @@ begin lCell := GetCell(ARow, ACol); Include(lCell^.UsedFormattingFields, uffFont); lCell^.FontIndex := AFontIndex; + ChangedCell(ARow, ACol); end else raise Exception.Create(lpInvalidFontIndex); end; @@ -1505,6 +1527,7 @@ begin ACell := GetCell(ARow, ACol); Include(ACell^.UsedFormattingFields, uffTextRotation); ACell^.TextRotation := ARotation; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteUsedFormatting(ARow, ACol: Cardinal; @@ -1514,6 +1537,7 @@ var begin ACell := GetCell(ARow, ACol); ACell^.UsedFormattingFields := AUsedFormatting; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteBackgroundColor(ARow, ACol: Cardinal; @@ -1524,6 +1548,7 @@ begin ACell := GetCell(ARow, ACol); ACell^.UsedFormattingFields := ACell^.UsedFormattingFields + [uffBackgroundColor]; ACell^.BackgroundColor := AColor; + ChangedCell(ARow, ACol); end; { Sets the color of a cell border line. @@ -1535,6 +1560,7 @@ var begin lCell := GetCell(ARow, ACol); lCell^.BorderStyles[ABorder].Color := AColor; + ChangedCell(ARow, ACol); end; { Sets the linestyle of a cell border. @@ -1546,6 +1572,7 @@ var begin lCell := GetCell(ARow, ACol); lCell^.BorderStyles[ABorder].LineStyle := ALineStyle; + ChangedCell(ARow, ACol); end; { Shows the cell borders included in the set ABorders. The borders are drawn @@ -1557,6 +1584,7 @@ begin lCell := GetCell(ARow, ACol); Include(lCell^.UsedFormattingFields, uffBorder); lCell^.Border := ABorders; + ChangedCell(ARow, ACol); end; { Sets the style of a cell border, i.e. line style and line color. @@ -1568,6 +1596,7 @@ var begin lCell := GetCell(ARow, ACol); lCell^.BorderStyles[ABorder] := AStyle; + ChangedCell(ARow, ACol); end; { Sets line style and line color of a cell border. @@ -1580,6 +1609,7 @@ begin lCell := GetCell(ARow, ACol); lCell^.BorderStyles[ABorder].LineStyle := ALineStyle; lCell^.BorderStyles[ABorder].Color := AColor; + ChangedCell(ARow, ACol); end; { Sets the style of all cell border of a cell, i.e. line style and line color. @@ -1592,6 +1622,7 @@ var begin cell := GetCell(ARow, ACol); for b in TsCellBorder do cell^.BorderStyles[b] := AStyles[b]; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteHorAlignment(ARow, ACol: Cardinal; AValue: TsHorAlignment); @@ -1601,6 +1632,7 @@ begin lCell := GetCell(ARow, ACol); lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffHorAlign]; lCell^.HorAlignment := AValue; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteVertAlignment(ARow, ACol: Cardinal; AValue: TsVertAlignment); @@ -1610,6 +1642,7 @@ begin lCell := GetCell(ARow, ACol); lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffVertAlign]; lCell^.VertAlignment := AValue; + ChangedCell(ARow, ACol); end; procedure TsWorksheet.WriteWordWrap(ARow, ACol: Cardinal; AValue: Boolean); @@ -1621,6 +1654,7 @@ begin Include(lCell^.UsedFormattingFields, uffWordwrap) else Exclude(lCell^.UsedFormattingFields, uffWordwrap); + ChangedCell(ARow, ACol); end; function TsWorksheet.FindRow(ARow: Cardinal): PRow; diff --git a/components/fpspreadsheet/fpspreadsheetchart.pas b/components/fpspreadsheet/fpspreadsheetchart.pas index 8629edf64..86346608a 100644 --- a/components/fpspreadsheet/fpspreadsheetchart.pas +++ b/components/fpspreadsheet/fpspreadsheetchart.pas @@ -57,7 +57,6 @@ type public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure LoadFromWorksheetGrid(const AValue: TsWorksheetGrid); procedure LoadPropertiesFromStrings(AXInterval, AYInterval, AXTitle, AYTitle, ATitle: string); public published @@ -194,16 +193,6 @@ begin inherited Destroy; end; -procedure TsWorksheetChartSource.LoadFromWorksheetGrid(const AValue: TsWorksheetGrid); -begin - if AValue = nil then Exit; - - AValue.SaveToWorksheet(FDataWorksheet); - - InvalidateCaches; - Notify; -end; - procedure TsWorksheetChartSource.LoadPropertiesFromStrings(AXInterval, AYInterval, AXTitle, AYTitle, ATitle: string); var diff --git a/components/fpspreadsheet/fpspreadsheetgrid.pas b/components/fpspreadsheet/fpspreadsheetgrid.pas index ddce9c575..347d3fc88 100644 --- a/components/fpspreadsheet/fpspreadsheetgrid.pas +++ b/components/fpspreadsheet/fpspreadsheetgrid.pas @@ -27,9 +27,13 @@ type FHeaderCount: Integer; FFrozenCols: Integer; FFrozenRows: Integer; + FEditText: String; + FLockCount: Integer; + FEditing: Boolean; function CalcAutoRowHeight(ARow: Integer): Integer; function CalcColWidth(AWidth: Single): Integer; function CalcRowHeight(AHeight: Single): Integer; + procedure ChangedCellHandler(ASender: TObject; ARow, ACol: Cardinal); function GetShowGridLines: Boolean; function GetShowHeaders: Boolean; procedure SetFrozenCols(AValue: Integer); @@ -41,10 +45,14 @@ type procedure DefaultDrawCell(ACol, ARow: Integer; var ARect: TRect; AState: TGridDrawState); override; procedure DoPrepareCanvas(ACol, ARow: Integer; AState: TGridDrawState); override; procedure DrawAllRows; override; + procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override; procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override; function GetCellHeight(ACol, ARow: Integer): Integer; function GetCellText(ACol, ARow: Integer): String; + function GetEditText(ACol, ARow: Integer): String; override; procedure Loaded; override; + procedure LoadFromWorksheet(AWorksheet: TsWorksheet); + procedure SetEditText(ACol, ARow: Longint; const AValue: string); override; procedure Setup; property DisplayFixedColRow: Boolean read GetShowHeaders write SetShowHeaders default true; property FrozenCols: Integer read FFrozenCols write SetFrozenCols; @@ -55,15 +63,25 @@ type { public methods } constructor Create(AOwner: TComponent); override; destructor Destroy; override; + procedure BeginUpdate; + procedure EditingDone; override; + procedure EndUpdate; procedure GetSheets(const ASheets: TStrings); - procedure LoadFromWorksheet(AWorksheet: TsWorksheet); - procedure LoadFromSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload; - procedure LoadFromSpreadsheetFile(AFileName: string; AWorksheetIndex: Integer = 0); overload; - procedure SaveToWorksheet(AWorksheet: TsWorksheet); + function GetWorksheetCol(AGridCol: Integer): Cardinal; + function GetWorksheetRow(AGridRow: Integer): Cardinal; + procedure LoadFromSpreadsheetFile(AFileName: string; + AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload; + procedure LoadFromSpreadsheetFile(AFileName: string; + AWorksheetIndex: Integer = 0); overload; + procedure SaveToSpreadsheetFile(AFileName: string; + AOverwriteExisting: Boolean = true); overload; + procedure SaveToSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; + AOverwriteExisting: Boolean = true); overload; procedure SelectSheetByIndex(AIndex: Integer); { public properties } property Worksheet: TsWorksheet read FWorksheet; property Workbook: TsWorkbook read FWorkbook; + property HeaderCount: Integer read FHeaderCount; end; { TsWorksheetGrid } @@ -281,6 +299,12 @@ begin inherited Destroy; end; +{ Suppresses unnecessary repaints. } +procedure TsCustomWorksheetGrid.BeginUpdate; +begin + inc(FLockCount); +end; + // Converts the column width, given in "characters", to pixels // All chars are assumed to have the same width defined by the "0". // Therefore, this calculation is only approximate. @@ -314,6 +338,11 @@ begin Result := round(AHeight / 25.4 * Screen.PixelsPerInch) + 4; end; +procedure TsCustomWorksheetGrid.ChangedCellHandler(ASender: TObject; ARow, ACol:Cardinal); +begin + if FLockCount = 0 then Invalidate; +end; + procedure TsCustomWorksheetGrid.DefaultDrawCell(aCol, aRow: Integer; var aRect: TRect; AState: TGridDrawState); var @@ -511,6 +540,15 @@ begin end; end; +procedure TsCustomWorksheetGrid.DrawFocusRect(aCol, aRow: Integer; ARect: TRect); +begin + Canvas.Pen.Color := clBlack; + Canvas.Pen.Width := 3; + Canvas.Brush.Style := bsClear; + InflateRect(ARect, -1, -1); + Canvas.Rectangle(ARect); +end; + { Draws the cell text. Calls "GetCellText" to determine the text in the cell. Takes care of horizontal and vertical text alignment, text rotation and text wrapping } @@ -681,6 +719,51 @@ begin end; end; +procedure TsCustomWorksheetGrid.EditingDone; +var + oldText: String; + cell: PCell; +begin + if (not EditorShowing) and FEditing then begin + oldText := GetCellText(Col, Row); + if oldText <> FEditText then begin + if FWorksheet = nil then + FWorksheet := TsWorksheet.Create; + cell := FWorksheet.GetCell(Row-FHeaderCount, Col-FHeaderCount); + if FEditText = '' then + cell^.ContentType := cctEmpty + else + if TryStrToFloat(FEditText, cell^.NumberValue) then + cell^.ContentType := cctNumber + else + if TryStrToDateTime(FEditText, cell^.DateTimeValue) then begin + cell^.ContentType := cctDateTime; + if cell^.DateTimeValue < 1.0 then begin + if not (cell^.NumberFormat in [nfShortDateTime, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM]) + then cell^.NumberFormat := nfLongTime; + end else + if frac(cell^.DateTimeValue) = 0 then begin // this is a TDate + if not (cell^.NumberFormat in [nfShortDateTime, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM]) + then cell^.NumberFormat := nfShortDate + end else + cell^.NumberFormat := nfShortDateTime; + end else begin + cell^.UTF8StringValue := FEditText; + cell^.ContentType := cctUTF8String; + end; + FEditText := ''; + end; + inherited EditingDone; + end; + FEditing := false; +end; + +procedure TsCustomWorksheetGrid.EndUpdate; +begin + dec(FLockCount); + if FLockCount = 0 then Invalidate; +end; + { Returns the height (in pixels) of the cell at ACol/ARow. } function TsCustomWorksheetGrid.GetCellHeight(ACol, ARow: Integer): Integer; var @@ -781,6 +864,13 @@ begin end; end; +{ Determines the text to be passed to the cell editor. } +function TsCustomWorksheetGrid.GetEditText(aCol, aRow: Integer): string; +begin + Result := GetCellText(aCol, aRow); + if Assigned(OnGetEditText) then OnGetEditText(Self, aCol, aRow, result); +end; + { Returns a list of worksheets contained in the file. Useful for assigning to user controls like TabControl, Combobox etc. in order to select a sheet. } procedure TsCustomWorksheetGrid.GetSheets(const ASheets: TStrings); @@ -803,6 +893,16 @@ begin Result := FHeaderCount <> 0; end; +function TsCustomWorksheetGrid.GetWorksheetCol(AGridCol: Integer): cardinal; +begin + Result := AGridCol - FHeaderCount; +end; + +function TsCustomWorksheetGrid.GetWorksheetRow(AGridRow: Integer): Cardinal; +begin + Result := AGridRow - FHeaderCount; +end; + procedure TsCustomWorksheetGrid.Loaded; begin inherited; @@ -837,6 +937,13 @@ begin Setup; end; +procedure TsCustomWorksheetGrid.SetEditText(ACol, ARow: Longint; const AValue: string); +begin + FEditText := AValue; + FEditing := true; + inherited SetEditText(aCol, aRow, aValue); +end; + procedure TsCustomWorksheetGrid.Setup; var i: Integer; @@ -882,12 +989,14 @@ begin RowHeights[i] := CalcRowHeight(lRow^.Height); end; end; + Invalidate; end; procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet); begin FWorksheet := AWorksheet; if FWorksheet <> nil then begin + FWorksheet.OnChangeCell := @ChangedCellHandler; ShowHeaders := (soShowHeaders in FWorksheet.Options); ShowGridLines := (soShowGridLines in FWorksheet.Options); if (soHasFrozenPanes in FWorksheet.Options) then begin @@ -904,35 +1013,44 @@ end; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer); begin - FreeAndNil(FWorkbook); - FWorkbook := TsWorkbook.Create; - FWorkbook.ReadFromFile(AFileName, AFormat); - LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); + BeginUpdate; + try + FreeAndNil(FWorkbook); + FWorkbook := TsWorkbook.Create; + FWorkbook.ReadFromFile(AFileName, AFormat); + LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); + finally + EndUpdate; + end; end; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; AWorksheetIndex: Integer); begin - FreeAndNil(FWorkbook); - FWorkbook := TsWorkbook.Create; - FWorkbook.ReadFromFile(AFilename); - LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); + BeginUpdate; + try + FreeAndNil(FWorkbook); + FWorkbook := TsWorkbook.Create; + FWorkbook.ReadFromFile(AFilename); + LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); + finally + EndUpdate; + end; end; -procedure TsCustomWorksheetGrid.SaveToWorksheet(AWorksheet: TsWorksheet); -var - x, y: Integer; - Str: string; +{ Writes the workbook behind the grid to a spreadsheet file. } +procedure TsCustomWorksheetGrid.SaveToSpreadsheetFile(AFileName: String; + AFormat: TsSpreadsheetFormat; AOverwriteExisting: Boolean = true); begin - if AWorksheet = nil then Exit; + if FWorksheet <> nil then + FWorkbook.WriteToFile(AFileName, AFormat, AOverwriteExisting); +end; - { Copy the contents } - for x := 0 to ColCount - 1 do - for y := 0 to RowCount - 1 do - begin - Str := GetCells(x, y); - if Str <> '' then AWorksheet.WriteUTF8Text(y, x, Str); - end; +procedure TsCustomWorksheetGrid.SaveToSpreadsheetFile(AFileName: String; + AOverwriteExisting: Boolean = true); +begin + if FWorksheet <> nil then + FWorkbook.WriteToFile(AFileName, AOverwriteExisting); end; procedure TsCustomWorksheetGrid.SelectSheetByIndex(AIndex: Integer);