关于Formula ONE的使用的问题(200分)

  • 主题发起人 逍遥泿子
  • 开始时间

逍遥泿子

Unregistered / Unconfirmed
GUEST, unregistred user!
我想作Formula ONE方面的报表打印东东。想实现简单电子表的功能,同时可以设置
Detail Band, Foot Band等报表控件,打印一般的报表。
哪儿有Formula ONE 的中文帮助及相应的使用例子啊?
好象看过有些网友作过这方面的开发。可以发个例子吗? 当然程序开放要付费的。
如果费用不是太贵也可以啊。
希望作过这方面开发的朋友多多提提意见。。。。
 
没有什么中文帮助,还是用金山词霸之类的配合着看英文帮助更好,免得翻译不好的易发生
歧义。
例子嘛我只能把其中的一部分给你,只涉及到其中一部分功能,。
dfm文档(其中用到了一个控件AlignStringGrid,可自己去下载安装)
object Frm_Sz_Tsb: TFrm_Sz_Tsb
Left = 113
Top = 97
Width = 636
Height = 464
Caption = '透视区域定义'
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = '宋体'
Font.Style = []
OldCreateOrder = False
Position = poDefault
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 12
object Splitter1: TSplitter
Left = 465
Top = 49
Width = 3
Height = 369
Cursor = crHSplit
end
object StatusBar1: TStatusBar
Left = 0
Top = 418
Width = 628
Height = 19
Panels = <>
SimplePanel = True
SimpleText =
'在报表中单击鼠标右键可弹出快捷操作菜单,单击表格行可编辑当前行所' +
'对应的透视表'
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 628
Height = 49
ButtonHeight = 39
Caption = 'ToolBar1'
TabOrder = 1
object Btn_Xbb: TSpeedButton
Left = 0
Top = 2
Width = 41
Height = 39
Hint =
'在表格中选择一单元格,单击本按钮可将该单元格所对应的行列置为固定' +
'行列。'
Caption = '选报表'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000000000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00888888888888
888800000000000088880FFFFFFFFFF088880F00F00000F088880FFFFFFFFFF0
88880F00F00000F088880FFFFFFFFFF088880FFFFFFF0FF088880F00FFF080F0
88880F080F08080008440FF08080808880440000080808888844888880808888
8844888888088888804488888880000008448888888888888888}
Layout = blGlyphTop
ParentShowHint = False
ShowHint = True
OnClick = Btn_XbbClick
end
object ToolButton5: TToolButton
Left = 41
Top = 2
Width = 8
Caption = 'ToolButton5'
ImageIndex = 3
Style = tbsSeparator
end
object Btn_Bth: TSpeedButton
Left = 49
Top = 2
Width = 41
Height = 39
Hint =
'在表格中选择一单元格,单击本按钮可将该单元格所对应的行列置为固定' +
'行列。'
Caption = '标题行'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000000000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
77777700000000777777770FFFFF70077777770F7A7F70707777770F7A7F70F7
0777770FFFFFF0000077770F000777FFF077770F9947777FF077770799477777
F077744499444077F077799999999077F077799999999FFFF077770F9947FFFF
F077770F994FFFFFF077770FFFFFFFFFF0777700000000000077}
Layout = blGlyphTop
ParentShowHint = False
ShowHint = True
OnClick = Btn_BthClick
end
object ToolButton3: TToolButton
Left = 90
Top = 2
Width = 8
Caption = 'ToolButton3'
ImageIndex = 3
Style = tbsSeparator
end
object Btn_Hzh: TSpeedButton
Left = 98
Top = 2
Width = 41
Height = 39
Hint =
'在表格中选择一单元格,单击本按钮可将该单元格所对应的行列置为固定' +
'行列。'
Caption = '固定行'
Flat = True
Glyph.Data = {
36050000424D3605000000000000360400002800000010000000100000000100
08000000000000010000CE0E0000C40E00000001000000000000000000008080
8000000080000080800000800000808000008000000080008000408080004040
0000FF80000080400000FF00400000408000FFFFFF00C0C0C0000000FF0000FF
FF0000FF0000FFFF0000FF000000FF00FF0080FFFF0080FF0000FFFF8000FF80
80008000FF004080FF00EEEEEE00DDDDDD00CCCCCC00BBBBBB00AAAAAA009999
9900888888007777770066666600555555004444440033333300222222001111
1100CCFFFF0099FFFF0066FFFF0033FFFF00FFCCFF00CCCCFF0099CCFF0066CC
FF0033CCFF0000CCFF00FF99FF00CC99FF009999FF006699FF003399FF000099
FF00FF66FF00CC66FF009966FF006666FF003366FF000066FF00FF33FF00CC33
FF009933FF006633FF003333FF000033FF00CC00FF009900FF006600FF003300
FF00FFFFCC00CCFFCC0099FFCC0066FFCC0033FFCC0000FFCC00FFCCCC0099CC
CC0066CCCC0033CCCC0000CCCC00FF99CC00CC99CC009999CC006699CC003399
CC000099CC00FF66CC00CC66CC009966CC006666CC003366CC000066CC00FF33
CC00CC33CC009933CC006633CC003333CC000033CC00FF00CC00CC00CC009900
CC006600CC003300CC000000CC00FFFF9900CCFF990099FF990066FF990033FF
990000FF9900FFCC9900CCCC990099CC990066CC990033CC990000CC9900FF99
9900CC999900669999003399990000999900FF669900CC669900996699006666
99003366990000669900FF339900CC3399009933990066339900333399000033
9900FF009900CC00990099009900660099003300990000009900FFFF6600CCFF
660099FF660066FF660033FF660000FF6600FFCC6600CCCC660099CC660066CC
660033CC660000CC6600FF996600CC9966009999660066996600339966000099
6600FF666600CC666600996666003366660000666600FF336600CC3366009933
6600663366003333660000336600FF006600CC00660099006600660066003300
660000006600FFFF3300CCFF330099FF330066FF330033FF330000FF3300FFCC
3300CCCC330099CC330066CC330033CC330000CC3300FF993300CC9933009999
3300669933003399330000993300FF663300CC66330099663300666633003366
330000663300FF333300CC333300993333006633330000333300FF003300CC00
330099003300660033003300330000003300CCFF000099FF000066FF000033FF
0000FFCC0000CCCC000099CC000066CC000033CC000000CC0000FF990000CC99
000099990000669900003399000000990000FF660000CC660000996600006666
00003366000000660000FF330000CC3300009933000066330000333300000033
0000CC0000009900000066000000330000000000EE0000EE0000EE0000000000
DD0000DD0000DD0000000000BB0000BB0000BB0000000000AA001F1F1F1F1F1F
1F1F1F1F1F1F1F1F1F0F1F1F0101010101010101010101011F0F1F1F00000000
00000000000000011F0F1F1F000E0E0E0E0E0E0E0E0E00011F0F1F1F000E0E0E
0E0E0E0E0E0E00010F0F1F1F000E0E0E0E061F0E0E0E00010F0F0F0F000E0E0E
0E061F1F0E0E00011F1F1F1F000E0E06060606060E0E00011F1F1F1F000E0E0E
0E061F0E0E0E00011F1F1F1F000E0E0E0E061F0E0E0E00011F1F1F1F000E0E0E
0E0E0E0E0E0E00011F1F1F1F000E0E0E0E0E0E000000001F1F1F1F1F000E0E0E
0E0E0E000E001F1F1F1F1F1F000E0E0E0E0E0E00001F1F1F1F1F1F1F00000000
000000001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F}
Layout = blGlyphTop
ParentShowHint = False
ShowHint = True
OnClick = Btn_HzhClick
end
object ToolButton4: TToolButton
Left = 139
Top = 2
Width = 8
Caption = 'ToolButton4'
ImageIndex = 3
Style = tbsSeparator
end
object Btn_Gdl: TSpeedButton
Left = 147
Top = 2
Width = 41
Height = 39
Hint =
'在表格中选择一单元格,单击本按钮可将该单元格所对应的行列置为固定' +
'行列。'
Caption = '固定列'
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000C40E0000C40E00000000000000000000C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C080808080
8080808080808080808080808080808080808080808080C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000000
00000000808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0000000FF0000FF0000FF0000FF0000FF0000FF0000FF00
00000000808080C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0000000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080C0C0C0C0C0C0C0C0C0
000000000000C0C0C0000000FF0000FF0000FF0000FF0000FF0000FF0000FF00
00000000808080C0C0C0C0C0C0C0C0C00000000000FF000000000000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080C0C0C0000000000000
0000000000FF0000FF000000FF0000FF0000FF0000FF0000FF0000FF0000FF00
00000000808080C0C0C00000000000FF0000FF0000FF0000FF0000FF00000000
00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF000000808080C0C0C0000000000000
0000000000FF0000FF000000FF0000FF0000FF0000FF0000FF0000FF0000FF00
00000000808080C0C0C0C0C0C0C0C0C00000000000FF000000000000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080C0C0C0C0C0C0C0C0C0
000000000000C0C0C0000000FF0000FF0000FF0000FF0000FF0000FF0000FF00
00000000808080C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0000000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000000
00000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0}
Layout = blGlyphTop
ParentShowHint = False
ShowHint = True
OnClick = Btn_GdlClick
end
object ToolButton1: TToolButton
Left = 188
Top = 2
Width = 8
Caption = 'ToolButton1'
Style = tbsSeparator
end
object Btn_Hzl: TSpeedButton
Left = 196
Top = 2
Width = 39
Height = 39
Caption = '透视列'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
04000000000080000000C40E0000C40E00001000000000000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
77777700000000777777770FFFFF70077777770F7A7F70707777770F7A7F70F7
0777770FFFFFF0000077770F000777FFF077770F8847777FF077770788477777
F077744488444077F077788888888077F077788888888FFFF077770F8847FFFF
F077770F884FFFFFF077770FFFFFFFFFF0777700000000000077}
Layout = blGlyphTop
OnClick = Btn_HzlClick
end
object ToolButton7: TToolButton
Left = 235
Top = 2
Width = 8
Caption = 'ToolButton7'
ImageIndex = 1
Style = tbsSeparator
end
object Btn_Bths: TSpeedButton
Left = 243
Top = 2
Width = 53
Height = 39
Caption = '表体行数'
Flat = True
Glyph.Data = {
3E020000424D3E0200000000000036000000280000000D0000000D0000000100
18000000000008020000C40E0000C40E00000000000000000000FFFFFF000000
000000000000000000000000000000000000000000000000000000000000FFFF
FF00FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF000000FFFFFF00FFFFFF000000FFFFFF00000000000000000000000000
0000000000000000FFFFFF000000FFFFFF00FFFFFF000000FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FFFFFF000000
FFFFFF000000000000000000000000000000000000000000FFFFFF000000FFFF
FF00FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF000000FFFFFF00FFFFFF000000FFFFFF00000000000000000000000000
0000000000000000FFFFFF000000FFFFFF00FFFFFF000000FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FFFFFF000000
FFFFFF000000000000000000000000000000000000000000FFFFFF000000FFFF
FF00FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000
000000000000FFFFFF00FFFFFF000000FFFFFF00000000000000000000000000
0000000000FFFFFF000000FFFFFFFFFFFF00FFFFFF000000FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF00FFFFFF000000
000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF
FF00}
Layout = blGlyphTop
OnClick = N_BthsClick
end
object ToolButton8: TToolButton
Left = 296
Top = 2
Width = 8
Caption = 'ToolButton8'
ImageIndex = 3
Style = tbsSeparator
end
object Btn_Del: TSpeedButton
Left = 304
Top = 2
Width = 40
Height = 39
Caption = '删除'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
04000000000080000000C40E0000C40E00001000000000000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00888888888888
8888888888888888888888808888888888788800088888888888880000888888
8788888000888888088888880008888008888888800088008888888888000008
8888888888800088888888888800000888888888800088008888888000088880
0888880000888888008888000888888888788888888888888888}
Layout = blGlyphTop
OnClick = Btn_DelClick
end
object ToolButton6: TToolButton
Left = 344
Top = 2
Width = 8
Caption = 'ToolButton6'
ImageIndex = 3
Style = tbsSeparator
end
object Btn_Save: TSpeedButton
Left = 352
Top = 2
Width = 40
Height = 39
Caption = '保存'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000000000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00888888888888
8888880000000000000880330000008803088033000000880308803300000088
0308803300000000030880333333333333088033000000003308803088888888
0308803088888888030880308888888803088030888888880308803088888888
0008803088888888080880000000000000088888888888888888}
Layout = blGlyphTop
OnClick = Btn_SaveClick
end
object ToolButton2: TToolButton
Left = 392
Top = 2
Width = 8
Caption = 'ToolButton2'
ImageIndex = 2
Style = tbsSeparator
end
object Btn_Quit: TSpeedButton
Left = 400
Top = 2
Width = 40
Height = 39
Caption = '退出'
Flat = True
Glyph.Data = {
36050000424D3605000000000000360400002800000010000000100000000100
08000000000000010000CE0E0000C40E00000001000000000000000000008080
8000000080000080800000800000808000008000000080008000408080004040
0000FF80000080400000FF00400000408000FFFFFF00C0C0C0000000FF0000FF
FF0000FF0000FFFF0000FF000000FF00FF0080FFFF0080FF0000FFFF8000FF80
80008000FF004080FF00C0DCC000F0CAA6001818180021212100313131003939
39004A4A4A0063636300CECED60063637B00525273006363B500080810005252
B5006363E70031319C00424AB5004A52DE005A63BD005A63C6006373E7004252
C600394273008C9CE7004263E7004A5A8C006384EF00BDC6DE00ADBDE7008CA5
E700849CDE003152AD004A7BE7008CADEF005A739C004A7BC600316BC600397B
E700184A94004A94EF00397BC600398CEF00216BBD00848C9400DEEFFF00424A
5200527BA5003994EF002163A5007B848C004AA5F7001873BD0084C6F7001052
840073A5C6007BC6F700529CCE00187BBD0010639C00739CB5008CCEF7004AB5
F70039ADF7001884C6001073AD00ADBDC60073ADCE008CD6FF004A84A500107B
B500A5B5BD0063737B00BDCED6009CADB50031ADE7004294B50031738C0039A5
CE00C6DEE700DEF7FF00D6EFF700CEE7EF006BD6F7001884A5008CE7FF0031AD
CE00299CBD0031C6EF0084E7FF007BE7FF00529CAD004AB5CE0052DEFF0029AD
CE0031D6F70031DEFF0084F7FF007BF7FF0042F7FF0031F7FF00525A5A004A52
520094A5A5006B7B7B006BF7F7007B8C42008C9C4A00949C6B00737B4200ADB5
6B009CA5520094948C00A5A59C0084847B00E7E7D6006B6B6300BDBDAD005A5A
520052524A004A4A4200E7E7CE00C6C68C00BDBD6B0084844A00C6BD7300DED6
AD008C845A00BDAD5A00635A2900B5A55A00DECE9C00AD944A00EFCE7300CEC6
B500DEBD7300DED6C600EFC67B00DECEB500D6BD9400E7BD7B00DEB573009C6B
21004A392100AD844A007B521800734A1000CEB59400BD843900A5733100AD73
2900AD8C63009C7342007B5A3100C68C4A00735229008C5A21005A3910003929
1800F7EFE7007B736B00D6A57300CE9C6B00734A21008452210063391000A56B
390073421800AD734A00844A2100BD8C6B005A31180052423900D6A58C009C5A
3900A56B52008C4A3900632118009C5A5200ADA5A500BDADAD0094848400B59C
9C00B59494001810100073393900391010005A181800B5848C00844A5A009C6B
7B006B294200B58C9C00A56B84006B214A00B58CA50084426B005A1842007B31
630073296300AD84A50094639C0052295A0084429400733184007B3994006352
6B0021102900632984007B39A5004A216300311842007B42A500734A9400844A
B50063299C008452C600391863006331B5007B63A500734ABD008C63DE002110
420029105A009473E7008463DE0039217B009C8CCE00312163000F0F0F0F0F0F
0F0F0F0F00000F0F0F0F0F0F0F0F0F0F0F0F0F0F0013000F0F0F0F0F0F0F0F0F
0F0F0F0F0013A9000F0F0F0F0F0F0F0F0F0F0F0F0013A9A9000F0F0F0F0F0F0F
0F0F0F0F0013A9A9000F0F0F0F0F0F0F0F0001010013A9A9000F0F0F0F0F0F0F
0F0001010013A9A9000F0F0F0F0F000F0F000101001301A9000F0F0F0F0F1400
0F000101001300A9000F141414141414000001010013A9A9000F141414141414
000001010013A9A9000F0F0F0F0F14000F0001010013A9A9000F0F0F0F0F000F
0F0001010013A9A9000F0F0F0F0F0F0F0F000101010013A9000F0F0F0F0F0F0F
0F00010101010013000F0F0F0F0F0F0F0F00000000000000000F}
Layout = blGlyphTop
OnClick = Btn_QuitClick
end
end
object Panel1: TPanel
Left = 0
Top = 49
Width = 465
Height = 369
Align = alLeft
TabOrder = 2
object Grd_Tsb: TStringAlignGrid
Left = 1
Top = 1
Width = 463
Height = 332
Align = alClient
ColCount = 9
DefaultRowHeight = 19
RowCount = 2
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect]
TabOrder = 0
OnClick = Grd_TsbClick
SelectedCellColor = clAqua
SelectedFontColor = cl3DDkShadow
ColWidths = (
20
62
95
42
40
40
78
56
0)
Cells = (
1
0
'透视表名'
2
0
'所属报表'
3
0
'标题行'
4
0
'固定行'
5
0
'固定列'
6
0
'透视列'
7
0
'表体行数')
PropCell = (
1
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
1
1
3
2
0
2
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
3
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
4
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
5
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
6
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0
7
0
1
2
6
-2147483640
-12
'宋体'
0
318141440
0)
PropCol = (
1
1
1
0
2
1
1
0
3
1
1
0
4
1
1
0
5
1
1
0)
PropRow = ()
PropFixedCol = ()
PropFixedRow = ()
end
object Panel3: TPanel
Left = 1
Top = 333
Width = 463
Height = 35
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
object Label1: TLabel
Left = 8
Top = 8
Width = 78
Height = 12
Caption = '当前透视表名:'
end
object Edit1: TEdit
Left = 88
Top = 5
Width = 121
Height = 20
ImeName = '万能五笔2000a+'
TabOrder = 0
end
object BitBtn1: TBitBtn
Left = 216
Top = 5
Width = 75
Height = 25
Caption = '确定'
Default = True
TabOrder = 1
OnClick = BitBtn1Click
Glyph.Data = {
DE010000424DDE01000000000000760000002800000024000000120000000100
0400000000006801000000000000000000001000000000000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3333333333333333333333330000333333333333333333333333F33333333333
00003333344333333333333333388F3333333333000033334224333333333333
338338F3333333330000333422224333333333333833338F3333333300003342
222224333333333383333338F3333333000034222A22224333333338F338F333
8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224
33333338F83338F338F33333000033A33333A222433333338333338F338F3333
0000333333333A222433333333333338F338F33300003333333333A222433333
333333338F338F33000033333333333A222433333333333338F338F300003333
33333333A222433333333333338F338F00003333333333333A22433333333333
3338F38F000033333333333333A223333333333333338F830000333333333333
333A333333333333333338330000333333333333333333333333333333333333
0000}
NumGlyphs = 2
end
end
end
object Panel2: TPanel
Left = 468
Top = 49
Width = 160
Height = 369
Align = alClient
TabOrder = 3
end
object PopupMenu1: TPopupMenu
Left = 513
Top = 8
object N_Bth: TMenuItem
Caption = '设为标题行'
OnClick = N_BthClick
end
object N_Hzh: TMenuItem
Caption = '设为固定行'
OnClick = N_HzhClick
end
object N_Gdl: TMenuItem
Caption = '设为固定列'
OnClick = N_GdlClick
end
object N_Hzl: TMenuItem
Caption = '设为透视列'
OnClick = N_HzlClick
end
object N_Bths: TMenuItem
Caption = '表体行数'
OnClick = N_BthsClick
end
object N6: TMenuItem
Caption = '-'
end
object N_Xbb: TMenuItem
Caption = '选择报表'
OnClick = N_XbbClick
end
end
end

