第9章 用户自定义事件

合集下载

第9章_labview的高级应用(事件结构编程技巧)

第9章_labview的高级应用(事件结构编程技巧)
前面板上所有控件
通过“坐标”获取鼠标的位置,并把该坐标值赋给“鼠标 按下”的控件,从而达到控件被鼠标拖动的视觉效果。
在“鼠标释放”的分支中,通过“非法引用句柄常量”取 消对“鼠标移动”事件的注册,从而实现在鼠标释放后, 控件的位置不再跟随鼠标发生变化。
• 动态注册:动态事件注册与VI服务器相结合,
允许在程序运行时使用控件、VI或应用程序 的引用来动态地指定和改变产生事件。动态 注册在控制LabVIEW产生何种事件和何时产 生事件等方面更为灵活。
用布尔控件制作 的自定义控件
为这个自定义控 件动态注册了 “鼠标按下”事

1:放置“注册事件”函数 2:在“注册事件”函数输入端上连接一个引用 3:在“注册事件”函数事件源,选择该引用所对应的事件
第九章
Labview 的高级应用 ——事件结构之谜
用户界面


外部I/O
程序的其它部分
超时节点
事件结构
事件选择器
动态事件注册
事件数据节点程序代码Step2:处理事件分支程序
事件结构在循环体外, 因此不再执行
Step1:值第一次被改变 Step3:值再次被改变
事件结构编写黄金法则1
将事件结构放入While循环中!
生产者消费者 循环
事件结构
• 通知事件:
如“鼠标移动”、“键按下”等
• 过滤事件:
如“鼠标移动?”、“键按下?”等
数字”0-9” “-“ ”Backspace“
事件过滤节点
事件结构注册模式
• 静态注册:事件结构的每个分支具体处理哪 些事件,一旦VI开始运行,LabVIEW将自动 注册这些事件,并且在VI运行的整个过程中 无法改变事件结构所处理的事件。

第9章 键盘与鼠标事件过程

第9章 键盘与鼠标事件过程

例9-1 KeyPress的用法
例如,数字的ASCII码是在48~57范围,下列事件处理只允许用 户在文本框中输入数字(非数字字符被抑制): Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then ' 输入为非数字字符 KeyAscii = 0 ' 抑制非数字字符的输入 End If End Sub 在该事件处理过程中,就是对数字以外的字符进行拦截,将其 KeyAscii参数更改为0,使控件最后接收到的是KeyAscii = 0的字 符(空字符,但不是空格字符),这样就抑制了那些字符的输入.
参数说明
Index:是一个整数,它用来唯一标识一个在控件数组中的控件. : KeyCode:是一个键的扫描码,可以用诸如vbKeyFl(F1键)的系统常 : 量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小写 状态无关;如果按的是两个以上的组合键,KeyCode将先后得到所有 这些不同物理位置键的扫描码.
参数: (1) Button参数:描述所按下的鼠标键是哪一个. 参数 ①使用二进制值: B2 B1 B0 使用二进制值 B0为1:表示按下了鼠标左键 B1为1:表示按下了鼠标右键 B2为1:表示按下了鼠标中键 例如:Button为2(=010B),即B1 为1,表示按下了右键; 如果按了鼠标左键,则Button为1(=001B).
if Shfit = vbAltMask And Button = 1 Then … … ' 这是 这是仅按住Alt健且左击鼠标后应执行的代码 且 后应执行的代码
(3)X,Y:鼠标的当前位置坐标值. ) , : 例9-3 MouseMove事件及其参数的演示.在窗体上移 动鼠标时,文本框Text1和Text2中分别显示鼠标相对 于窗体的实时位置坐标;在图片框P1中移动鼠标时, 文本框Text1和Text2中则分别显示鼠标相对于图片框 的实时位置坐标. 下图所示,是程序运行时鼠标在窗体左边界上移动的 某瞬间的情景.

Flex从入门到精通 第9章

Flex从入门到精通 第9章

