diff --git a/components/fpspreadsheet/examples/excel8demo/excel8write.lpr b/components/fpspreadsheet/examples/excel8demo/excel8write.lpr
index 2f30a19f3..d3034e28d 100644
--- a/components/fpspreadsheet/examples/excel8demo/excel8write.lpr
+++ b/components/fpspreadsheet/examples/excel8demo/excel8write.lpr
@@ -52,7 +52,7 @@ begin
lCell^.BackgroundColor := scPURPLE;
lCell^.UsedFormattingFields := [uffBackgroundColor];
- // Word-wrapped long text
+ // Word-wrapped long text in D7
MyWorksheet.WriteUTF8Text(6, 3, 'This is a very, very, very, very long text.');
MyWorksheet.WriteUsedFormatting(6, 3, [uffWordwrap]);
diff --git a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi
index a53fadb58..749b9c68c 100644
--- a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi
+++ b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi
@@ -27,7 +27,6 @@
-
@@ -38,7 +37,7 @@
-
+
@@ -47,7 +46,7 @@
-
+
@@ -59,20 +58,20 @@
-
-
-
+
+
+
-
+
-
-
-
+
+
+
@@ -80,9 +79,9 @@
-
-
-
+
+
+
@@ -138,12 +137,10 @@
-
-
-
+
@@ -156,58 +153,50 @@
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
+
+
+
@@ -220,164 +209,164 @@
-
-
-
+
-
-
-
-
-
+
+
+
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/components/fpspreadsheet/examples/fpsgrid/mainform.lfm b/components/fpspreadsheet/examples/fpsgrid/mainform.lfm
index ce41b2d06..6f884f756 100644
--- a/components/fpspreadsheet/examples/fpsgrid/mainform.lfm
+++ b/components/fpspreadsheet/examples/fpsgrid/mainform.lfm
@@ -72,7 +72,7 @@ object Form1: TForm1
Top = 0
Width = 392
Align = alClient
- Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goThumbTracking, goSmoothScroll, goCellEllipsis]
+ Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goThumbTracking, goSmoothScroll, goCellEllipsis]
TabOrder = 0
TitleStyle = tsNative
end
@@ -132,10 +132,82 @@ object Form1: TForm1
Caption = '&File'
object mnuOpen: TMenuItem
Action = AcOpen
+ Bitmap.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 20000000000000040000640000006400000000000000000000002C86D8002D88
+ D8F72D87D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88
+ D8F72D88D8F72D87D8F72D88D8F72C86D800FFFFFF00FFFFFF00338ED9FBDCF0
+ FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7
+ F3FF74D5F3FF70D3F2FFC2EAF8FF3594DAFFFFFFFF00FFFFFF003594DAF7EFFA
+ FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8
+ F4FF4DD4F3FF40D1F2FFCAF2FBFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FA
+ FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDC
+ F6FF5ED9F4FF4FD5F3FFCCF2FBFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC
+ FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CE
+ D7FF8CC8CFFF86C1C6FFC9D8D6FF3594DAFFC57444E8CA7F53F137A6DAFAFEFF
+ FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5
+ F5FF9EE5F5FF9FE5F4FFDAF3F8FF3594DAFFFDF4EEFFCA8054F935ABDAFAE8F6
+ FBFF70BCE7FF55AAE2FF4DA5E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFD
+ FCFFFEFDFCFFFEFCFBFFFEFEFDFF3594DAFFEFF2E8FFCE8156FF36AADAF2F1FA
+ FDFF94DEF5FF93DCF4FF64BCE9FF3594DAFF3594DAFF3594DAFF3594DAFF3594
+ DAFF3594DAFF3594DAFF3594DAFF3594DAFFFBF6EFFFCC8355FE35AFDAF0F7FC
+ FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEA
+ DBFFFFE9D9FFFFE7D7FFFFE5D2FFFFE2CBFFFFF7F1FFCB8555FE36B3DAF8FDFE
+ FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7
+ D6FFFDE6D4FFFCE4D0FFFBE3CBFFFADCC2FFFEF3E8FFCC8656FE34B4D9D05EC2
+ E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7
+ D5FFFDE5D1FFFAE0CAFFF9DEC4FFF7D9BCFFFDF2E7FFCC8757FEFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4
+ D1FFFBE2CCFFF9DDC4FFF6D7BBFFF3D1AFFFFAEFE4FFCC8758FEFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3
+ CDFFFADFC8FFF7D9BCFFF5E9DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0
+ C7FFF9DCC2FFF5D3B4FFFEF9F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3
+ EAFFFCF2E8FFFAEFE3FFFAF2E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB
+ 92FFD1A06CF5D09E6DF6CC965FDAC479427EB2673C09FFFFFF00
+ }
OnClick = acOpenExecute
end
object mnuSaveAs: TMenuItem
Action = AcSaveAs
+ Bitmap.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000BA6A3600B969
+ 35B5B86935EEB76835FFB56835FFB46734FFB26634FFB06533FFAE6433FFAC63
+ 32FFAA6232FFA96132FFA86031FFA76031FEA66031F1A86131C4BA6A35DEEBC6
+ ADFFEAC5ADFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB
+ F8FFFEFBF8FFFEFBF8FFFEFBF8FFC89A7CFFC79879FFA76031EDBA6B37FEEDCA
+ B3FFE0A27AFFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0
+ 88FF62C088FF62C088FFFDF9F6FFCA8D65FFC99B7CFFA76031FEBB6C38FFEECC
+ B6FFE1A27AFFFEFAF7FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDC
+ C2FFBFDCC2FFBFDCC2FFFDF9F6FFCD9068FFCC9E81FFA86132FFBB6B38FFEFCE
+ B8FFE1A279FFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0
+ 88FF62C088FF62C088FFFDF9F6FFCF936AFFCEA384FFAA6132FFBA6A36FFEFD0
+ BBFFE2A27AFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB
+ F8FFFEFBF8FFFEFBF8FFFEFBF8FFD3966DFFD2A78AFFAB6232FFBB6A36FFF0D2
+ BEFFE2A37AFFE2A37AFFE1A37AFFE2A37BFFE1A37BFFE0A178FFDE9F77FFDD9F
+ 76FFDC9D74FFD99B72FFD89971FFD69970FFD5AB8EFFAD6333FFBB6A36FFF2D5
+ C2FFE3A37AFFE3A37AFFE2A37BFFE2A37BFFE2A47BFFE1A279FFE0A178FFDEA0
+ 77FFDE9E75FFDC9D74FFDA9B73FFD99B73FFDAB095FFAF6433FFBB6A36FFF2D8
+ C5FFE3A47BFFE3A37AFFE3A47AFFE2A47BFFE2A37BFFE1A37BFFE1A279FFDFA0
+ 77FFDE9F76FFDD9E74FFDB9C72FFDC9D74FFDDB59AFFB16534FFBB6B36FFF4D9
+ C7FFE6A67DFFC88C64FFC98D65FFC98E67FFCB926CFFCB926DFFCA9069FFC88C
+ 65FFC88C64FFC88C64FFC88C64FFDA9C74FFE1BA9FFFB36634FFBB6B36FEF4DC
+ C9FFE7A77DFFF9ECE1FFF9ECE1FFF9EDE3FFFCF4EEFFFDFAF7FFFDF7F3FFFAED
+ E5FFF7E7DBFFF7E5D9FFF6E5D8FFDEA077FFE4BEA4FFB46734FFBC6B36FAF5DD
+ CCFFE7A87EFFFAF0E8FFFAF0E8FFC98D66FFFAF0E9FFFDF8F3FFFEFAF8FFFCF4
+ EFFFF9E9DFFFF7E7DBFFF7E5D9FFE0A278FFE7C2A9FFB66835FFBC6B36F0F6DF
+ D0FFE8A87EFFFCF6F1FFFCF6F1FFC88C64FFFAF1E9FFFBF4EEFFFDFAF7FFFDF9
+ F6FFFAF0E8FFF8E8DDFFF7E6DBFFE1A37AFFEFD5C3FFB76935FEBC6B36D8F6DF
+ D1FFE9AA80FFFEFAF6FFFDFAF6FFC88C64FFFBF3EEFFFBF1EAFFFCF6F2FFFEFB
+ F8FFFCF6F1FFF9ECE2FFF8E7DBFFEED0BAFFECD0BDFFBB703EF8BC6B369BF6E0
+ D1FFF7E0D1FFFEFBF8FFFEFBF7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9
+ F6FFFDFAF7FFFBF1EBFFF8E9DFFEECD0BDFBC9895EECB5693563BC6B3671BC6B
+ 3690BC6B36CCBC6B36EEBC6B36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C
+ 39FFBD6E3BFFBB6D3AFFBB6B38EFBB703ECBB6693554FFFFFF00
+ }
OnClick = acSaveAsExecute
end
object MenuItem1: TMenuItem
@@ -143,6 +215,42 @@ object Form1: TForm1
end
object mnuQuit: TMenuItem
Action = AcQuit
+ Bitmap.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D63
+ 9B1619609839145D9562105A92880D5890A4135C92FC0C578FED999999FF7171
+ 71FF545454FF515151FF4F4F4FFF4C4C4CFF4A4A4AFF474747FF454545FF2567
+ 9DFF3274A8FF3D7CAFFF4784B5FF4E8ABAFF3E7EADFF0C578FEAFFFFFF00FFFF
+ FF00585858FFA2A2A2FFA2A2A2FFA3A3A3FFA4A4A4FFA4A4A4FFA5A5A5FF2F6F
+ A5FF78ABD2FF78ABD3FF73A7D1FF69A0CDFF407FAEFF0F5991EAFFFFFF00FFFF
+ FF005C5C5CFFA1A1A1FF3C7340FFA0A1A1FFA3A3A3FFA3A3A3FFA4A4A4FF3674
+ AAFF7DAFD4FF5B9AC9FF5495C7FF5896C8FF4180AEFF135C94EAFFFFFF00FFFF
+ FF00606060FFA0A0A0FF3D7641FF367139FFA2A2A2FFA2A2A2FFA3A3A3FF3D79
+ B0FF82B3D7FF629FCCFF5A9AC9FF5E9BCAFF4381AFFF196098EA37823EFF347E
+ 3BFF317937FF2E7534FF499150FF468F4CFF39733DFFA1A1A1FFA2A2A2FF457E
+ B4FF88B7D9FF67A3CFFF619ECCFF639FCCFF4583B1FF1F649CEA3B8742FF89CB
+ 92FF84C88DFF80C688FF7BC383FF77C17FFF478F4DFF3B743FFFA1A1A1FF4C84
+ BAFF8DBBDBFF6EA8D1FF66A6D1FF5FB4DFFF4785B1FF2569A1EA3E8B46FF8FCE
+ 99FF7DC687FF78C381FF73C07CFF74C07CFF79C281FF49904FFF547F57FF5489
+ BFFF94BFDDFF75ADD4FF63B8E1FF4BD4FFFF428BB8FF2C6EA6EA41904AFF94D2
+ 9FFF91D09AFF8DCD96FF89CB92FF84C88DFF519858FF417C46FF9F9F9FFF5A8E
+ C4FF98C3E0FF7CB3D7FF74AFD6FF5EC4EDFF4B88B3FF3473ABEA44944DFF4291
+ 4BFF3F8D48FF3D8945FF5DA465FF5AA061FF45834BFF9E9E9EFF9E9E9EFF6092
+ C9FF9EC7E2FF83B8DAFF7DB4D7FF7EB3D7FF4F89B4FF3B79B1EAFFFFFF00FFFF
+ FF00777777FF9A9A9AFF3D8A45FF498A4FFF9C9C9CFF9D9D9DFF9D9D9DFF6696
+ CCFFA2CBE3FF89BDDCFF83B9DAFF84B9DAFF518BB5FF437EB6EAFFFFFF00FFFF
+ FF007A7A7AFF999999FF529159FF999A99FF9B9B9BFF9C9C9CFF9C9C9CFF6C9A
+ D0FFA7CEE5FF8FC1DFFF89BDDCFF8BBDDCFF538DB6FF4B84BCEAFFFFFF00FFFF
+ FF007D7D7DFF999999FF999999FF9A9A9AFF9A9A9AFF9B9B9BFF9B9B9BFF6F9D
+ D3FFAAD1E7FFABD1E7FF98C7E1FF91C2DEFF568FB7FF5289C1EAFFFFFF00FFFF
+ FF00808080FF7E7E7EFF7C7C7CFF7A7A7AFF777777FF757575FF727272FF719E
+ D4FF6F9ED6FF87B2DCFFABD3E8FFA9D0E6FF5890B8FF598EC6EAFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00709ED6DB6D9CD4FF85B1DAFF5A91B9FF6093CBEAFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF006D9CD4896A9AD2FB6697CFEE
+ }
OnClick = acQuitExecute
end
end
diff --git a/components/fpspreadsheet/examples/fpsgrid/mainform.lrs b/components/fpspreadsheet/examples/fpsgrid/mainform.lrs
index ca9452d3f..d524c0afe 100644
--- a/components/fpspreadsheet/examples/fpsgrid/mainform.lrs
+++ b/components/fpspreadsheet/examples/fpsgrid/mainform.lrs
@@ -21,186 +21,342 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#210#0#11'ClientWidth'#3#136#1#0#15
+'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Height'#3#210#0#3'Top'#2
+#0#5'Width'#3#136#1#5'Align'#7#8'alClient'#7'Options'#11#15'goFixedVertLine'
- +#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goCo'
- +'lSizing'#15'goThumbTracking'#14'goSmoothScroll'#14'goCellEllipsis'#0#8'TabO'
- +'rder'#2#0#10'TitleStyle'#7#8'tsNative'#0#0#0#0#8'TToolBar'#8'ToolBar1'#4'Le'
- +'ft'#2#0#6'Height'#2#26#3'Top'#2#0#5'Width'#3#144#1#7'Caption'#6#8'ToolBar1'
- +#11'EdgeBorders'#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2#2#0#11'TToolB'
- +'utton'#11'ToolButton1'#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'TToolButton'#11'ToolButton3'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'A'
- +'cQuit'#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'TOpenDi'
- +'alog'#11'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel spread'
- +'sheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenO'
- +'ffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikit'
- +'able_pipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferent'#14'o'
- +'fEnableSizing'#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11'TSaveD'
- +'ialog'#11'SaveDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel sprea'
- +'dsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/Open'
- +'Office spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedi'
- +'a)|*.wikitable_wikimedia'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnabl'
- +'eSizing'#12'ofViewDetail'#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'T'
- +'MenuItem'#7'mnuFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#7'mnuOpen'#6'Acti'
- +'on'#7#6'AcOpen'#7'OnClick'#7#13'acOpenExecute'#0#0#9'TMenuItem'#9'mnuSaveAs'
- +#6'Action'#7#8'AcSaveAs'#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'AcQu'
- +'it'#7'OnClick'#7#13'acQuitExecute'#0#0#0#0#10'TImageList'#10'ImageList1'#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#255#255
- +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goRo'
+ +'wSizing'#11'goColSizing'#15'goThumbTracking'#14'goSmoothScroll'#14'goCellEl'
+ +'lipsis'#0#8'TabOrder'#2#0#10'TitleStyle'#7#8'tsNative'#0#0#0#0#8'TToolBar'#8
+ +'ToolBar1'#4'Left'#2#0#6'Height'#2#26#3'Top'#2#0#5'Width'#3#144#1#7'Caption'
+ +#6#8'ToolBar1'#11'EdgeBorders'#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2
+ +#2#0#11'TToolButton'#11'ToolButton1'#4'Left'#2#1#3'Top'#2#0#6'Action'#7#6'Ac'
+ +'Open'#0#0#11'TToolButton'#11'ToolButton2'#4'Left'#2#24#3'Top'#2#0#6'Action'
+ +#7#8'AcSaveAs'#0#0#11'TToolButton'#11'ToolButton3'#4'Left'#2'4'#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'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192
+ +'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|Libre'
+ +'Office/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_p'
+ +'ipes)|.wikitable_pipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDif'
+ +'ferent'#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|Libre'
+ +'Office/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitab'
+ +'le_wikimedia)|*.wikitable_wikimedia'#7'Options'#11#20'ofExtensionDifferent'
+ +#14'ofEnableSizing'#12'ofViewDetail'#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'mnuFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#7'mnuO'
+ +'pen'#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#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
+ +#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'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#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#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'acSaveAsExecute'#0#0#9'TMenuItem'#9'MenuItem1'#7'Capt'
+ +'ion'#6#1'-'#0#0#9'TMenuItem'#7'mnuQuit'#6'Action'#7#6'AcQuit'#11'Bitmap.Dat'
+ +'a'#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#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#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'acQuitEx'
+ +'ecute'#0#0#0#0#10'TImageList'#10'ImageList1'#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#255#255#0#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'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'f'
+ +'4'#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#0#0#11'TActionList'#11'ActionList1'#4'left'
+ +#3#176#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open...'#10'Image'
+ +'Index'#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcSaveAs'#7'Ca'
+ +'ption'#6#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acSaveAsExecut'
+ +'e'#0#0#7'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2#2#9'OnExe'
+ +'cute'#7#13'acQuitExecute'#0#0#0#0
]);
diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas
index 7b43aadad..e89aa71a3 100755
--- a/components/fpspreadsheet/fpspreadsheet.pas
+++ b/components/fpspreadsheet/fpspreadsheet.pas
@@ -132,7 +132,7 @@ type
{@@ List of possible formatting fields }
TsUsedFormattingField = (uffTextRotation, uffBold, uffBorder, uffBackgroundColor,
- uffNumberFormat, uffWordWrap);
+ uffNumberFormat, uffWordWrap, uffHorAlign, uffVertAlign);
{@@ Describes which formatting fields are active }
@@ -173,6 +173,10 @@ type
TsCellBorders = set of TsCellBorder;
+ {@@ Indicates horizontal and vertical text alignment in cells }
+ TsHorAlignment = (haDefault, haLeft, haCenter, haRight);
+ TsVertAlignment = (vaDefault, vaTop, vaCenter, vaBottom);
+
{@@ Colors in FPSpreadsheet as given by a palette to be compatible with Excel.
However, please note that they are physically written to XLS file as
ABGR (where A is 0) }
@@ -228,6 +232,8 @@ type
{ Formatting fields }
UsedFormattingFields: TsUsedFormattingFields;
TextRotation: TsTextRotation;
+ HorAlignment: TsHorAlignment;
+ VertAlignment: TsVertAlignment;
Border: TsCellBorders;
BackgroundColor: TsColor;
NumberFormat: TsNumberFormat;
@@ -298,6 +304,8 @@ type
procedure WriteTextRotation(ARow, ACol: Cardinal; ARotation: TsTextRotation);
procedure WriteUsedFormatting(ARow, ACol: Cardinal; AUsedFormatting: TsUsedFormattingFields);
procedure WriteBackgroundColor(ARow, ACol: Cardinal; AColor: TsColor);
+ procedure WriteHorAlignment(ARow, ACol: Cardinal; AValue: TsHorAlignment);
+ procedure WriteVertAlignment(ARow, ACol: Cardinal; AValue: TsVertAlignment);
{ Data manipulation methods - For Rows and Cols }
function FindRow(ARow: Cardinal): PRow;
function FindCol(ACol: Cardinal): PCol;
@@ -485,9 +493,11 @@ implementation
uses
Math, StrUtils;
-var
- { Translatable strings }
- lpUnsupportedReadFormat, lpUnsupportedWriteFormat: string;
+{ Translatable strings }
+resourcestring
+ lpUnsupportedReadFormat = 'Tried to read a spreadsheet using an unsupported format';
+ lpUnsupportedWriteFormat = 'Tried to write a spreadsheet using an unsupported format';
+ lpNoValidSpreadsheetFile = '"%s" is not a valid spreadsheet file.';
{@@
Registers a new reader/writer pair for a format
@@ -1193,6 +1203,24 @@ begin
ACell^.BackgroundColor := AColor;
end;
+procedure TsWorksheet.WriteHorAlignment(ARow, ACol: Cardinal; AValue: TsHorAlignment);
+var
+ lCell: PCell;
+begin
+ lCell := GetCell(ARow, ACol);
+ lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffHorAlign];
+ lCell^.HorAlignment := AValue;
+end;
+
+procedure TsWorksheet.WriteVertAlignment(ARow, ACol: Cardinal; AValue: TsVertAlignment);
+var
+ lCell: PCell;
+begin
+ lCell := GetCell(ARow, ACol);
+ lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffVertAlign];
+ lCell^.VertAlignment := AValue;
+end;
+
function TsWorksheet.FindRow(ARow: Cardinal): PRow;
var
LElement: TRow;
@@ -1307,12 +1335,7 @@ end;
constructor TsWorkbook.Create;
begin
inherited Create;
-
FWorksheets := TFPList.Create;
-
- // In the future: add support for translations
- lpUnsupportedReadFormat := 'Tried to read a spreadsheet using an unsupported format';
- lpUnsupportedWriteFormat := 'Tried to write a spreadsheet using an unsupported format';
end;
{@@
@@ -1338,7 +1361,7 @@ var
suffix: String;
begin
Result := True;
- suffix := ExtractFileExt(AFileName);
+ suffix := Lowercase(ExtractFileExt(AFileName));
if suffix = STR_EXCEL_EXTENSION then SheetType := sfExcel8
else if suffix = STR_OOXML_EXCEL_EXTENSION then SheetType := sfOOXML
else if suffix = STR_OPENDOCUMENT_CALC_EXTENSION then SheetType := sfOpenDocument
@@ -1446,7 +1469,8 @@ begin
end
else
ReadFromFile(AFileName, SheetType);
- end;
+ end else
+ raise Exception.CreateFmt(lpNoValidSpreadsheetFile, [AFileName]);
end;
procedure TsWorkbook.ReadFromFileIgnoringExtension(AFileName: string);
@@ -1713,6 +1737,12 @@ begin
begin
if (FFormattingStyles[i].UsedFormattingFields <> AFormat^.UsedFormattingFields) then Continue;
+ if uffHorAlign in AFormat^.UsedFormattingFields then
+ if (FFormattingStyles[i].HorAlignment <> AFormat^.HorAlignment) then Continue;
+
+ if uffVertAlign in AFormat^.UsedFormattingFields then
+ if (FFormattingStyles[i].VertAlignment <> AFormat^.VertAlignment) then Continue;
+
if uffTextRotation in AFormat^.UsedFormattingFields then
if (FFormattingStyles[i].TextRotation <> AFormat^.TextRotation) then Continue;
diff --git a/components/fpspreadsheet/fpspreadsheetgrid.pas b/components/fpspreadsheet/fpspreadsheetgrid.pas
index 35cf90eb4..1e54b2db5 100644
--- a/components/fpspreadsheet/fpspreadsheetgrid.pas
+++ b/components/fpspreadsheet/fpspreadsheetgrid.pas
@@ -3,7 +3,7 @@ fpspreadsheetgrid.pas
Grid component which can load and write data from / to FPSpreadsheet documents
-AUTHORS: Felipe Monteiro de Carvalho
+AUTHORS: Felipe Monteiro de Carvalho, Werner Pamler
}
unit fpspreadsheetgrid;
@@ -190,7 +190,7 @@ end;
// Converts the row height, given in mm, to pixels
function TsCustomWorksheetGrid.CalcRowHeight(AHeight: Single): Integer;
begin
- Result := round(AHeight / 25.4 * Screen.PixelsPerInch);
+ Result := round(AHeight / 25.4 * Screen.PixelsPerInch) + 4;
end;
procedure TsCustomWorksheetGrid.DoPrepareCanvas(ACol, ARow: Integer;
@@ -203,20 +203,35 @@ begin
ts := Canvas.TextStyle;
if FDisplayFixedColRow then begin
// Formatting of row and column headers
- if ARow = 0 then
- ts.Alignment := taCenter
- else
- if ACol = 0 then
+ if ARow = 0 then begin
+ ts.Alignment := taCenter;
+ ts.Layout := tlCenter;
+ end else
+ if ACol = 0 then begin
ts.Alignment := taRightJustify;
+ ts.Layout := tlCenter;
+ end;
end;
if FWorksheet <> nil then begin
r := ARow - FixedRows;
c := ACol - FixedCols;
lCell := FWorksheet.FindCell(r, c);
if lCell <> nil then begin
- // Default alignment of number is right-justify
- if lCell^.ContentType = cctNumber then
- ts.Alignment := taRightJustify;
+ case lCell^.HorAlignment of
+ haDefault: if lCell^.ContentType = cctNumber then
+ ts.Alignment := taRightJustify
+ else
+ ts.Alignment := taLeftJustify;
+ haLeft : ts.Alignment := taLeftJustify;
+ haCenter : ts.Alignment := taCenter;
+ haRight : ts.Alignment := taRightJustify;
+ end;
+ case lCell^.VertAlignment of
+ vaDefault: ts.Layout := tlBottom;
+ vaTop : ts.Layout := tlTop;
+ vaCenter : ts.Layout := tlCenter;
+ vaBottom : ts.layout := tlBottom;
+ end;
// Word wrap?
if (uffWordWrap in lCell^.UsedFormattingFields) then begin
ts.Wordbreak := true;
diff --git a/components/fpspreadsheet/tests/formattests.pas b/components/fpspreadsheet/tests/formattests.pas
index ad5564a50..d8b77cab7 100644
--- a/components/fpspreadsheet/tests/formattests.pas
+++ b/components/fpspreadsheet/tests/formattests.pas
@@ -51,6 +51,8 @@ type
procedure TestWriteReadColWidths;
// Test word wrapping
procedure TestWriteReadWordWrap;
+ // Test alignments
+ procedure TestWriteReadAlignments;
end;
implementation
@@ -323,12 +325,78 @@ begin
if MyCell = nil then
fail('Error in test code. Failed to get non-wrapped cell.');
CheckEquals((uffWordWrap in MyCell^.UsedFormattingFields), false, 'failed to return correct word-wrap flag, cell ' + CellNotation(MyWorksheet,0,0));
- // Finalization
MyWorkbook.Free;
DeleteFile(TempFile);
end;
+procedure TSpreadWriteReadFormatTests.TestWriteReadAlignments;
+const
+ CELLTEXT = 'This is a text.';
+var
+ MyWorksheet: TsWorksheet;
+ MyWorkbook: TsWorkbook;
+ horAlign: TsHorAlignment;
+ vertAlign: TsVertAlignment;
+ row, col: Integer;
+ MyCell: PCell;
+ TempFile: string; //write xls/xml to this file and read back from it
+begin
+ TempFile:=GetTempFileName;
+ {// Not needed: use workbook.writetofile with overwrite=true
+ if fileexists(TempFile) then
+ DeleteFile(TempFile);
+ }
+ // Write out all test values: HorAlignments along columns, VertAlignments along rows
+ MyWorkbook := TsWorkbook.Create;
+ MyWorkSheet:= MyWorkBook.AddWorksheet(FmtNumbersSheet);
+
+ row := 0;
+ for horAlign in TsHorAlignment do begin
+ col := 0;
+ for vertAlign in TsVertAlignment do begin
+ MyWorksheet.WriteUTF8Text(row, col, CELLTEXT);
+ MyWorksheet.WriteHorAlignment(row, col, horAlign);
+ MyWorksheet.WriteVertAlignment(row, col, vertAlign);
+ MyCell := MyWorksheet.FindCell(row, col);
+ if MyCell = nil then
+ fail('Error in test code. Failed to get cell.');
+ CheckEquals(vertAlign = MyCell^.VertAlignment, true,
+ 'Test unsaved word vertical alignment, cell ' + CellNotation(MyWorksheet,0,0));
+ CheckEquals(horAlign = MyCell^.HorAlignment, true,
+ 'Test unsaved word horizontal alignment, cell ' + CellNotation(MyWorksheet,0,0));
+ inc(col);
+ end;
+ inc(row);
+ end;
+ MyWorkBook.WriteToFile(TempFile,sfExcel8,true);
+ MyWorkbook.Free;
+
+ // Open the spreadsheet, as biff8
+ MyWorkbook := TsWorkbook.Create;
+ MyWorkbook.ReadFromFile(TempFile, sfExcel8);
+ MyWorksheet:=GetWorksheetByName(MyWorkBook, FmtNumbersSheet);
+ if MyWorksheet=nil then
+ fail('Error in test code. Failed to get named worksheet');
+ for row := 0 to MyWorksheet.GetLastRowNumber do
+ for col := 0 to MyWorksheet.GetLastColNumber do begin
+ MyCell := MyWorksheet.FindCell(row, col);
+ if MyCell = nil then
+ fail('Error in test code. Failed to get cell.');
+ vertAlign := TsVertAlignment(col);
+ if vertAlign = vaDefault then vertAlign := vaBottom;
+ CheckEquals(vertAlign = MyCell^.VertAlignment, true,
+ 'Test saved vertical alignment mismatch, cell '+CellNotation(MyWorksheet,Row,Col));
+ horAlign := TsHorAlignment(row);
+ CheckEquals(horAlign = MyCell^.HorAlignment, true,
+ 'Test saved horizontal mismatch, cell '+CellNotation(MyWorksheet,Row,Col));
+ end;
+ MyWorkbook.Free;
+
+ DeleteFile(TempFile);
+end;
+
+
initialization
RegisterTest(TSpreadWriteReadFormatTests);
InitSollFmtData;
diff --git a/components/fpspreadsheet/xlsbiff8.pas b/components/fpspreadsheet/xlsbiff8.pas
index 6beae8cde..38440deb9 100755
--- a/components/fpspreadsheet/xlsbiff8.pas
+++ b/components/fpspreadsheet/xlsbiff8.pas
@@ -66,6 +66,8 @@ type
TXFRecordData = class
public
FormatIndex: Integer;
+ HorAlignment: TsHorAlignment;
+ VertAlignment: TsVertAlignment;
WordWrap: Boolean;
Borders: TsCellBorders;
{
@@ -159,7 +161,8 @@ type
procedure WriteColInfo(AStream: TStream; ASheet: TsWorksheet; ACol: PCol);
procedure WriteXF(AStream: TStream; AFontIndex: Word;
AFormatIndex: Word; AXF_TYPE_PROT, ATextRotation: Byte; ABorders: TsCellBorders;
- AddWordWrap: Boolean = false; AddBackground: Boolean = false;
+ AHorAlignment: TsHorAlignment = haDefault; AVertAlignment: TsVertAlignment = vaDefault;
+ AWordWrap: Boolean = false; AddBackground: Boolean = false;
ABackgroundColor: TsColor = scSilver);
public
// constructor Create;
@@ -289,9 +292,18 @@ const
MASK_XF_USED_ATTRIB_BACKGROUND = $40;
MASK_XF_USED_ATTRIB_CELL_PROTECTION = $80;
+ { XF HORIZONTAL ALIGN }
+ MASK_XF_HOR_ALIGN_LEFT = $01;
+ MASK_XF_HOR_ALIGN_CENTER = $02;
+ MASK_XF_HOR_ALIGN_RIGHT = $03;
+ MASK_XF_HOR_ALIGN_FILLED = $04;
+ MASK_XF_HOR_ALIGN_JUSTIFIED = $05; // BIFF4-BIFF8
+ MASK_XF_HOR_ALIGN_CENTERED_SELECTION= $06; // BIFF4-BIFF8
+ MASK_XF_HOR_ALIGN_DISTRIBUTED = $07; // BIFF8
+
{ XF_VERT_ALIGN }
MASK_XF_VERT_ALIGN_TOP = $00;
- MASK_XF_VERT_ALIGN_CENTRED = $10;
+ MASK_XF_VERT_ALIGN_CENTER = $10;
MASK_XF_VERT_ALIGN_BOTTOM = $20;
MASK_XF_VERT_ALIGN_JUSTIFIED = $30;
@@ -300,6 +312,12 @@ const
XF_ROTATION_90_DEGREE_COUNTERCLOCKWISE = 90;
XF_ROTATION_90_DEGREE_CLOCKWISE = 180;
+ { XF CELL BORDER }
+ MASK_XF_BORDER_LEFT = $0000000F;
+ MASK_XF_BORDER_RIGHT = $000000F0;
+ MASK_XF_BORDER_TOP = $00000F00;
+ MASK_XF_BORDER_BOTTOM = $0000F000;
+
{ XF record constants }
MASK_XF_TYPE_PROT = $0007;
MASK_XF_TYPE_PROT_PARENT = $FFF0;
@@ -308,6 +326,7 @@ const
MASK_XF_VERT_ALIGN = $70;
MASK_XF_TEXTWRAP = $08;
+
{
Exported functions
}
@@ -396,6 +415,8 @@ var
lBorders: TsCellBorders;
lAddBackground: Boolean;
lBackgroundColor: TsColor;
+ lHorAlign: TsHorAlignment;
+ lVertAlign: TsVertAlignment;
lWordWrap: Boolean;
fmt: String;
begin
@@ -407,6 +428,8 @@ begin
lFormatIndex := 0; //General format (one of the built-in number formats)
lTextRotation := XF_ROTATION_HORIZONTAL;
lBorders := [];
+ lHorAlign := FFormattingStyles[i].HorAlignment;
+ lVertAlign := FFormattingStyles[i].VertAlignment;
lBackgroundColor := FFormattingStyles[i].BackgroundColor;
// Now apply the modifications.
@@ -488,8 +511,8 @@ begin
lWordwrap := (uffWordwrap in FFormattingStyles[i].UsedFormattingFields);
// And finally write the style
- WriteXF(AStream, lFontIndex, lFormatIndex, 0, lTextRotation, lBorders, lWordwrap,
- lAddBackground, lBackgroundColor);
+ WriteXF(AStream, lFontIndex, lFormatIndex, 0, lTextRotation, lBorders,
+ lHorAlign, lVertAlign, lWordwrap, lAddBackground, lBackgroundColor);
end;
end;
@@ -648,6 +671,7 @@ begin
WriteXF(AStream, 0, 0, 0, XF_ROTATION_90_DEGREE_CLOCKWISE, []);
// XF18 - Bold
WriteXF(AStream, 1, 0, 0, XF_ROTATION_HORIZONTAL, []);
+
// Add all further non-standard/built-in formatting styles
ListAllFormattingStyles(AData);
WriteXFFieldsForFormattingStyles(AStream);
@@ -1525,7 +1549,8 @@ end;
*******************************************************************}
procedure TsSpreadBIFF8Writer.WriteXF(AStream: TStream; AFontIndex: Word;
AFormatIndex: Word; AXF_TYPE_PROT, ATextRotation: Byte; ABorders: TsCellBorders;
- AddWordWrap: Boolean = false; AddBackground: Boolean = false;
+ AHorAlignment: TsHorAlignment = haDefault; AVertAlignment: TsVertAlignment = vaDefault;
+ AWordWrap: Boolean = false; AddBackground: Boolean = false;
ABackgroundColor: TsColor = scSilver);
var
XFOptions: Word;
@@ -1551,8 +1576,19 @@ begin
AStream.WriteWord(WordToLE(XFOptions));
{ Alignment and text break }
- XFAlignment := MASK_XF_VERT_ALIGN_BOTTOM;
- if AddWordWrap then
+ XFAlignment := 0;
+ case AHorAlignment of
+ haLeft : XFAlignment := XFAlignment or MASK_XF_HOR_ALIGN_LEFT;
+ haCenter : XFAlignment := XFAlignment or MASK_XF_HOR_ALIGN_CENTER;
+ haRight : XFAlignment := XFAlignment or MASK_XF_HOR_ALIGN_RIGHT;
+ end;
+ case AVertAlignment of
+ vaTop : XFAlignment := XFAlignment or MASK_XF_VERT_ALIGN_TOP;
+ vaCenter : XFAlignment := XFAlignment or MASK_XF_VERT_ALIGN_CENTER;
+ vaBottom : XFAlignment := XFAlignment or MASK_XF_VERT_ALIGN_BOTTOM;
+ else XFAlignment := XFAlignment or MASK_XF_VERT_ALIGN_BOTTOM;
+ end;
+ if AWordWrap then
XFAlignment := XFAlignment or MASK_XF_TEXTWRAP;
AStream.WriteByte(XFAlignment);
@@ -2058,6 +2094,10 @@ begin
if Assigned(lCell) then begin
XFData := TXFRecordData(FXFList.Items[XFIndex]);
+ // Alignment
+ lCell^.HorAlignment := XFData.HorAlignment;
+ lCell^.VertAlignment := XFData.VertAlignment;
+
// Word wrap
if XFData.WordWrap then
Include(lCell^.UsedFormattingFields, uffWordWrap)
@@ -2395,6 +2435,7 @@ type
var
lData: TXFRecordData;
xf: TXFRecord;
+ b: Byte;
begin
AStream.ReadBuffer(xf, SizeOf(xf));
@@ -2403,6 +2444,20 @@ begin
// Format index
lData.FormatIndex := WordLEToN(xf.FormatIndex);
+ // Horizontal text alignment
+ b := xf.Align_TextBreak AND MASK_XF_HOR_ALIGN;
+ if (b <= ord(High(TsHorAlignment))) then
+ lData.HorAlignment := TsHorAlignment(b)
+ else
+ lData.HorAlignment := haDefault;
+
+ // Vertical text alignment
+ b := (xf.Align_TextBreak AND MASK_XF_VERT_ALIGN) shr 4;
+ if (b + 1 <= ord(high(TsVertAlignment))) then
+ lData.VertAlignment := tsVertAlignment(b + 1) // + 1 due to vaDefault
+ else
+ lData.VertAlignment := vaDefault;
+
// Word wrap
lData.WordWrap := (xf.Align_TextBreak and MASK_XF_TEXTWRAP) <> 0;
@@ -2411,13 +2466,13 @@ begin
lData.Borders := [];
// the 4 masked bits encode the line style of the border line. 0 = no line
// We ignore the line style here. --> check against "no line"
- if xf.Border_Background_1 and $0000000F <> 0 then
+ if xf.Border_Background_1 and MASK_XF_BORDER_LEFT <> 0 then
Include(lData.Borders, cbWest);
- if xf.Border_Background_1 and $000000F0 <> 0 then
+ if xf.Border_Background_1 and MASK_XF_BORDER_RIGHT <> 0 then
Include(lData.Borders, cbEast);
- if xf.Border_Background_1 and $00000F00 <> 0 then
+ if xf.Border_Background_1 and MASK_XF_BORDER_TOP <> 0 then
Include(lData.Borders, cbNorth);
- if xf.Border_Background_1 and $0000F000 <> 0 then
+ if xf.Border_Background_1 and MASK_XF_BORDER_BOTTOM <> 0 then
Include(lData.Borders, cbSouth);
// Add the XF to the list
diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas
index 0c54c269d..7ea6f9d35 100644
--- a/components/fpspreadsheet/xlscommon.pas
+++ b/components/fpspreadsheet/xlscommon.pas
@@ -862,19 +862,22 @@ begin
end;
{ This function checks whether the format string corresponds to exponential
- formatting and determines the number decimals }
+ formatting and determines the number of decimals }
function IsExpNumberFormat(s: String; out Decimals: Word): Boolean;
var
i, p, pe: Integer;
begin
+ Result := false;
Decimals := 0;
+ if SameText(s, 'General') then
+ exit;
+
// Check for a valid format string
try
FormatDateTime(s, 1.0);
except
on EConvertError do begin
- Result := false;
exit;
end;
end;