12.事件


  Supcan Report的OnEvent( id, Event, p1, p2, p3, p4 )事件含义及参数分别如下:
分类Event含义p1p2p3p4
键盘鼠标动作 SelChanged 选中了单元格 行号 列号    
选中了内嵌对象 别名      
Clicked 鼠标点到某单元格 行号 列号    
备注:如果是交叉表, 可以继续用 GetCellProp 函数获取该单元格的 crosstabRowDir、crosstabColDir 属性, 即所在的交叉项
鼠标点在单元格右侧的按钮上 行号 列号 RightButton  
备注:请参见函数 SetCellProp/GetCellProp
鼠标点到某统计图 统计图别名 系列名 数据项名 数据所在的单元格名称
如果是多工作表, 则在后面跟随有类似 "@sheet1" 的宏
鼠标点到某内嵌对象 别名      
鼠标点在某内嵌对象右侧的按钮上 别名   RightButton  
备注:请参见函数 SetCellProp/GetCellProp
Clicked
(超链接的兼容模式, 见备注5)
鼠标点到某超链接的单元格 行号 列号 超链接的标识文字 数据源超链接的列ID (如果是数据源的超链接)
鼠标点到定义了超链接的交叉表的单元格 行号 列号 Crosstab 交叉表中该值的“副标题文字”
HyperLink
超链接事件
鼠标点到某超链接的单元格 行号 列号 超链接的标识文字 数据源超链接的列ID (如果是数据源的超链接)
交叉表单元格的超链接 行号 列号 Crosstab 交叉表中该值的“副标题文字”
将跳转到另一个工作表 行号 列号 go 工作表名
备注:可执行全局函数CalcelEvent( )阻止继续执行
将跳转到另一个工作表并对其执行计算 行号 列号 goCalc 工作表名
备注:可执行全局函数CalcelEvent( )阻止继续执行
将计算所有工作表 行号 列号 calc  
备注:可执行全局函数CalcelEvent( )阻止继续执行
DblClicked 鼠标双击某单元格 行号 列号    
备注:可执行全局函数CalcelEvent( )阻止继续执行
EditChanged 单元格内容被修改 行号 列号 输入前的内容  
备注1:通常是输入框关闭(焦点离开)后才触发该事件的;
备注2:在执行粘贴(Paste)时,也会触发该事件,每个单元格都会触发一遍, 如果您执行了 CancelEvent 函数,那么粘贴过程将终止
文本框内容被修改 别名   输入前的内容  
备注:通常是输入框关闭(焦点离开)后才触发该事件的
Editing 正打开着的单元格的输入框内容有变 行号 列号 当前内容串  
备注:在输入过程中,输入内容并不会立即更新到单元格中
正打开着的文本框的输入框内容有变 别名   当前内容串  
备注:在输入过程中,输入内容并不会立即更新到单元格中
Keydown 在非编辑状态时的键盘动作     键的ASCII码,例如回车是13、空格是32 见备注2
备注1:可执行全局函数CalcelEvent( )阻止继续执行
备注2:p4的含义为: 1-Ctrl键也按下了; 2-Shift键也按下了; 3-二者一起按下了
Checked 鼠标选了Checkbox 行号 列号 Checkbox的值(1/0)  
文件IO事件 New 报表已新建 (即点击了工具条左上角第一个按钮)        
备注:"Toolbar" 事件发生在新建前; "New" 事件发生在新建后
Opened 已打开报表 报表的URL, 也可能是纯数字串形式的内存块句柄(可用全局函数 GetDataString 访问)      
Saved 报表已保存 本地的全文件名 如果一开始打开的是zip文件,则为该zip文件名    
Exported 报表已转换输出 全文件名(多个文件以逗号分隔) 文件类型(即后缀)    
ExportDialog 转换输出对话框中,当用户点击"确定"后、文件对话框即将弹出前 文件后缀 以逗号分隔的、待转换的工作表序号(从0开始计数)    
备注:可以在该事件中执行 SetExportFilename 函数,详见该函数的说明.
行列增删 RowInserted 行已插入 行号 数量    
BeforeRowInserted 行插入前 行号 数量    
RowDeleted 行已删除 行号 数量    
BeforeRowDeleted 行删除前 行号 数量    
ColInserted 列已插入 列号 数量    
BeforeColInserted 列插入前 列号 数量    
ColDeleted 列已删除 列号 数量    
BeforeColDeleted 列删除前 列号 数量    
工具条和工具箱 Toolbar 鼠标点击了工具条中的某按钮、但尚未执行 功能号 参数,和功能号有关    
备注:可执行全局函数CalcelEvent( )阻止继续执行
ToolbarRun 鼠标点击了工具条中的某按钮、且已成功执行 功能号 参数,同 Toolbar 事件    
备注:如果某些功能是需要弹出对话框确认的,那么点击对话框的 “取消” 是不会触发本事件的,此外,如果功能没有得到执行时,也不触发本事件
BeforeCellPropChanged 工具箱中单元格的某些属性被改动前 单元格名 属性名称 修改前的内容 修改后的内容
备注1:可执行全局函数CalcelEvent( )阻止继续执行;
备注2:并不是所有属性都会触发该事件,只有常用的属性诸如颜色、保护、对齐等等才触发
CellPropChanged 工具箱中单元格的某些属性已被改动 单元格名 属性名称 修改前的内容 修改后的内容
BeforeFunctionDrag 工具箱中 “函数” 选项卡中,某函数被拖拽到单元格前 单元格名 函数名    
备注:可执行全局函数CalcelEvent( )阻止继续执行
FunctionDrag 工具箱中 “函数” 选项卡中,某函数被拖拽到单元格后 单元格名 函数名    
BeforeDSDrag 工具箱中 “数据源” 选项卡中,某函数被拖拽到单元格前 单元格名 函数名 逗号分隔的参数  
备注:可执行全局函数CalcelEvent( )阻止继续执行
DSDrag 工具箱中 “数据源” 选项卡中,某函数被拖拽到单元格后 单元格名 函数名 逗号分隔的参数  
BeforeItemDrag 工具箱中 “指标库” 选项卡中,某指标被拖拽到单元格前 单元格名, 如果为空表示是拖拽成文本框 指标名    
备注:可执行全局函数CalcelEvent( )阻止继续执行
ItemDrag 工具箱中 “指标库” 选项卡中,某指标被拖拽到单元格后 单元格名, 如果为空表示是拖拽成文本框 指标名    
工作表 WorkSheetSelChanged 当前工作表已切换 工作表序号 0 - 普通鼠标点击时切换;
1 - 报表刚打开时自动触发本事件
   