9.3.5 使用Effect.target和Effect.targets属性应用行为效果
在Flex中,可以使用Effect.target和 Effect.targets属性来调用行为效果的目标组件, 特别是在使用play()方法来调用行为效果时。在 MXML中,Effect.target用来调用一个单一的目标 组件。而用Effect.targets来定义一组目标组件。 示例代码如下。在<mx:Zoom>标签中,绑定属性 target的目标组件为按钮控件, target="{myButton2}"。然后,在<mx:Button>标 签上,定义click行为为显示Zoom的行为效果。
9.1.1 运用行为控制(Apply behavior)
编程者需要使用MXML与ActionScript两者来建立 和运用组件的行为效果。在MXML中,可以将行为 效果和触发器联合起来。例如,在下面的代码片 段中,首先定义行为效果WipeLeft其id标识符数 值为“myWL”,并且在1000毫秒中从开始到结束 的。 <mx:WipeLeft id="myWL" duration="1000"/>
9.4.2 使用嵌入的字体显示行为效果
一些行为控制融合、褪色和旋转只能对嵌入的文本产生作 用。如果在带有系统字体的控件上使用这些效果,文本不 会发生任何改变。下面的示例9-8中,带有了两个标签控件, 一个使用嵌入的文字,一个是系统文字。当在这两个标签 控件上应用褪色的行为控制时,系统文字不发生任何改变。 在示例中,首先在ActionScript中定义嵌入的字体 “myFont”,代码如下所示。 @font-face { @font src:local("Arial"); font-family: myFont; }

第09章事件驱动机制

第09章事件驱动机制