pas文档
unit FrmSz_Tsb;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Buttons, ToolWin, AxCtrls, OleCtrls, VCF150_TLB, Grids,
Aligrid, ExtCtrls, Menus, StdCtrls;
type
TFrm_Sz_Tsb = class(TForm)
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
Btn_Hzh: TSpeedButton;
ToolButton1: TToolButton;
Btn_Hzl: TSpeedButton;
ToolButton7: TToolButton;
Btn_Quit: TSpeedButton;
Panel1: TPanel;
Grd_Tsb: TStringAlignGrid;
Panel2: TPanel;
C_bb: TF1Book5;
Btn_Save: TSpeedButton;
ToolButton2: TToolButton;
PopupMenu1: TPopupMenu;
N_Hzl: TMenuItem;
N_Bth: TMenuItem;
N_Gdl: TMenuItem;
N_Hzh: TMenuItem;
Btn_Gdl: TSpeedButton;
ToolButton3: TToolButton;
Btn_Bth: TSpeedButton;
ToolButton4: TToolButton;
Btn_Xbb: TSpeedButton;
ToolButton5: TToolButton;
N_Xbb: TMenuItem;
N6: TMenuItem;
Splitter1: TSplitter;
Panel3: TPanel;
Label1: TLabel;
Edit1: TEdit;
BitBtn1: TBitBtn;
Btn_Del: TSpeedButton;
ToolButton6: TToolButton;
Btn_Bths: TSpeedButton;
ToolButton8: TToolButton;
N_Bths: TMenuItem;
procedure Btn_QuitClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N_BthClick(Sender: TObject);
procedure N_GdlClick(Sender: TObject);
procedure N_HzlClick(Sender: TObject);
procedure Btn_XbbClick(Sender: TObject);
procedure N_HzhClick(Sender: TObject);
procedure N_XbbClick(Sender: TObject);
procedure Btn_BthClick(Sender: TObject);
procedure Btn_HzhClick(Sender: TObject);
procedure Btn_GdlClick(Sender: TObject);
procedure Btn_HzlClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Grd_TsbClick(Sender: TObject);
procedure Btn_DelClick(Sender: TObject);
procedure Btn_SaveClick(Sender: TObject);
procedure N_BthsClick(Sender: TObject);
private
{ Private declarations }
B_Sel:F1RangeRef;
B_Xbb,B_fg:boolean;
//是否处于选报表状态,是否用新报表覆盖原未完整行。
B_ybm:String;
//原所属报表名
B_dch:integer;
//表格当前行,是否添加修改状态(0非,1添加,2修改)
Function P_ChkSave():Boolean;
//检查并保存,返回值为TRUE为保存成功。
public
B_Flm:String;
//分类名
{ Publ ic declarations }
end;