BeforeSheetDeleted 工作表被删除前 工作表序号      
备注:可执行全局函数CalcelEvent( )阻止继续执行
SheetDeleted 工作表已经被删除 工作表序号      
BeforeSheetRenamed 工作表被改名前 工作表序号 原名 新名  
备注:可执行全局函数CalcelEvent( )阻止继续执行
SheetRenamed 工作表已经被改名 工作表序号 原名 新名  
BeforeSheetInserted
(点击了选项卡 )
工作表新建前        
新工作表导入前 报表的URL 工作表数量    
备注:可执行全局函数CalcelEvent( )阻止继续执行
SheetInserted
(点击了选项卡 )
新建了工作表        
导入了新工作表 报表的URL 工作表数量    
打印相关 BeforePrint 正准备要打印 (在预览界面)        
备注:可执行全局函数CalcelEvent( )阻止继续执行
Printed 已打印
(是指打印任务已经发送给操作系统的打印任务队列)
已打印次数 0 - 普通打印;
1 - 在预览窗口中的打印当前页;
2 - 在预览窗口中的打印全部页;
   
Previewed 打印预览窗口已关闭        
PrintSetupBeforeUpdate 打印参数设置对话框已经按下"确认", 但尚未更新到报表 即将要更新的新的配置串(XML串)      
备注:可执行全局函数CalcelEvent( )阻止继续执行
PrintSetupUpdated 打印参数设置对话框已经按"确认"关闭, 并且已经更新到报表        
计算相关 Calced 已执行计算 0 - 执行了工具条上的“重新计算”;
1 - 执行了"除数据源外,重新计算";
2 - API执行了计算函数;
3 - API执行了当前工作表的计算
0 - 是同步计算
1 - 是异步计算

注:工具条上的“计算”按钮是异步计算
   
DataReach 数据源已经访问了http并得到了数据,但尚未应用该数据 纯数字串形式的内存块的句柄 URL 数据源的ID, 如"ds1"  
备注1:可以用全局函数 GetDataString / SetDataString 取得或更改内存块中的数据
备注2:可以用上述2个函数存取数据,但不宜过多调用其它函数,否则会造成不稳定
其它 HotKey 触发了快捷键 快捷键 如果当前选中的是单元格,为所在行号;
如果是内嵌对象,则为它的别名
当前单元格的列号, 如果有单元格选中的话  
MenuBeforePopup 右键菜单即将弹出(单元格) 行号 列号    
右键菜单即将弹出(文本框/统计图/图片等) 别名,多个别名间以逗号分隔      
MenuClicked 右键菜单的自定义部分被选中 功能号 行号 列号  
UserEvent 全局函数 PostMessage 发出的自定义事件 自定义 自定义 自定义 自定义
CacheSaved 全局事件,请参见全局函数 ListenEvent 缓存的ID      
Download 全局事件,请参见Freeform组件的同名事件        
Upload 全局事件,请参见Freeform组件的同名事件        
树列表别名.树列表事件名 内嵌树列表的事件 参见树列表 参见树列表 参见树列表 参见树列表

备注1:行列增删“前”的4个事件(BeforeRowInserted、BeforeColInserted、BeforeRowDeleted、BeforeColDeleted),是用户交互过程中触发的,增删行列的函数是不会触发该事件的;
备注2:在行列增删“前”事件、以及BeforeCellPropChanged事件中,你可以通过全局函数 CancelEvent 去阻止下一步的行列增删动作,如下例:
function OnEvent(id, Event, p1, p2, p3, p4)
{
 if(Event == "BeforeRowInserted") {
  AF.func("CancelEvent", "");  //阻止插入行
 }
}
备注3SelChanged、Clicked、DblClicked 和 EditChanged、Editing、CellPropChanged事件需要SubscribeEvent( )预订才会生效, 事件的js用法可参见下例:
function OnReady( id )
{
 AF.func( 'Build', 'index.XML' );     //加载报表
 AF.func("SubscribeEvent", "SelChanged, EditChanged");  //预订事件
}
function OnEvent(id, Event, p1, p2, p3, p4)
{
 if( Event == "SelChanged" ) {
  //...略
 }
}
备注4:Checked事件必须要先预订 Clicked 事件才能生效;

备注5:关于超链接事件, 在1.0.101.0前, 都是和 "Clicked" 事件同名的, 在1.0.101.0版本后, 超链接允许设置多种行为方案了, 在工具箱超链接的输入处右侧有一个小按钮, 点击后会弹出一个对话框:
  您可以在此选择, 其中第一个是兼容模式, 用于和以前版本兼容, 即触发 Clicked 事件还是打开 URL, 取决与您是否预订了 Clicked 事件.
  第二个 “打开这个 URL” 是不触发页面事件的, 它将直接打开新的页面.
  其余 4 种模式将触发 "HyperLink" 事件, 不再触发 "Clicked" 事件.