清华大学出版社
13
9.3.2event对象中的鼠标事件
7.Blur事件
(1)焦点概念 (2)Blur事件 Blur事件发生在窗体中的选择框、文本输入框、文本输入区域失去焦点时。 【例9-7】使用onBlur句柄编写的程序。
<SCRIPT LANGUAGE="JavaScript"> function program_one() {//定义函数program_one() text_context1=document.myform.mynoval.value; //获得文本区域中的文本 text_context2=text_context1.toLowerCase();//将文本中的全部字符转成小写 if (text_context2.indexof("the")>=0) alert ("已经找到单词the--");//已经找到单词the else alert ("重新再来一次");//没有找到单词the } </SCRIPT> <P>我们教区的牧师要为各种各样的事筹集资金,但始终不能筹足资金将</P> <P>教堂的钟修好。教堂的钟很大,以前要不分昼夜地打点报时,但是很</P> <P>多年前被损坏,从此便无声无息了。</P> <FORM NAME="myform" METHOD= "POST"> <TEXTAREA NAME= "myEnglish" ROWS= "8" COLUMNS= "200" ONBLUS="program_one()" COLS="50"> </TEXTAREA>

VB教程(第2版) 第9章 鼠标、键盘和OLE

VB教程(第2版) 第9章 鼠标、键盘和OLE

9.1.1 鼠标事件
当在图片框中移动鼠标时,不断地画线和画方块,实现连续画线和方块。 Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '在图片框中移动鼠标 If Button = 1 And C2 = 1 Then Select Case C1 Case 1 Picture1.Line -(X, Y) Case 2 Picture1.Line (X1, Y1)-(X, Y), , BF End Select End If End Sub
9.1.1 鼠标事件
说明: (1)Button表示是哪个鼠标键被按下或释放。用0、1、2三个位表示鼠标 的左、右、中键,每位用0、1表示被按下或释放,三个位的二进制转换成十进 制就是Button的值,如图9.1所示,表9.1列出了按钮与常数值的对应关系。
十进制 0 1 2 3 4 5 6 7
二进制 000 001 010 011 100 101 110 111
图9.4 查看键代码
9.2 键盘事件
2. KeyPress事件 KeyPress事件是当键盘有键按下时触发的。KeyPress事件检测的键有Enter、 Tab、BackSpace以及键盘上的字母、数字和标点符号键,对于其他功能键、编 辑键和定位键,则不作响应。 语法: Private Sub 对象_KeyPress(KeyAscii As Integer) 说明: • 对象:是接受键盘事件的对象,由具有焦点的对象接收。 • KeyAscii:是按键对应的ASCⅡ码值。将keyAscii改为0时可取消本次击键, 这样对象便接收不到按键的字符。

PowerBuilder实用教程第9章 用户自定义事件

PowerBuilder实用教程第9章 用户自定义事件

用户事件编程实例
⑯为数据窗口“dw_1”再定义一个用户事件“u_keyarrow”,事件号为“pbm_dwntabdo
在定义用户事件时,可以定义事件参数。但TriggerEvent和PostEvent不能带事件参数(但可以 为Message传送用户消息),因此需用下面的格式触发: object_name. [Trigger | Post] [Static | Dynamic] EVENT event_name( [para_list] )
为实现如图9.5所示的功能,可用自定义事件。 (1)创建一个“student.pbl”,其中 “ApplicationObject”为“stu”,再建一个窗 口“w_uevent”,窗口中的控件分别为 “dw_1”“cb_append”“cb_insert”“cb_d elete”“cb_retrieve”“cb_update”和 “cb_return”。 建立数据窗口对象“d_xs”,将“dw_1”的 “DataObject”属性设为“d_xs”。
PowerBuilder实用教程(第5版)
第9章 用户自定义事件
——用户事件号
用户事件号
PowerBuilder没有提供事件标记的说明手册,但大部分可以从标记名推断其含义。表9.1列出 了部分常用事件标记的前缀及其含义,表9.2列出了部分常用事件标记及其含义。
前 缀 pbm_cb pbm_dw pbm_dde pbm_e 含 义 通用对话框消息 数据窗口 前 缀 pbm_lb pbm_lv 列表框 列表视图(Listview) 树形视图(Treeview) 窗口 含 义
PowerBuilder实用教程(第5版)
第9章 用户自定义事件
——定义用户事件
在下列情况下经常使用用户事件。 (1)解决对象与窗口之间的通信问题。用户事件可以通过参数进行信息传递。 (2)响应特殊操作,这些操作没有相应的PowerBuilder预定义事件。例如,大多数的人都习 惯于在每项数据录入后按【Enter】键,转到下一个输入项。但在Windows环境下,系统都是默认 使用【Tab】键或【Shift+Tab】键转换到下一个数据项或上一个数据项,而用户按【Enter】键, 系统会将焦点转到下一条记录的第一个输入项上。 (3)支持用户通过多种方式完成同一个功能。例如,既允许用户通过单击窗口中的按钮完成, 也允许用户通过选择选单项完成。使用用户事件后,就只需要在一个地方编写代码,在需要使用该 功能的地方触发相应的用户事件就可以了。

VF第09章

VF第09章

9.3 类的操作
类的操作 类的创建 定义类成员 类的修改 查看类信息 类的应用 类库的维护 事件方法程序 对象的引用 事件分类 响应事件 调用方法
菜单。 “类设计器”打开时系统菜单出现“类”菜单。 类设计器”打开时系统菜单出现“ 新建属性:为类添件 新建属性 为类添件 新的属性。 新的属性。 新建方法程序:为类 新建方法程序 为类 添加新的方法。 添加新的方法。 编辑属性/方法程序 方法程序: 编辑属性 方法程序 立即开始编辑属性 或方法的代码。 或方法的代码。 包含文件:指定包含 包含文件 指定包含 的文件。 的文件。 类信息:显示类信息 显示类信息。 类信息 显示类信息。
命令按钮 命令按钮组合
对象与类
对象 类
列表框 选项按钮 图像 表单集 控制 容器
编辑框 选项按钮组 文本框 微调 OLE绑定控制 OLE绑定控制 页面
表单 计时器 形状 线条 OLE
组合框 标签 表格 页框 容器控件
类的操作 事件和 方法程序
9.2 对象与类
概 述
特点 优点
继承性 子类是其他类的定义的新类,一个子类可以 子类是其他类的定义的新类 一个子类可以 拥有派生它的类的全部功能; 拥有派生它的类的全部功能 封装 将操作对象的内部复杂性与应用程序的其 他部分隔开。 他部分隔开。 由于隐藏了对象的细节,使用户能集中精力 由于隐藏了对象的细节 使用户能集中精力 来使用对象的特性。 来使用对象的特性。 隐藏对象信息能防止代码受到破坏,有利于 隐藏对象信息能防止代码受到破坏 有利于 程序的安全性。 程序的安全性。
对象与类
对象 类
类的操作 事件和 方法程序
9.2 对象与类
概 述
特点 优点
类 定义了关于对象的特征和行为的模板 类与对象的关系 类是对象的抽象,类规定并提供了对象具有 类是对象的抽象 类规定并提供了对象具有 的属性、事件和方法。 的属性、事件和方法。 对象通过类来产生,对象是类的实例 对象是类的实例,把基于 对象通过类来产生 对象是类的实例 把基于 某个类生成的对象称为这个类的实例。 某个类生成的对象称为这个类的实例。 基类 VFP内部 内部 定义的类, 定义的类 可用来定 义其它类

第9章_数据库保护

第9章_数据库保护

9.2.2 数据库安全性目标
① 机密性:指信息不能对未授权的用户公 开; ② 完整性:指保证数据是正确的,没有经 过非授权用户的修改(即保证只有授权 用户才被允许修改数据); ③ 可用性:指授权的用户不能被拒绝访问。
9.2.3 数据库安全控制
• 数据库在安全性机制设置方面可分为4个控制 层次 :
9.2 数据库安全
• 数据库的安全性是指保证数据不被非 法访问,保证数据不会因非法使用而 被泄密、更改和破坏。
9.2.1 数据库安全保护范围
(1)计算机外部环境保护
① 自然环境保护。如加强计算机房、设备及其周边 环境的警戒、防火、防盗等,防止人为的物理破 坏。
② 社会环境中的安全保护。如建立各种法律法规、 规章制度,对计算机工作人员进行安全教育,使 其能正确使用数据库。 ③ 设备环境中的安全保护。如及时进行设备检查、 维护等。

用户与登录
• 登录是连接到SQL Server的账号信息,包括登 录名、口令等。 • 登录属于数据库服务器级的安全策略。 • 无论采用哪种身份验证方式,都需要具备有效 的登录账号。
• SQL Server建有默认的登录账号:sa 。
• 用户是数据库级的安全策略,用户是为特定数 据库定义的。
权限管理
9.3.1 完整性概念
• 数据库的完整性是指数据库中的数据在逻辑上的 正确性、有效性和相容性。
―正确性(Correctness)是指数据的合法性; ―有效性(Valid)是指数据属于所定义的有效 范围;
―相容性(Consistency)是指表示同一事实的两 个数据应当一致。
9.3.2 DBMS的完整性控制
事务的ACID性质
① 原子性(Atomicity)。事务必须是数据库的逻辑工作单 元,即事务中包括的诸操作要么全执行,要么全不执行。 ② 一致性(Consistency)。事务在完成时,必须使所有的数 据都保持一致状态。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
命令按钮的用户事件编程。 利用第5章中所创建的XSCJ数据库,设计如下窗口,如图9.5所示。希望当焦点落在命 令按钮上时,按Enter键能代替鼠标。在数据窗口中,按Enter键可以跳到下一个输入项,而 不是下一行。当在最后一行的最后一列按Enter键时,将增加一个空行。在最后一行按向下 的箭头键↓时,也增加一个空行。
第9章 用户自定义事件
9.1 定义用户事件 9.2 用户事件号 9.3 删除用户事件 9.4 触发用户事件 9.5 用户事件编程实例
9.1 定义用户事件
事件是从属于某个对象的,因此定义用户事件,首先要选定好所在的对象,然后打开 Script窗口,再选择New Event,如图9.1所示,将出现事件定义窗口,如图9.2所示。
图9.3 增加、插入、删除参数
在定义用户事件时,选择的事件标识应与所在的对象吻合,否则用户事件不起作用。用 户事件定义好后,可以像对象的其他标准事件一样编程和使用。
9.2 用户事件号
PowerBuilder没有提供事件标识的说明手册,但大部分可以从标识名推断其含义。表 9.1列出了部分常用事件标识的前缀及其含义,表9.2列出了部分常用事件标识及其含义。
cb_1.EVENT Clicked() //触发控件cb_1的鼠标单击事件,等价于cb_1.TriggerEvent(Clicked!) w_1.Event u_display(4,"math") //触发窗口w_1的用户自定义事件u_dispaly,它带两个参数。只能用这种方法触发。
9.5 用户事件编程实例IF NhomakorabeaKeyDown(keyenter!) THEN //如果按了回车键,则触发clicked事件 THIS.Event clicked() END IF
I. 给显示记录的命令按钮cb_retrieve的clicked事件编写代码:
dw_1.Retrieve( )
9.5 用户事件编程实例
J. 给cb_retrieve定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落 在该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:
图9.2 定义用户事件属性
9.1 定义用户事件
可以为用户事件定义参数及返回值。在 Return Type中选择返回值类型,在Argument Type中选择参数类型,在Argment Name中输入 参数名。在图9.2中,单击鼠标右键,将弹出一个 选单,如图9.3所示,可以增加参数(Add Parameter)、插入参数(Insert Parameter)、 删除参数(Delete Parameter)。 定义带参数的用户事件,其事件号必须选 None,若选择其他的事件号,则定义的参数无效。 因为其他事件号的参数个数及类型都是由 PowerBuilder确定的,用户不能修改。
图9.1 定义用户事件
9.1 定义用户事件
在图9.2中,用户事件名和用户事件号是必须要输的,其他则由用户决定。为区别于系 统预定义事件,用户事件名一般以“u_”或“ue_”开头。 用户事件号是以pbm_为前缀的事件标识,绝大多数事件标识都对应于特定的Windows 消息。其中pbm_custom01到pbm_custom75的事件标识不对应于任何Windows消息,它的 触发由用户在编程时决定,其功能类似于函数;而其他的事件标识都有特定的含义,它们 对应于特定的Windows消息,这类事件的触发由系统决定,类似于系统预定义事件如 Cilcked!、rbuttondown!等。也可以将事件号选为none,表示无事件号。
IF KeyDown(keyenter!) THEN //如果按了回车键,则触发clicked事件 THIS.triggerevent(clicked!) END IF
K. 给存盘的命令按钮cb_update的clicked事件编写代码:
dw_1.UpDate ()
L .给cb_update定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落 在该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:
9.4 触发用户事件
在定义用户事件时,可以定义事件参数。但TriggerEvent和PostEvent不能带事件参数 (但可以给Message传送用户消息),因此需用下面的格式触发:
object_name. [Trigger | Post] [Static | Dynamic] EVENT event_name( [para_list] )
w_1.TriggerEvent(Clicked!) //触发窗口w_1的鼠标单击事件 w_1.TriggerEvent(“u_key”) //触发窗口w_1的用户自定义事件u_key
TriggerEvent和PostEvent的区别在于:TriggerEvent立即触发该事件,而PostEvent则 把事件排在事件队列的末尾。
定义的用户事件号及名称不能更改,只能删除。在该事件的代码编辑窗口,点击鼠标右 键,将弹出一个选单(如图9.4),选择Delete Event,将删除该事件。要注意的是, PowerBuilder对该删除操作不做提醒,一经选择Delete Event,就立刻删除,因此若事件已 有代码,则应小心。只有用户事件才能删除。
表9.1 常用事件标识的前缀
前 缀 pbm_cb pbm_dw pbm_dde pbm_e pbm_lb pbm_lv pbm_tv pbm_ 含 义 通用对话框消息 数据窗口 动态数据交换(DDE) 编辑控件 列表框 列表视图(Listview) 树形视图(Treeview) 窗口
9.3 删除用户事件
Open(w_uevent)
B. 给窗口w_1的open事件编写代码:
SQLCA.AutoCommit =TRUE sqlca.DBMS= "odbc" sqlca.database= "XSCJ" sqlca.dbpass="dba" erid="sql" sqlca.servername = "" sqlca.dbparm = "Connectstring='DSN=XSCJ;UID=dba;PWD=sql;'" sqlca.logid="" sqlca.logpass="" CONNECT; IF sqlca.sqlcode<>0 THEN messagebox("=====错误信息提示=====","不能连结数据库! ~r~n~r~n请询问系统管理 员",stopsign!) RETURN END IF dw_1.SetTransObject(SQLCA)
图9.4 删除事件
9.4 触发用户事件
定义了用户事件后,就需要设计事件处理程序,就像其他系统常用事件一样,没有事件 处理程序,即使发生了该事件,应用程序也不做任何处理。如果选用的事件号对应于某个 Windows消息(见表9.2) ,则事件何时发生,将由系统决定,就像其他系统常用事件一样 被自动触发。但若选用的事件号为pbm_custom01到pbm_custom75,即不对应于任何 Windows消息,则必须编程时使用代码触发该事件,就像函数调用一样。 触发用户事件有3种格式,前两种是我们介绍控件时已讲的2个函数:
图9.5 用户事件编程实例
9.5 用户事件编程实例
为实现图9.5的功能,可用自定义事件。 (1)创建一个student.pbl,其中ApplicationObject为stu,再建一个窗口w_uevent, 窗口上的控件分别为dw_1、cb_append、cb_insert、cb_delete、cb_retrieve、 cb_update、cb_return。 (2)编写代码 A. 给应用对象stu的open事件编写代码:
9.5 用户事件编程实例
C. 给增加记录的命令按钮cb_append的clicked事件编写代码:
Long row row=dw_1.InsertRow(0) dw_1.SetRow(row) dw_1.ScrollToRow(row) dw_1.SetFocus() //成功时,返回插入行的行号 //设置数据窗口的当前行 //滚动到指定的行
IF KeyDown(keyenter!) THEN //如果按了回车键,则触发clicked事件 THIS.triggerevent(clicked!) END IF
M. 给返回的命令按钮cb_return的clicked事件编写代码:
Close(PARENT)
N. 给cb_return定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落在 该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:
E. 给插入记录的命令按钮cb_insert的clicked事件编写代码:
Long row row=dw_1.InsertRow(dw_1.getrow()) dw_1.SetRow(row) dw_1.ScrollToRow(row) dw_1.SetFocus()
9.5 用户事件编程实例
F.给cb_insert定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落在该 控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:
IF KeyDown(keyenter!) THEN //如果按了回车键,则触发clicked事件 cb_insert.Event clicked() END IF
G. 给删除记录的命令按钮cb_delete的clicked事件编写代码: dw_1.DeleteRow(dw_1.GetRow()) H. 给cb_delete定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落在 该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:
相关文档
最新文档