fpspreadsheet: Basic support for cell comments in fpspreadsheet.pas, fpspreadsheetgrid.pas and fpsactions.pas. Update chm help file.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3912 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2015-01-30 14:48:51 +00:00
parent 6869583b9a
commit cca611b21b
10 changed files with 415 additions and 57 deletions

View File

@ -1,19 +1,19 @@
object MainForm: TMainForm object MainForm: TMainForm
Left = 495 Left = 495
Height = 600 Height = 621
Top = 132 Top = 132
Width = 929 Width = 940
Caption = 'demo_ctrls' Caption = 'demo_ctrls'
ClientHeight = 580 ClientHeight = 601
ClientWidth = 929 ClientWidth = 940
Menu = MainMenu Menu = MainMenu
ShowHint = True ShowHint = True
LCLVersion = '1.5' LCLVersion = '1.5'
object WorkbookTabControl: TsWorkbookTabControl object WorkbookTabControl: TsWorkbookTabControl
Left = 0 Left = 0
Height = 497 Height = 518
Top = 83 Top = 83
Width = 671 Width = 682
TabIndex = 0 TabIndex = 0
Tabs.Strings = ( Tabs.Strings = (
'Sheet1' 'Sheet1'
@ -23,9 +23,9 @@ object MainForm: TMainForm
WorkbookSource = WorkbookSource WorkbookSource = WorkbookSource
object WorksheetGrid: TsWorksheetGrid object WorksheetGrid: TsWorksheetGrid
Left = 2 Left = 2
Height = 472 Height = 493
Top = 23 Top = 23
Width = 667 Width = 678
FrozenCols = 0 FrozenCols = 0
FrozenRows = 0 FrozenRows = 0
ReadFormulas = False ReadFormulas = False
@ -37,7 +37,7 @@ object MainForm: TMainForm
Font.Color = clBlack Font.Color = clBlack
Font.Height = -13 Font.Height = -13
Font.Name = 'Arial' Font.Name = 'Arial'
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goEditing, goThumbTracking, goDblClickAutoSize, goSmoothScroll, goHeaderHotTracking] Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goEditing, goThumbTracking, goDblClickAutoSize, goSmoothScroll, goHeaderHotTracking, goCellHints]
ParentFont = False ParentFont = False
RowCount = 101 RowCount = 101
TabOrder = 1 TabOrder = 1
@ -48,8 +48,8 @@ object MainForm: TMainForm
end end
end end
object InspectorTabControl: TTabControl object InspectorTabControl: TTabControl
Left = 676 Left = 687
Height = 497 Height = 518
Top = 83 Top = 83
Width = 253 Width = 253
OnChange = InspectorTabControlChange OnChange = InspectorTabControlChange
@ -65,7 +65,7 @@ object MainForm: TMainForm
Visible = False Visible = False
object Inspector: TsSpreadsheetInspector object Inspector: TsSpreadsheetInspector
Left = 2 Left = 2
Height = 472 Height = 493
Top = 23 Top = 23
Width = 249 Width = 249
Align = alClient Align = alClient
@ -111,8 +111,8 @@ object MainForm: TMainForm
end end
end end
object Splitter1: TSplitter object Splitter1: TSplitter
Left = 671 Left = 682
Height = 497 Height = 518
Top = 83 Top = 83
Width = 5 Width = 5
Align = alRight Align = alRight
@ -122,7 +122,7 @@ object MainForm: TMainForm
Left = 0 Left = 0
Height = 26 Height = 26
Top = 24 Top = 24
Width = 929 Width = 940
AutoSize = True AutoSize = True
ButtonHeight = 26 ButtonHeight = 26
ButtonWidth = 24 ButtonWidth = 24
@ -332,7 +332,7 @@ object MainForm: TMainForm
CellFormatItem = cfiFontName CellFormatItem = cfiFontName
WorkbookSource = WorkbookSource WorkbookSource = WorkbookSource
DropDownCount = 24 DropDownCount = 24
ItemIndex = 76 ItemIndex = 89
TabOrder = 0 TabOrder = 0
Text = 'Arial' Text = 'Arial'
end end
@ -390,7 +390,7 @@ object MainForm: TMainForm
Left = 0 Left = 0
Height = 24 Height = 24
Top = 0 Top = 0
Width = 929 Width = 940
AutoSize = True AutoSize = True
ButtonHeight = 24 ButtonHeight = 24
ButtonWidth = 24 ButtonWidth = 24
@ -422,7 +422,7 @@ object MainForm: TMainForm
Style = tbsDivider Style = tbsDivider
end end
object ToolButton2: TToolButton object ToolButton2: TToolButton
Left = 326 Left = 403
Top = 0 Top = 0
Action = AcFileExit Action = AcFileExit
end end
@ -505,12 +505,35 @@ object MainForm: TMainForm
Caption = 'ToolButton49' Caption = 'ToolButton49'
Style = tbsDivider Style = tbsDivider
end end
object TbCommentAdd: TToolButton
Left = 326
Top = 0
Action = AcCommentNew
end
object TbCommentDelete: TToolButton
Left = 350
Top = 0
Action = AcCommentEdit
end
object TbCommentEdit: TToolButton
Left = 374
Top = 0
Action = AcCommentDelete
end
object ToolButton52: TToolButton
Left = 398
Height = 24
Top = 0
Width = 5
Caption = 'ToolButton52'
Style = tbsDivider
end
end end
object ToolBar3: TToolBar object ToolBar3: TToolBar
Left = 0 Left = 0
Height = 28 Height = 28
Top = 50 Top = 50
Width = 929 Width = 940
AutoSize = True AutoSize = True
Caption = 'ToolBar3' Caption = 'ToolBar3'
Constraints.MinHeight = 28 Constraints.MinHeight = 28
@ -541,7 +564,7 @@ object MainForm: TMainForm
Left = 144 Left = 144
Height = 24 Height = 24
Top = 0 Top = 0
Width = 785 Width = 796
Align = alClient Align = alClient
BorderSpacing.Bottom = 2 BorderSpacing.Bottom = 2
TabOrder = 1 TabOrder = 1
@ -560,7 +583,7 @@ object MainForm: TMainForm
Left = 0 Left = 0
Height = 5 Height = 5
Top = 78 Top = 78
Width = 929 Width = 940
Align = alTop Align = alTop
ResizeAnchor = akTop ResizeAnchor = akTop
end end
@ -1372,12 +1395,36 @@ object MainForm: TMainForm
CopyItem = ciFormula CopyItem = ciFormula
CopyMode = cmPaste CopyMode = cmPaste
end end
object AcCommentNew: TsCellCommentAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = ccmNew
Caption = 'New comment'
Hint = 'New comment'
ImageIndex = 54
end
object AcCommentEdit: TsCellCommentAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = ccmEdit
Caption = 'Edit comment...'
Hint = 'Edit comment'
ImageIndex = 56
end
object AcCommentDelete: TsCellCommentAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = ccmDelete
Caption = 'Delete comment'
Hint = 'Delete comment'
ImageIndex = 55
end
end end
object ImageList: TImageList object ImageList: TImageList
left = 176 left = 176
top = 312 top = 312
Bitmap = { Bitmap = {
4C69400000001000000010000000003F9300003F9300003F9300003F9424003F 4C69430000001000000010000000003F9300003F9300003F9300003F9424003F
948A003E93CC004095CC004095CC004095CC004095CC004095CC004095CC0040 948A003E93CC004095CC004095CC004095CC004095CC004095CC004095CC0040
95CC004095CC00409599003F9400003F9300003F9324003F938A0E4B9CD33F76 95CC004095CC00409599003F9400003F9300003F9324003F938A0E4B9CD33F76
C0EC5D90D4FF3365A9FFA0A0A0FFA9A9A9FFA9A9A9FFAAAAAAFFACACACFFAEAE C0EC5D90D4FF3365A9FFA0A0A0FFA9A9A9FFA9A9A9FFAAAAAAFFACACACFFAEAE
@ -2785,39 +2832,39 @@ object MainForm: TMainForm
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000088CC610088CC810088
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF CC810088CC810088CC810088CC810088CC810088CC810088CC810088CC810088
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF CC810088CC610087CB00FFFFFF00FFFFFF00FFFFFF000087CA8388DCF4FF60C0
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF E9FF5FBFEAFF80D3F4FF9CE3FDFFA2E6FFFFA2E6FFFFA2E6FFFFA2E6FFFFA6EA
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FFFF0087CA830087CA00FFFFFF00FFFFFF00FFFFFF000085C885ACF1FFFFABEF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FEFF95E2F8FF6EC9EDFF48A8D9FF98DCFEFF98DCFEFF98DCFEFF98DCFEFFA1E5
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0034B4D9D05EC2E1FA60C3E2FA60C3 FFFF0085C8850085C800FFFFFF00FFFFFF00FFFFFF000084C587A9EEFDFFA4E9
E2FA60C3E2FA5FC3E2FA3CB6DBDD2CB2D8162CB2D80F2CB2D80F2CB2D80F2CB2 FCFFA4E9FCFFAAEEFDFF42A1D1FF97DBFDFF97DBFDFF97DBFDFF97DBFDFF9FE3
D80F2CB3D80F2CB3D804FFFFFF00FFFFFF0036B3DAF8FDFEFEFFFEFFFFFFFEFE FEFF0084C5870084C500FFFFFF00FFFFFF00FFFFFF000082C28AA6EBFCFFA1E6
FFFFFDFEFFFFFEFFFFFFEAF7FBFF6BC7E4F96BC7E3F86BC7E3F86BC7E3F879CD FBFFA1E6FBFFA6EBFCFF3C9DCFFF96DAFCFF96DAFCFF96DAFCFF96DAFCFF9EE2
E6F774CAE5E132B1D956FFFFFF00FFFFFF0035AFDAF0F7FCFEFF8EE4F8FF91DE FDFF0082C28A0082C200FFFFFF00FFFFFF00FFFFFF00007FBF8DA3E8FBFF9DE3
F5FF9FE0F5FFACE1F6FFEFFBFEFFF4FDFEFFF3FCFEFFF1FCFEFFEFFBFEFFEEFB F9FF9DE3F9FFA3E8FBFF3594C5FF94D8FAFF94D8FAFF94D8FAFF94D8FAFF9BDF
FEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036AADAF2F1FAFDFF94DEF5FF93DC FCFF007FBF8D007FBE00FFFFFF00FFFFFF00FFFFFF00007DBB909EE5F9FF98DF
F4FF81D5F2FF6ACAEDFF6CCBEAFF85D3EFFF80D2EFFF7AD0EFFF76CFEEFF72CF F6FF98DFF6FF9EE5F9FF3290C0FF92D6F8FF92D6F8FF92D6F8FF92D6F8FF99DD
EEFFE9F7FBFF34AEDAF3FFFFFF00FFFFFF0035ABDAFAE8F6FBFF94D4EFFF88CE FAFF007DBB90007DBB33FFFFFF00FFFFFF00FFFFFF00007BB8949BE1F7FF94DB
EEFF73C1E9FFC9E9F6FFF2FCFEFFF3FCFEFFF2FCFEFFF0FCFEFFEFFBFEFFEEFB F4FF94DBF4FF9BE1F7FF308DBCFF90D4F6FF90D4F6FF90D4F6FF90D4F6FF97DB
FEFFFEFFFFFF36ABDAF7FFFFFF00FFFFFF0037A6DAFAFEFFFFFFF8FDFFFFF6FD F9FFFEFEFDFF007BB894FFFFFF00FFFFFF00FFFFFF000078B49797DEF6FF90D8
FFFFF5FCFFFFF3FCFEFFD8F6FCFF94E6F8FF85E3F7FF76DFF6FF68DBF5FF5CD8 F2FF90D8F2FF97DEF6FF2D89B7FF8FD3F5FF8FD3F5FF8FD3F5FF8FD3F5FF95D9
F4FFD7F4FCFF35A4DAF7FFFFFF00FFFFFF0036A1DAF9F6FCFEFFC8F2FCFFB9EF F8FFF5F5EEFF0078B497FFFFFF00FFFFFF00FFFFFF000076B09B92DAF4FF8BD4
FBFFACECFAFF9CE8F9FF8BE3F7FF7CE0F6FF6CDCF6FF5DD9F5FF4FD6F4FF44D3 F0FF8BD4F0FF92DAF4FF2B85B3FF8DD1F3FF8DD1F3FF8DD1F3FF8DD1F3FF93D7
F3FFD0F3FCFF359FDAF7FFFFFF00FFFFFF00369ADAF8F2FAFDFFB3EDFAFFA4E9 F6FFEBEBDDFF0076B09BFFFFFF00FFFFFF00FFFFFF000073AC9E8ED6F2FF87D0
F9FF95E6F8FF85E2F7FF76DEF6FF65DBF5FF57D7F4FF49D4F3FF3BD1F2FF30CE EDFF87D0EDFF8ED6F2FF2882AFFF8BCFF1FF8BCFF1FF8BCFF1FF8BCFF1FF91D5
F1FFCCF2FBFF3598DAF7FFFFFF00FFFFFF003594DAF7EFFAFEFFA1E9F9FF91E5 F5FFFEC941FF0073AC9EFFFFFF00FFFFFF00FFFFFF00006FA7A48AD3F0FF82CD
F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0F2FF2ECDF1FF26CB EBFF82CDEBFF8AD3F0FF267EABFF8ACEF0FF8ACEF0FF8ACEF0FF8ACEF0FF8FD3
F0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00338ED9E6DCF0FAF0A7DDF4FD9EDB F4FFF4B62EFF006FA7A4FFFFFF00FFFFFF00FFFFFF00006699B287D1EFFF7FCA
F4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2F1FF6CD0F1FF69CF E9FF7FCAE9FF87D0EFFF267DA9FF8DD1F3FF8DD1F3FF8DD1F3FF8DD1F3FF90D4
F1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF002C86D8702D88D8A62D87D8EA2D88 F5FF006699B200679B3EFFFFFF00FFFFFF00FFFFFF00005E8D8E3591BDF169B8
D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87 DDFA81CBECFF84CEEEFF005C8BEF005D8CBE005D8CBE005D8CBE005D8CBE005D
D8F72D88D8F12C86D893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 8CBE005E8D8E00669900FFFFFF00FFFFFF00FFFFFF00005D8C00006599500064
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 97991C7AA9C052A5CDE0005B89C1005B8900005B8900005B8900005B8900005B
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 8900005D8C0000669900FFFFFF00FFFFFF00FFFFFF00005D8C00006497000062
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 9300005E8E30005C8C7C0059879200598700005B8900005B8900005B8900005B
FF00FFFFFF00FFFFFF00FFFFFF00BC6B3671BC6B3690BC6B36CCBC6B36EEBC6B 8900005D8C0000669900FFFFFF00BC6B3671BC6B3690BC6B36CCBC6B36EEBC6B
36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C39FFBD6E3BFFBB6D3AFFBB6B 36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C39FFBD6E3BFFBB6D3AFFBB6B
38EFBB703ECBB6693554FFFFFF00BC6B369BF6E0D1FFF7E0D1FFFEFBF8FFFEFB 38EFBB703ECBB6693554FFFFFF00BC6B369BF6E0D1FFF7E0D1FFFEFBF8FFFEFB
F7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9F6FFFDFAF7FFFBF1EBFFF8E9 F7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9F6FFFDFAF7FFFBF1EBFFF8E9
@ -3105,7 +3152,103 @@ object MainForm: TMainForm
98FF206398FFC98F67FFFCF3ECFFFAF1E8FFFAF0E7FFFBF1E9FFFBF2EAFFFBF2 98FF206398FFC98F67FFFCF3ECFFFAF1E8FFFAF0E7FFFBF1E9FFFBF2EAFFFBF2
EAFFFBF2EBFFFDF4EEFFCA8054F9FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF EAFFFBF2EBFFFDF4EEFFCA8054F9FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00C57342C1C67545E6C87545FEC77545F3C87545F3C77545F3C775 FF00FFFFFF00C57342C1C67545E6C87545FEC77545F3C87545F3C77545F3C775
45F3C87546F4C57444E8CA7F53F1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 45F3C87546F4C57444E8CA7F53F1000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000026EB628026EB669026EB679026E
B679026EB679026EB679026EB679026EB679026EB679026EB679026EB679026E
B679026EB669026EB6280000000000000000026DB46BC1E3F1D9E6FBFFFFE5FA
FFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE4FAFFFFE4FAFFFFE5FA
FFFFBDE2F1D9026DB46B0000000000000000026BB17EE5FAFFFFD9F4FFFFD9F4
FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4
FFFFE0F8FFFF026BB17E0000000000000000026AAE81E0F9FFFFD4F2FFFFD4F2
FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2
FFFFD9F5FFFF026AAE8100000000000000000268AB84DCF7FFFFCFF0FFFFCFF0
FFFFCFF0FFFFC2EDFCFFA8E8F4FF91E3EDFF84E0E9FF7CDEE7FF7CDEE7FF84E0
E9FF9CE6EFFF0268AB8400000000000000000266A788D8F4FFFFCCEEFFFFC2EC
FCFF9DE5F1FF85E0EAFF82E0E9FF82E0E9FF82E0E9FF82E0E9FF82E0E9FF82E0
E9FF8AE2EBFF0266A78800000000000000000264A48CD6F3FFFFB6EBF9FF94E4
F0FF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF45C05FFF2DB42FFF45C0
5FFF91E4EFFF0264A48C00000000000000000261A090C1EFFBFF9EE7F4FF9DE6
F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF2FB130FF75EE64FF2FB1
30FF9DE6F4FF0261A0900000000000000000025F9C8191D0E6E1B0ECF9FFAEEB
F9FFADEBF9FFACEBF9FFABEAF9FF4EBB63FF30AC31FF30AC31FF66EB55FF30AC
31FF26A529F90D8C27CD0000000000000000025C9832025C9785025C9799025C
9799B7EDFDFF025C9799025C97990E8D13EB52E741FF52E741FF52E741FF52E7
41FF52E741FF0F9207D600000000000000000000000000000000000000000355
8BA603558BA603568D39035993020E8D00990E8C00CC0E8C00CC3DE22CFF0E8C
00CC0E8C00CC0E8D00990000000000000000000000000000000000000000034D
7DB5034E7F3D000000000000000000000000000000000C8300CC2BDF1AFF0C83
00CC000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000066D0099056900CC066D
0099000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000026EB628026EB669026EB679026E
B679026EB679026EB679026EB679026EB679026EB679026EB679026EB679026E
B679026EB669026EB6280000000000000000026DB46BC1E3F1D9E6FBFFFFE5FA
FFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE4FAFFFFE4FAFFFFE5FA
FFFFBDE2F1D9026DB46B0000000000000000026BB17EE5FAFFFFD9F4FFFFD9F4
FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4
FFFFE0F8FFFF026BB17E0000000000000000026AAE81E0F9FFFFD4F2FFFFD4F2
FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2
FFFFD9F5FFFF026AAE8100000000000000000268AB84DCF7FFFFCFF0FFFFCFF0
FFFFCFF0FFFFC2EDFCFFA8E8F4FF91E3EDFF84E0E9FF7CDEE7FF7CDEE7FF84E0
E9FF9CE6EFFF0268AB8400000000000000000266A788D8F4FFFFCCEEFFFFC2EC
FCFF9DE5F1FF85E0EAFF82E0E9FF82E0E9FF82E0E9FF82E0E9FF82E0E9FF82E0
E9FF8AE2EBFF0266A78800000000000000000264A48CD6F3FFFFB6EBF9FF94E4
F0FF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3
EEFF91E4EFFF0264A48C00000000000000000261A090C1EFFBFF9EE7F4FF9DE6
F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6
F4FF9DE6F4FF0261A0900000000000000000025F9C8191D0E6E1B0ECF9FFAEEB
F9FFADEBF9FFACEBF9FFABEAF9FF445DC7FF222EB7FF222EB7FF222EB7FF222E
B7FF1824B2F90018A3CD0000000000000000025C9832025C9785025C9799025C
9799B7EDFDFF025C9799025C9799000C97EB5E5EF7FF5E5EF7FF5E5EF7FF5E5E
F7FF5E5EF7FF000498D600000000000000000000000000000000000000000355
8BA603558BA603568D390359930200008499000080CC000080CC000080CC0000
80CC000080CC000084990000000000000000000000000000000000000000034D
7DB5034E7F3D0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000026EB628026EB669026EB679026E
B679026EB679026EB679026EB679026EB679026EB679026EB679026EB679026E
B679026EB669026EB6280000000000000000026DB46BC1E3F1D9E6FBFFFFE5FA
FFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE5FAFFFFE4FAFFFFE4FAFFFFE5FA
FFFFBDE2F1D9026DB46B0000000000000000026BB17EE5FAFFFFD9F4FFFFD9F4
FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4FFFFD9F4
FFFFE0F8FFFF026BB17E0000000000000000026AAE81E0F9FFFFD4F2FFFFD4F2
FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2FFFFD4F2
FFFFD9F5FFFF026AAE8100000000000000000268AB84DCF7FFFFCFF0FFFFCFF0
FFFFCFF0FFFFC2EDFCFFA8E8F4FF91E3EDFF84E0E9FF7CDEE7FF7CDEE7FF70B7
D8FF3148E3FF013FB5A300000000000000000266A788D8F4FFFFCCEEFFFFC2EC
FCFF9DE5F1FF85E0EAFF82E0E9FF82E0E9FF82E0E9FF82E0E9FF7BCCD3FF5E8E
ADFF8080FFFF010FAFE200000000000000000264A48CD6F3FFFFB6EBF9FF94E4
F0FF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF8FE3EEFF6BD2E1FF71A2A8FFF7F7
F7FF4E7390FF013BA1AC00000000000000000261A090C1EFFBFF9EE7F4FF9DE6
F4FF9DE6F4FF9DE6F4FF9DE6F4FF9DE6F4FF76D5E5FF2EADC3FF79E6F7FF6085
8DFF83BFCBFF0261A0900000000000000000025F9C8191D0E6E1B0ECF9FFAEEB
F9FFADEBF9FFACEBF9FFABEAF9FF80D8E9FF32AFC5FF79E6F7FF2C99AEFF80BF
CDFF86CCE5E1025F9C810000000000000000025C9832025C9785025C9799025C
9799B7EDFDFF025C97990174A3B2018BABE179E6F7FF017895E5016491B4025C
9799025C9785025C983200000000000000000000000000000000000000000355
8BA603558BA6016798570196AFB679E6F7FF017E95BE00728944000000000000
000000000000000000000000000000000000000000000000000000000000034D
7DB5034E7F3D016D917FD9F4FFFF017E95BE0072894400000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000FF014F68AB015F773D0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003B7F320015A9000015A9000015A9 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003B7F320015A9000015A9000015A9
000015A9000015AA009915AA00CC15AA00CC15AA009915A9000015A9000015A9 000015A9000015AA009915AA00CC15AA00CC15AA009915A9000015A9000015A9

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, ActnList, Menus, StdActns, ComCtrls, ActnList, Menus, StdActns, Buttons,
fpstypes, fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid, fpsActions; fpstypes, fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid, fpsActions;
type type
@ -211,6 +211,9 @@ type
AcPasteValueFromClipboard: TsCopyAction; AcPasteValueFromClipboard: TsCopyAction;
AcPasteFormatFromClipboard: TsCopyAction; AcPasteFormatFromClipboard: TsCopyAction;
AcPasteFormulaFromClipboard: TsCopyAction; AcPasteFormulaFromClipboard: TsCopyAction;
AcCommentNew: TsCellCommentAction;
AcCommentEdit: TsCellCommentAction;
AcCommentDelete: TsCellCommentAction;
Splitter2: TSplitter; Splitter2: TSplitter;
Splitter3: TSplitter; Splitter3: TSplitter;
ToolBar2: TToolBar; ToolBar2: TToolBar;
@ -258,6 +261,7 @@ type
ToolButton37: TToolButton; ToolButton37: TToolButton;
ToolButton38: TToolButton; ToolButton38: TToolButton;
ToolButton39: TToolButton; ToolButton39: TToolButton;
TbCommentAdd: TToolButton;
ToolButton40: TToolButton; ToolButton40: TToolButton;
ToolButton41: TToolButton; ToolButton41: TToolButton;
ToolButton42: TToolButton; ToolButton42: TToolButton;
@ -269,6 +273,9 @@ type
ToolButton48: TToolButton; ToolButton48: TToolButton;
ToolButton49: TToolButton; ToolButton49: TToolButton;
ToolButton5: TToolButton; ToolButton5: TToolButton;
TbCommentDelete: TToolButton;
TbCommentEdit: TToolButton;
ToolButton52: TToolButton;
ToolButton6: TToolButton; ToolButton6: TToolButton;
ToolButton7: TToolButton; ToolButton7: TToolButton;
ToolButton8: TToolButton; ToolButton8: TToolButton;

View File

@ -353,6 +353,33 @@ type
property Visible; property Visible;
end; end;
TsCellCommentMode = (ccmNew, ccmEdit, ccmDelete);
TsCellCommentAction = class(TsCellAction)
private
FMode: TsCellCommentMode;
protected
function EditComment(ACaption: String; var AText: String): Boolean; virtual;
public
procedure ExecuteTarget(Target: TObject); override;
procedure UpdateTarget(Target: TObject); override;
published
property Mode: TsCellCommentMode read FMode write FMode;
property Caption;
property Enabled;
property HelpContext;
property HelpKeyword;
property HelpType;
property Hint;
property ImageIndex;
property OnExecute;
property OnHint;
property OnUpdate;
property SecondaryShortCuts;
property ShortCut;
property Visible;
end;
{ TsMergeAction } { TsMergeAction }
TsMergeAction = class(TsAutoFormatAction) TsMergeAction = class(TsAutoFormatAction)
private private
@ -451,6 +478,7 @@ procedure Register;
implementation implementation
uses uses
StdCtrls, ExtCtrls, Buttons, Forms,
fpsutils, fpsnumformatparser, fpsVisualUtils; fpsutils, fpsnumformatparser, fpsVisualUtils;
procedure Register; procedure Register;
@ -465,6 +493,7 @@ begin
TsTextRotationAction, TsWordWrapAction, TsTextRotationAction, TsWordWrapAction,
TsNumberFormatAction, TsDecimalsAction, TsNumberFormatAction, TsDecimalsAction,
TsCellBorderAction, TsNoCellBordersAction, TsCellBorderAction, TsNoCellBordersAction,
TsCellCommentAction,
TsMergeAction TsMergeAction
], nil); ], nil);
end; end;
@ -1166,6 +1195,93 @@ begin
end; end;
{ TsCellCommentAction }
function TsCellCommentAction.EditComment(ACaption: String;
var AText: String): Boolean;
var
F: TForm;
memo: TMemo;
panel: TPanel;
btn: TBitBtn;
begin
F := TForm.Create(nil);
try
F.Caption := ACaption;
F.Width := 400;
F.Height := 300;
F.Position := poMainFormCenter;
memo := TMemo.Create(F);
memo.Parent := F;
memo.Align := alClient;
memo.BorderSpacing.Around := 4;
memo.Lines.Text := AText;
panel := TPanel.Create(F);
panel.Parent := F;
panel.Align := alBottom;
panel.Height := 44;
panel.BevelOuter := bvNone;
panel.Caption := '';
btn := TBitBtn.Create(F);
btn.Parent := panel;
btn.Kind := bkOK;
btn.Left := panel.ClientWidth - 2*btn.Width - 2*8;
btn.Top := 6;
btn.Anchors := [akTop, akRight];
btn := TBitBtn.Create(F);
btn.Parent := panel;
btn.Kind := bkCancel;
btn.Left := panel.ClientWidth - btn.Width - 8;
btn.Top := 6;
btn.Anchors := [akTop, akRight];
if F.ShowModal = mrOK then
begin
Result := true;
AText := memo.Lines.Text;
end else
Result := false;
finally
F.Free;
end;
end;
procedure TsCellCommentAction.ExecuteTarget(Target: TObject);
var
txt: String;
cellStr: String;
x, y: Integer;
R: TRect;
begin
if Worksheet = nil then
exit;
cellstr := GetCellString(Worksheet.ActiveCellRow, Worksheet.ActiveCellCol);
case FMode of
ccmNew:
begin
txt := '';
if EditComment(Format('New comment for cell %s',[cellStr]), txt) then
Worksheet.WriteComment(Worksheet.ActiveCellRow, Worksheet.ActiveCellCol, txt);
end;
ccmEdit:
begin
txt := Worksheet.ReadComment(ActiveCell);
if EditComment(Format('Edit comment for cell %s', [cellStr]), txt) then
Worksheet.WriteComment(Worksheet.ActiveCellRow, Worksheet.ActiveCellCol, txt);
end;
ccmDelete:
Worksheet.WriteComment(ActiveCell, '');
end;
end;
procedure TsCellCommentAction.UpdateTarget(Target: TObject);
begin
case FMode of
ccmNew : Enabled := (Worksheet <> nil) and (Length(GetSelection) > 0);
ccmEdit,
ccmDelete: Enabled := (Worksheet <> nil) and (Worksheet.ReadComment(ActiveCell) <> '');
end;
end;
{ TsMergeAction } { TsMergeAction }
constructor TsMergeAction.Create(AOwner: TComponent); constructor TsMergeAction.Create(AOwner: TComponent);