var
Frm_Sz_Tsb: TFrm_Sz_Tsb;
implementation
uses DataModel, FrmdwTree,PubUnit, FrmSz_Tsb_Tree;
{$R *.DFM}
procedure TFrm_Sz_Tsb.Btn_QuitClick(Sender: TObject);
begin
close;
end;

procedure TFrm_Sz_Tsb.FormShow(Sender: TObject);
begin
B_xbb:=false;
B_fg:=false;
With Data.Set_Lsdo
begin
Close;
CommandText:='Select * from T_Tsb order by f_bbname';
open;
if not isempty then
begin
while not eofdo
begin
if Recno>1 then
Grd_Tsb.RowCount:=Grd_Tsb.RowCount+1;
Grd_Tsb.Cells[0,RecNo]:='√';
B_Sqlt:=fieldbyname('f_name').asstring;
Grd_Tsb.Cells[1,RecNo]:=Copy(B_sqlt,pos('/',B_Sqlt)+1,length(B_Sqlt)-pos('/',B_Sqlt));
Grd_Tsb.Cells[8,Recno]:=Copy(B_Sqlt,1,pos('/',B_Sqlt));
B_Sqlt:=Fieldbyname('f_bbname').asstring;
Grd_Tsb.Cells[2,RecNo]:=Copy(B_sqlt,pos('/',B_Sqlt)+1,length(B_Sqlt)-pos('/',B_Sqlt));
Grd_Tsb.Cells[3,RecNo]:=FieldByName('f_Title').asstring;
Grd_Tsb.Cells[4,RecNo]:=fieldbyname('f_Fixrow').asstring;
Grd_Tsb.Cells[5,RecNo]:=FieldByname('f_FixCol').asstring;
Grd_Tsb.Cells[6,RecNo]:=FieldByName('f_Col').asstring;
Grd_Tsb.Cells[7,Recno]:=FieldByName('f_Rows').asstring;
next;
end;
close;
CommandText:='Select * From T_bb where f_bbname='''+Grd_Tsb.Cells[8,1]
+Grd_Tsb.Cells[2,1]+'''';
open;
if not isempty then
begin
ReadBB(Data.Set_ls,'f_bb','F_name','f_bbdwbm',c_bb);
Grd_Tsb.Row:=1;
B_Dch:=1;
end;
end;
close;
end;
end;

procedure TFrm_Sz_Tsb.N_BthClick(Sender: TObject);
var B_xhcs,B_rowstar,B_rowend,B_pos,B_MaxRow:integer;
begin
B_Sel:=C_bb.SelectionEx[0];
B_RowStar:=0;
B_RowEnd:=0;
With Grd_Tsbdo
begin
B_True:=True;
if B_Sel.EndRow>C_bb.MaxRow then
B_MaxRow:=C_bb.Maxrow
else
B_MaxRow:=B_Sel.EndRow;
if Cells[4,Row]<>'' then
for B_xhcs:=B_MaxRowdo
wnto B_Sel.StartRowdo
begin
B_pos:=pos('-',Cells[4,Row]);
if B_Xhcs>=StrToInt(copy(Cells[4,row],1,B_pos-1)) then
begin
if B_True then
begin
Application.MessageBox('标题行不能小于或等于固定行!','提示',mb_ok+mb_iconWarning);
B_True:=False;
end;
end
else
begin
if B_RowEnd=0 then
B_RowEnd:=B_Xhcs;
if B_Xhcs=B_Sel.StartRow then
B_RowStar:=B_Xhcs;
end;
end
else
begin
B_RowStar:=B_Sel.StartRow;
B_RowEnd:=B_MaxRow;
end;
if B_RowEnd>0 then
begin
Cells[3,Row]:=IntToStr(B_RowStar)+'-'+IntToStr(B_RowEnd);
if Cells[0,row]='√' then
Cells[0,row]:='★';
end;
end;
end;

procedure TFrm_Sz_Tsb.N_GdlClick(Sender: TObject);
var B_xhcs,B_colstar,B_colend,B_pos,B_MaxCol:integer;
begin
B_Sel:=C_bb.SelectionEx[0];
B_colStar:=0;
B_colEnd:=0;
With Grd_Tsbdo
begin
B_True:=True;
if B_Sel.EndCol>C_bb.MaxCol then
B_MaxCol:=C_bb.MaxCol
else
B_MaxCol:=B_Sel.EndCol;
if Cells[6,Row]<>'' then
for B_xhcs:=B_Maxcoldo
wnto B_Sel.StartColdo
begin
B_pos:=pos(',',Cells[6,row]);
if B_pos=0 then
B_pos:=StrToInt(Cells[6,Row])
else
B_pos:=StrToInt(copy(Cells[6,row],1,B_pos-1));
if B_Xhcs>=B_pos then
begin
if B_True then
begin
Application.MessageBox('固定列不能小于或等于透视列!','提示',mb_ok+mb_iconWarning);
B_True:=false;
end;
end
else
begin
if B_colEnd=0 then
B_colEnd:=B_Xhcs;
if B_Xhcs=B_Sel.startcol then
B_colStar:=B_Xhcs;
end;
end
else
begin
B_colStar:=B_Sel.Startcol;
B_colEnd:=B_Maxcol;
end;
if B_colEnd>0 then
begin
Cells[5,Row]:=IntToStr(B_colStar)+'-'+IntToStr(B_colEnd);
if Cells[0,row]='√' then
Cells[0,row]:='★';
end;
end;
end;

procedure TFrm_Sz_Tsb.N_HzlClick(Sender: TObject);
var
B_Xhcs1,B_Xhcs2,B_TslLen,B_val,B_MaxCol,B_js:integer;
B_Tsl,B_Tsl1,B_Tsl2,B_TslStr:String;
B_arr:Array of Integer;
B_Bool:Boolean;
begin
try
B_Sel:=C_bb.SelectionEx[0];
except
end;
B_Tsl:='';
B_Bool:=True;
B_js:=0;
With Grd_Tsbdo
begin
For B_Xhcs1:=0 to C_bb.SelectionCount-1do
begin
B_Sel:=C_bb.SelectionEx[B_Xhcs1];
if B_Sel.EndCol>C_bb.MaxCol then
B_MaxCol:=C_bb.MaxCol
else
B_MaxCol:=B_Sel.EndCol;
For B_Xhcs2:=B_Sel.StartCol to B_MaxColdo
begin
B_True:=True;
B_js:=B_js+1;
if Cells[5,Row]<>'' then
if B_Xhcs2<=StrToInt(copy(Cells[5,Row],Length(Cells[5,Row]),1)) then
begin
if B_Bool then
begin
Application.MessageBox('透视列不能小于或等于固定列!','提示',mb_ok+mb_iconWarning);
B_bool:=false;
end;
B_True:=false;
end;
if B_True then
if B_Tsl='' then
B_Tsl:=IntToStr(B_Xhcs2)
else
B_Tsl:=B_Tsl+','+IntToStr(B_Xhcs2);
end;
end;
B_Tsl1:='';
if Pos(',',B_Tsl)=0 then
//只有一列的情况.
B_Tsl1:=B_Tsl
else
While Truedo
//多列时去除重复的汇总列字符
if pos(',',B_Tsl)>0 then
//B_TSL还有多个列数的情况
begin
if B_Tsl1='' then
B_Tsl1:=copy(B_Tsl,1,pos(',',B_Tsl)-1)
else
B_Tsl1:=B_Tsl1+','+copy(B_Tsl,1,pos(',',B_Tsl)-1);
B_TslStr:=copy(B_Tsl,1,pos(',',B_Tsl)-1);
delete(B_Tsl,1,pos(',',B_Tsl));
B_Tsl2:=B_tsl;
B_TslLen:=0;
while B_Tsl<>''do
begin
if pos(',',B_Tsl)>0 then
begin
if copy(B_Tsl,1,pos(',',B_Tsl)-1)=B_TslStr then
if B_tslLen>0 then
begin
Delete(B_Tsl2,B_TslLen,Length(B_TslSTr)+1);
B_TslLen:=B_TslLen-Length(B_TslStr)-1;
B_js:=B_Js-1;
end
else
begin
Delete(B_Tsl2,B_TslLen+1,Length(B_TslStr));
B_TslLen:=B_TslLen-Length(B_TslStr);
B_js:=B_js-1;
end;
if B_Tsl2<>'' then
if copy(B_Tsl2,1,1)=',' then
begin
Delete(B_Tsl2,1,1);
B_TslLen:=B_TslLen-1;
end;
B_TslLen:=B_TslLen+Pos(',',B_Tsl);
delete(B_Tsl,1,pos(',',B_Tsl));
end
else
begin
if B_tsl=B_TslStr then
Delete(B_Tsl2,B_TslLen+1,Length(B_TslStr));
B_tsl:='';
end;
end;
B_Tsl:=B_Tsl2;
if B_Tsl='' then
break;
end
else
begin
//B_TSL已删到只剩一个数的情况
if B_Tsl1='' then
B_Tsl1:=B_Tsl
else
B_Tsl1:=B_tsl1+','+B_Tsl;
delete(B_Tsl,1,Length(B_Tsl));
break;
end;
B_tsl:=B_tsl1;
//将数组的个数设为未筛选的透视列的总数
SetLength(B_arr,B_js);
if pos(',',B_tsl)>0 then
//对汇总列进行排序
begin
B_TslLen:=0;
While B_tsl<>''do
//将B_TSL的各列数存入数组
if pos(',',B_tsl)=0 then
begin
B_arr[b_tsllen]:=StrToInt(B_tsl);
B_tsl:='';
end
else
begin
B_arr[B_tsllen]:=StrToInt(copy(B_tsl,1,pos(',',B_tsl)-1));
B_tsllen:=B_tsllen+1;
delete(B_tsl,1,pos(',',B_tsl));
end;
For B_xhcs1:=0 to B_TslLen-1do
//对数组B_ARR进行排序
begin
B_val:=B_arr[b_xhcs1];
for B_xhcs2:=B_xhcs1+1 to B_tsllendo
if B_arr[B_xhcs2]<B_val then
begin
B_arr[B_xhcs1]:=B_arr[B_xhcs2];
B_arr[B_xhcs2]:=B_val;
B_val:=B_arr[B_xhcs1];
end;
end;
B_Tsl1:='';
For B_xhcs1:=0 to B_Tsllendo
//将数组保存到B_TSL1中.
if B_xhcs1=0 then
B_Tsl1:=IntToStr(B_arr[0])
else
B_Tsl1:=B_Tsl1+','+IntToStr(B_Arr[B_xhcs1]);
end;
Cells[6,Row]:=B_Tsl1;
if Cells[0,Row]='√' then
Cells[0,Row]:='★';
end;
end;

procedure TFrm_Sz_Tsb.Btn_XbbClick(Sender: TObject);
begin
B_True:=True;
B_xbb:=true;
B_fg:=false;
if Grd_Tsb.Cells[0,B_Dch]<>'√' then
P_ChkSave();
if B_True then
begin
B_Sqlt:='';
Frm_SZ_Tsb_Tree:=TFrm_SZ_TSb_Tree.Create(self);
Frm_Sz_Tsb_Tree.Showmodal;
Frm_Sz_Tsb_Tree.Free;
with Data.Set_Lsdo
begin
close;
CommandText:='Select * from T_bb'+G_curbgq+' where f_bbname='''+B_Sqlt
+''' and f_bbdwbm='''+G_bdwbm+'''';
open;
if not isempty then
if ReadBb(Data.Set_Ls,'f_bb','f_name','f_bbdwbm',C_bb) then
begin
if not B_fg then
begin
if Grd_Tsb.Cells[2,1]<>'' then
Grd_Tsb.RowCount:=Grd_Tsb.RowCount+1;
B_Sqlt:=FieldbyName('f_bbname').asstring;
Grd_Tsb.Cells[2,Grd_Tsb.RowCount-1]:=Copy(B_Sqlt,Length(B_flm)+2,Length(B_Sqlt)-Length(B_flm)-1);
Grd_Tsb.Cells[8,Grd_Tsb.Rowcount-1]:=B_Flm+'/';
Grd_Tsb.Row:=Grd_Tsb.RowCount-1;
B_Dch:=Grd_Tsb.Row;
end
else
begin
Grd_Tsb.Rows[Grd_tsb.Row].Clear;
B_Sqlt:=Fieldbyname('F_bbname').asstring;
Grd_Tsb.Cells[2,Grd_Tsb.Row]:=Copy(B_Sqlt,Length(B_flm)+2,Length(B_Sqlt)-Length(B_flm)-1);
Grd_Tsb.Cells[8,Grd_Tsb.Row]:=B_Flm+'/';
end;
end
else
Application.MessageBox('本张报表没有数据!','提示',mb_ok+mb_iconwarning);
close;
end;
end;
B_xbb:=false;
B_fg:=false;
end;

procedure TFrm_Sz_Tsb.N_HzhClick(Sender: TObject);
var B_xhcs,B_rowstar,B_rowend,B_pos,B_MaxRow:integer;
begin
B_sel:=C_bb.SelectionEx[0];
B_RowStar:=0;
B_RowEnd:=0;
With Grd_Tsbdo
begin
if B_Sel.EndRow > C_bb.MaxRow then
B_MaxRow:=C_bb.MaxRow
else
B_MaxRow:=B_Sel.EndRow;
b_True:=True;

if Cells[3,Row]<>'' then
for B_xhcs:=B_sel.StartRow to B_MaxRowdo
begin
B_pos:=pos('-',Cells[3,Row]);
if B_Xhcs<=StrToInt(copy(Cells[3,row],B_pos+1,Length(Cells[3,Row])-B_pos)) then
begin
if B_True then
begin
Application.MessageBox('固定行不能小于或等于标题行!','提示',mb_ok+mb_iconWarning);
B_True:=false;
end;
end
else
begin
if B_RowStar=0 then
B_RowStar:=B_Xhcs;
if B_Xhcs=B_MaxRow then
B_RowEnd:=B_Xhcs;
end;
end
else
begin
B_RowStar:=B_Sel.StartRow;
B_RowEnd:=B_MaxRow;
end;
if B_RowEnd>0 then
begin
Cells[4,Row]:=IntToStr(B_RowStar)+'-'+IntToStr(B_RowEnd);
if Cells[0,Row]='√' then
Cells[0,Row]:='★';
end;
end;
end;

procedure TFrm_Sz_Tsb.N_XbbClick(Sender: TObject);
begin
Btn_XbbClick(Sender);
end;

procedure TFrm_Sz_Tsb.Btn_BthClick(Sender: TObject);
begin
N_BthClick(Sender);
end;

procedure TFrm_Sz_Tsb.Btn_HzhClick(Sender: TObject);
begin
N_HzhClick(Sender);
end;

procedure TFrm_Sz_Tsb.Btn_GdlClick(Sender: TObject);
begin
N_GdlClick(Sender);
end;

procedure TFrm_Sz_Tsb.Btn_HzlClick(Sender: TObject);
begin
N_HzlClick(Sender);
end;

function TFrm_Sz_Tsb.P_ChkSave():Boolean;
//检查并保存,返回值为TRUE为保存成功
var B_Xhcs:integer;
begin
B_True:=True;
With Grd_Tsbdo
begin
//检查是否为空
if (Cells[1,B_dch]='') or (Cells[3,B_dch]='') or (Cells[4,B_Dch]='')
or (Cells[5,B_Dch]='') or (Cells[6,B_Dch]='') or (Cells[7,B_dch]='') then
begin
B_True:=false;
Row:=B_dch;
if not B_xbb then
Application.MessageBox('透视表名与标题行、固定行列、透视列、表体行数均不能为空或为0','提示',mb_ok+mb_iconWarning)
else
if Application.MessageBox('当前行的透视表名或标题行、固定行列、透视列、表体行数输入不完整,是否用新选的报表覆盖!','提示',mb_Yesno+mb_iconQuestion)=idyes then
begin
B_True:=true;
B_fg:=true;
end;
end;
//检查透视表名是否重复
{if B_True then
for B_xhcs:=1 to RowCount-1do
if B_xhcs<>B_dch then
if Cells[1,B_xhcs]=Cells[1,B_dch] then
begin
row:=B_dch;
B_True:=False;
if not B_xbb then
Application.MessageBox('该透视表名与其它透视表名重复,请重新录入','提示',mb_ok+mb_iconWarning)
else
if not B_fg then
if Application.MessageBox('当前行的透视表名与其它透视表名重复,是否用新选的报表覆盖?','提示',mb_yesno+mb_iconQuestion)=idyes then
begin
B_true:=true;
B_fg:=true;
end;
Break;
end;
}
end;
ReSult:=B_True;
end;

procedure TFrm_Sz_Tsb.BitBtn1Click(Sender: TObject);
var B_xhcs:integer;
begin
//输入透视表名前应判断是否与其它行重复
With Grd_Tsbdo
if Cells[2,1]<>'' then
begin
for B_xhcs:=1 to RowCount-1do
if (Cells[1,B_xhcs]=edit1.text) and (B_xhcs<>B_dch) then
begin
Application.MessageBox('透视表名与原有的其它透视表名重复,不能录入!','提示',mb_ok+mb_iconError);
exit;
end;
if Cells[0,B_Dch]='√' then
begin
Data.Command.commandtext:='Update T_Tsb Set f_name='''+Cells[8,B_dch]+edit1.text
+''' where f_name='''+Cells[8,B_dch]+Cells[1,B_dch]+'''';
Data.command.Execute;
Data.Command.CommandText :='Update T_bb'+G_curbgq+' Set f_bbname='''
+Cells[8,B_dch]+edit1.text+''' where f_bbname='''+Cells[8,B_dch]+Cells[1,B_dch]+'''';
Data.Command.Execute;
end;
Cells[1,B_Dch]:=Edit1.text;
edit1.text:='';
end;
end;

procedure TFrm_Sz_Tsb.Grd_TsbClick(Sender: TObject);
begin
B_True:=true;
With Grd_Tsbdo
begin
if (Cells[0,B_dch]<>'√') and (Row<>B_dch) then
if not P_ChkSave() then
B_True:=false;
if B_True then
begin
B_Dch:=Row;
if Cells[8,Row]+Cells[2,Row]<>B_Ybm then
begin
B_Ybm:=Cells[8,B_dch]+Cells[2,B_Dch];
Data.Set_Ls.Close;
Data.Set_Ls.CommandText:='Select * from T_bb where f_bbname='''+B_Ybm+'''';
Data.Set_Ls.Open;
if not Data.Set_Ls.IsEmpty then
ReadBb(Data.Set_Ls,'f_bb','f_name','f_bbdwbm',C_bb);
Data.Set_Ls.Close;
end;
end;
end;
end;

procedure TFrm_Sz_Tsb.Btn_DelClick(Sender: TObject);
begin
if application.MessageBox('确定要删除本透视表吗?','提示',mb_okCancel+mb_defbutton2+mb_iconQuestion)=idok then
With Grd_Tsbdo
begin
if Cells[0,B_Dch]='√' then
//删除原有透视表的情况
begin
//检查各报告期是否有该透视表的报表数据存存,有则不删除并退出
Data.Qry_Ls.Close;
Data.Qry_Ls.SQL.Clear;
Data.Qry_Ls.SQL.Add('Select * from T_bgq');
Data.Qry_Ls.Open;
if not Data.Qry_Ls.IsEmpty then
While Not Data.Qry_Ls.Eofdo
begin
Data.Set_Ls.Close;
Data.Set_Ls.CommandText :='Select * From '
+Data.Qry_Ls.Fieldbyname('f_table').asstring+' where f_bbname='''+Cells[1,B_dch]
+''' and f_bbdwbm='''+g_bdwbm+''' and f_bbstyle=''1''';
if not Data.Set_Ls.IsEmpty then
if ReadBb(Data.Set_Ls,'f_bb','f_name','f_bbdwbm',C_bb) then
begin
Application.MessageBox('以前报告期存在本透视表数据,不能删除!','提示',mb_ok
+mb_iconWarning);
Data.Set_Ls.close;
exit;
end;
Data.Qry_Ls.Next;
end;
Data.Set_Ls.Close;
Data.Qry_Ls.Close;
//删除T_TSB相关行
Data.Command.CommandText:='Delete * From T_Tsb where f_name='''+Cells[1,B_Dch]+'''';
Data.command.Execute;
//删除当前报告期BB相关行.
Data.Command.CommandText:='Delete * From T_bb'+G_CurBgq+' Where f_bbname='''
+Cells[1,B_Dch]+''' and f_bbstyle=''1''';
Data.Command.Execute;
end;
if RowCount>2 then
RemoveRow(B_Dch) //删除后的处理
else
Rows[1].Clear;
if B_Dch>RowCount-1 then
B_Dch:=RowCount-1;
Row:=B_Dch;
if Cells[2,B_Dch]='' then
C_bb.ClearRange(1,1,C_bb.MaxRow,C_bb.MaxCol,F1ClearAll)
else
if Cells[8,B_dch]+Cells[2,B_Dch]<>B_Ybm then
begin
B_Ybm:=Cells[8,B_dch]+Cells[2,B_dch];
Data.Set_Ls.Close;
Data.Set_Ls.CommandText:='Select * from T_bb where f_bbname='''+B_Ybm+'''';
Data.Set_Ls.Open;
if not Data.Set_Ls.IsEmpty then
ReadBb(Data.Set_Ls,'f_bb','f_name','f_bbdwbm',C_bb);
Data.Set_Ls.Close;
end;
end;
end;

procedure TFrm_Sz_Tsb.Btn_SaveClick(Sender: TObject);
var B_xhcs:integer;
begin
B_True:=true;
With Grd_Tsbdo
begin
if Cells[0,B_dch]<>'√' then
P_ChkSave();
if B_True then
for B_xhcs:=1 to RowCount-1do
if Cells[0,B_xhcs]<>'√' then
begin
if Cells[0,B_xhcs]='★' then
begin
Data.Command.commandtext:='Update T_Tsb Set f_Title='''+Cells[3,B_xhcs]
+''',F_fixRow='''+Cells[4,B_xhcs]+''',f_fixcol='''+Cells[5,B_xhcs]
+''',f_col='''+Cells[6,B_xhcs]+''',f_rows='+Cells[7,B_xhcs]+',f_date='''
+DateToStr(Date)+''' where f_name='''+Cells[8,B_xhcs]+Cells[1,B_xhcs]+'''';
Data.command.Execute;
if G_bdwbm<>'' then
begin
Data.Command.CommandText :='Update T_bb'+G_curbgq+' Set f_bbdwbm='''+G_Bdwbm
+''',f_end=-1,f_bbStyle=''1'' where f_bbname='''+Cells[8,B_xhcs]
+Cells[1,B_xhcs]+'''';
Data.Command.Execute;
end;
end
else
begin
Data.Command.CommandText:='Insert into T_Tsb (f_name,f_bbname,f_title,'
+'f_fixrow,f_fixcol,f_col,f_rows,f_date) values ('''+Cells[8,B_xhcs]
+Cells[1,b_xhcs]+''','''+Cells[8,B_xhcs]+Cells[2,B_xhcs]+''','''
+Cells[3,B_xhcs]+''','''+Cells[4,B_xhcs]+''','''+Cells[5,B_xhcs]+''','''
+Cells[6,B_xhcs]+''','+Cells[7,b_xhcs]+','''+DateToStr(Date)+''')';
Data.Command.Execute;
if G_bdwbm<>'' then
begin
Data.Command.commandtext:='Insert into T_bb'+G_curbgq
+' (f_bbname,f_bbdwbm,f_end,f_bbstyle) values ('''+Cells[8,B_xhcs]
+Cells[1,B_xhcs]+''','''+G_Bdwbm+''',-1,''1'')';
Data.Command.Execute;
end;
end;
Cells[0,B_Xhcs]:='√';
end;
end;
end;

procedure TFrm_Sz_Tsb.N_BthsClick(Sender: TObject);
var B_xhcs,B_rowstar,B_rowend,B_pos,B_MaxRow:integer;
begin
B_sel:=C_bb.SelectionEx[0];
B_RowStar:=0;
B_RowEnd:=0;
With Grd_Tsbdo
begin
if B_Sel.EndRow > C_bb.MaxRow then
B_MaxRow:=C_bb.MaxRow
else
B_MaxRow:=B_Sel.EndRow;
b_True:=True;
if Cells[3,Row]<>'' then
for B_xhcs:=B_sel.StartRow to B_MaxRowdo
begin
B_pos:=pos('-',Cells[3,Row]);
if B_Xhcs<=StrToInt(copy(Cells[3,row],B_pos+1,Length(Cells[3,Row])-B_pos)) then
begin
if B_True then
begin
Application.MessageBox('设定的表体行不能小于或等于标题行!','提示',mb_ok+mb_iconWarning);
B_True:=false;
end;
end
else
begin
if B_RowStar=0 then
B_RowStar:=B_Xhcs;
if B_Xhcs=B_MaxRow then
B_RowEnd:=B_Xhcs;
end;
end
else
begin
B_RowStar:=B_Sel.StartRow;
B_RowEnd:=B_MaxRow;
end;
if B_RowEnd>0 then
begin
Cells[7,Row]:=IntToStr(B_RowEnd-B_RowStar+1);
if Cells[0,Row]='√' then
Cells[0,Row]:='★';
end;
end;
end;

end.

 
有关报表的,请看看这个东东能否满足你的要求!
http://www.smartparter.com/download/ReportExpert20.zip
应该最适合你了!·
 
多人接受答案了。
 
顶部