View File

@ -57,6 +57,7 @@ type
{ Special information } { Special information }
SharedFormulaBase: PCell; // Cell containing the shared formula SharedFormulaBase: PCell; // Cell containing the shared formula
MergeBase: PCell; // Upper left cell of a merged range MergeBase: PCell; // Upper left cell of a merged range
Comment: String; // Comment attached to the cell
{ Cell content } { Cell content }
UTF8StringValue: String; // strings cannot be part of a variant record UTF8StringValue: String; // strings cannot be part of a variant record
FormulaValue: String; FormulaValue: String;
@ -195,6 +196,7 @@ type
function ReadAsDateTime(ACell: PCell; out AResult: TDateTime): Boolean; overload; function ReadAsDateTime(ACell: PCell; out AResult: TDateTime): Boolean; overload;
function ReadFormulaAsString(ACell: PCell; ALocalized: Boolean = false): String; function ReadFormulaAsString(ACell: PCell; ALocalized: Boolean = false): String;
function ReadNumericValue(ACell: PCell; out AValue: Double): Boolean; function ReadNumericValue(ACell: PCell; out AValue: Double): Boolean;
function ReadComment(ACell: PCell): String;
{ Reading of cell attributes } { Reading of cell attributes }
function GetDisplayedDecimals(ACell: PCell): Byte; function GetDisplayedDecimals(ACell: PCell): Byte;
@ -236,6 +238,9 @@ type
function WriteCellValueAsString(ARow, ACol: Cardinal; AValue: String): PCell; overload; function WriteCellValueAsString(ARow, ACol: Cardinal; AValue: String): PCell; overload;
procedure WriteCellValueAsString(ACell: PCell; AValue: String); overload; procedure WriteCellValueAsString(ACell: PCell; AValue: String); overload;
function WriteComment(ARow, ACol: Cardinal; const AComment: String): PCell; overload;
procedure WriteComment(ACell: PCell; const AComment: String); overload;
function WriteCurrency(ARow, ACol: Cardinal; AValue: Double; function WriteCurrency(ARow, ACol: Cardinal; AValue: Double;
ANumFormat: TsNumberFormat = nfCurrency; ADecimals: Integer = 2; ANumFormat: TsNumberFormat = nfCurrency; ADecimals: Integer = 2;
ACurrencySymbol: String = '?'; APosCurrFormat: Integer = -1; ACurrencySymbol: String = '?'; APosCurrFormat: Integer = -1;
@ -2736,6 +2741,20 @@ begin
Result := False; Result := False;
end; end;
{@@ ----------------------------------------------------------------------------
Returns the comment assigned to a cell
@param ACell Pointer to the cell considered
@return String attached to the cell as a comment
-------------------------------------------------------------------------------}
function TsWorksheet.ReadComment(ACell: PCell): String;
begin
if ACell <> nil then
Result := ACell^.Comment
else
Result := '';
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Converts an RPN formula (as read from an xls biff file, for example) to a Converts an RPN formula (as read from an xls biff file, for example) to a
string formula. string formula.
@ -4112,6 +4131,35 @@ begin
WriteUTF8Text(ACell, AValue); WriteUTF8Text(ACell, AValue);
end; end;
{@@ ----------------------------------------------------------------------------
Assigns a comment to a cell
@param ARow Cell row index
@param ACol Cell column index
@param AComment Text to be used as comment. Can contain line-breaks.
@return Pointer to the cell
-------------------------------------------------------------------------------}
function TsWorksheet.WriteComment(ARow, ACol: Cardinal;
const AComment: String): PCell;
begin
Result := GetCell(ARow, ACol);
WriteComment(Result, AComment);
end;
{@@ ----------------------------------------------------------------------------
Assigns a comment to a cell
@param ACell Pointer to the cell
@param AComment Text to be used as comment. Can contain line-breaks.
-------------------------------------------------------------------------------}
procedure TsWorksheet.WriteComment(ACell: PCell; const AComment: String);
begin
if ACell <> nil then begin
ACell^.Comment := AComment;
ChangedCell(ACell^.Row, ACell^.Col);
end;
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Writes a currency value to a given cell. Its number format can be provided Writes a currency value to a given cell. Its number format can be provided
optionally by specifying various parameters. optionally by specifying various parameters.

View File

@ -148,12 +148,14 @@ type
procedure DrawCellBorders; overload; procedure DrawCellBorders; overload;
procedure DrawCellBorders(ACol, ARow: Integer; ARect: TRect); overload; procedure DrawCellBorders(ACol, ARow: Integer; ARect: TRect); overload;
procedure DrawCellGrid(ACol,ARow: Integer; ARect: TRect; AState: TGridDrawState); override; procedure DrawCellGrid(ACol,ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
procedure DrawCommentMarker(ARect: TRect);
procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override; procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override;
procedure DrawFrozenPaneBorders(ARect: TRect); procedure DrawFrozenPaneBorders(ARect: TRect);
procedure DrawRow(aRow: Integer); override; procedure DrawRow(aRow: Integer); override;
procedure DrawSelection; procedure DrawSelection;
procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override; procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
function GetCellHeight(ACol, ARow: Integer): Integer; function GetCellHeight(ACol, ARow: Integer): Integer;
function GetCellHintText(ACol, ARow: Integer): String; override;
function GetCellText(ACol, ARow: Integer): String; function GetCellText(ACol, ARow: Integer): String;
function GetEditText(ACol, ARow: Integer): String; override; function GetEditText(ACol, ARow: Integer): String; override;
function HasBorder(ACell: PCell; ABorder: TsCellBorder): Boolean; function HasBorder(ACell: PCell; ABorder: TsCellBorder): Boolean;
@ -399,6 +401,8 @@ type
{@@ inherited from ancestors} {@@ inherited from ancestors}
property BorderStyle; property BorderStyle;
{@@ inherited from ancestors} {@@ inherited from ancestors}
property CellHintPriority;
{@@ inherited from ancestors}
property Color; property Color;
{@@ inherited from ancestors} {@@ inherited from ancestors}
property ColCount; property ColCount;
@ -1501,6 +1505,26 @@ begin
inherited; inherited;
end; end;
{@@ ----------------------------------------------------------------------------
Draws the red rectangle in the upper right corner of a cell to indicate that
this cell contains a popup comment
-------------------------------------------------------------------------------}
procedure TscustomWorksheetGrid.DrawCommentMarker(ARect: TRect);
const
COMMENT_SIZE = 6;
var
P: Array[0..3] of TPoint;
begin
Canvas.Brush.Color := clRed;
Canvas.Brush.Style := bsSolid;
Canvas.Pen.Style := psClear;
P[0] := Point(ARect.Right, ARect.Top);
P[1] := Point(ARect.Right - COMMENT_SIZE, ARect.Top);
P[2] := Point(ARect.Right, ARect.Top + COMMENT_SIZE);
P[3] := P[0];
Canvas.Polygon(P);
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
This procedure is responsible for painting the focus rectangle. We don't want This procedure is responsible for painting the focus rectangle. We don't want
the red dashed rectangle here, but prefer the thick Excel-like black border the red dashed rectangle here, but prefer the thick Excel-like black border
@ -1745,6 +1769,9 @@ begin
begin begin
gds := GetGridDrawState(gc, gr); gds := GetGridDrawState(gc, gr);
DoDrawCell(gc, gr, rct, rct); DoDrawCell(gc, gr, rct, rct);
// Draw comment marker
if (FDrawingCell <> nil) and (FDrawingCell^.Comment <> '') then
DrawCommentMarker(rct);
end; end;
gc := gcNext; gc := gcNext;
@ -1818,6 +1845,7 @@ var
lCell: PCell; lCell: PCell;
justif: Byte; justif: Byte;
fmt: PsCellFormat; fmt: PsCellFormat;
savedBrushColor: TColor;
begin begin
if (Worksheet = nil) then if (Worksheet = nil) then
exit; exit;
@ -2371,6 +2399,22 @@ begin
end; end;
end; end;
{@@ ----------------------------------------------------------------------------
This function defines the text to be displayed as a cell hint. By default, it
is the comment attached to a cell; it can further be modified by using the
OnGetCellHint event.
Option goCellHints must be active for the cell hint feature to work.
-------------------------------------------------------------------------------}
function TsCustomWorksheetGrid.GetCellHintText(ACol, ARow: Integer): String;
var
cell: PCell;
begin
cell := Worksheet.FindCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
Result := Worksheet.ReadComment(cell);
if Assigned(OnGetCellHint) then
OnGetCellHint(self, ACol, ARow, Result);
end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
This function returns the text to be shown in a grid cell. The text is looked This function returns the text to be shown in a grid cell. The text is looked
up in the corresponding cell of the worksheet by calling its ReadAsUTF8Text up in the corresponding cell of the worksheet by calling its ReadAsUTF8Text

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.