PowerBuilder实用教程第9章 用户自定义事件
- 格式:pptx
- 大小:36.68 MB
- 文档页数:23
PowerBu ilder是一个可视化图形界面的数据库应用系统开发工具,它支持面向对象技术、客户/服务器机制、分布式组件开发和因特网应用。
加服务器负载)。
2.文件服务器网络结构:应用程序在客户工作客户站上运行,文件服务器只提供资源的集中管理和访问途径。
(增加网络负载)3.客户服务器网络结构:向服务器发送处理请求而不是文件请求;服务器返回返回的是处理结果而不是文件。
访问文件服务器的数据库访问客服/服务器的数据库4.分布式客户/服务器网络结构客户端应用程序(客户层)电脑、实施商业规则的组件(中间层)电脑、数据库服务器(服务器层)电脑(1)组件具有不同的应用程序可以重复使用的组件共享特性。
(2)组件具有配置和设计的灵活性,使计算机性能得以改善(3)组件开发使得复杂的应用变为易于管理的模块5.Web网络结构Web服务器(电脑)->中间件(电脑)->数据库服务器(电脑)中间件负责管理W eb服务器和数据库服务器之间的通信,并提供应用程序服务,它能够直接访问数据库、调用外部程序。
或利用程序代码访问数据库。
因此可以提供与数据库相关的动态H TML页面或执行用户查询,并将结果格式化成H TML页面,然后通过Web服务器返回给用户浏览器。
通常软件系统根据需求分为两类。
一类需求是需要比较稳定的而且并能够预先指定的系统,称之为预先指定的系统。
如计算机控制系统,卫星图像处理系统、火箭发射控制、数据库管理系统。
开发这类系统需要预先进行严格需求分析,指定精确的规格说明,并在严格管理下进行传统的生命周期开发。
另一类是需求模糊,随时可变化的系统。
一般是商业和行政数据处理系统、决策支持系面向对象建模得到的模型对象的三个要素(三个子模型),即静态结构(对象模型)、交互次序(动态模型)和数据变化(功能模型)。
软件开发工具_pb_自学指导孙勇第一章 PowerBuilder简介一、目的要求1.本课程在软件课程中的作用;2.信息系统的开发模式;3.掌握PowerBuilder的主要特性;4.初步掌握PowerBuilder开发环境;5.了解应用程序开发步骤;6.熟悉PowerBuilder的安装方法。
二、重点难点重点是PowerBuilder开发环境。
第一章PowerBuilder简介本章主要内容:本章中,首先扼要地介绍本课程在软件课程中的作用和信息系统的开发模式 PowerBuilder的主要特性,然后阐述集成开发环境的组成、各画板的功能、作用、定制开发环境的方法、对象的基本概念等,并在章尾介绍本课程的教学内容以及开发PowerBuilder应用程序的基本步骤。
自学内容:1.1本课程在软件课程中的作用在计算机专业中,软件教学占有非常重要的位置。
为了满足计算机职业岗位群的需要,近年来,我们对计算机网络专业和计算机程序员专业中的软件课程进行了相应的改革。
通过学习Word、Excel、FrontPage等常用软件使学生学会计算机的使用方法;通过学习C语言程序设计、数据结构等课程使学生掌握基本的程序设计方法;通过学习SQL Server使学生掌握网络数据库的设计方法和使用方法;通过学习网页制作和Java语言使学生能够编写网站应用程序;通过学习PB使学生能够编写客户端应用程序;通过学习软件工程使学生能够懂得软件开发的全过程,掌握编写软件的规范,为学生在“软件工厂”从事软件工作打下基础。
从以上分析可知,PB课程属于与职业岗位群直接有关的课程,在整个软件课程体系中占有比较重要的位置。
不同的软件课程应该采用不同的教学方法,根据软件的特点,我们把软件课程分成三种不同类型:1.程序设计类型。
这类课程需要讲的内容较多,讲的内容相对也比较完整,使用传统的“课堂教学+课后习题+上机实验”教学方式即能满足教学要求。
2.交互类型。
[网络编程实用教程]PowerBuilder 实用教程[网络编程实用教程]PowerBuilder 实用教程篇一 : PowerBuilder 实用教程程继辉第一章 PowerBuilder 概论PowerBuilder 7.0 简介新特性开发环境1.1 PB 7.0 简介1(1(1 PB 特性 1、支持多种操作系统 Windows、UNIX等操作平台 2、与多种数据库的连接性 Oracle、MS SQL Server Sybase SQLServer 3、丰富的开发工具 4、对Internet的强力支持1.1 PB 7.0 简介客户/服务器结构客户: 从其它计算机读取数据,处理后将数据存储到提供数据的计算机中。
服务器: 向其它计算机提供数据的计算机1.1 PB 7.0 简介面向对象设计概念对象属性方法事件关联1.1 PB 7.0 简介事件驱动过程的程序设计原理事件驱动:程序启动时,只做了一些初始化的工作,然后等待用户或外界的环境的触发。
所有的代码都是编写在不同的事件中。
1.2 PowerBuilder 7.0的新特性全新的用户接口和开发界面1.2 PowerBuilder 7.0的新特性非模态的开发视窗 PB7.0的画板一般是拥有多个视窗的窗口,每个视窗提供查看和修改对象的特定方式或者显示与对象相关的某种信息,见图示1.2 PowerBuilder 7.0的新特性数据库连接新特性1.3工具栏PB7.0 的开发环境菜单画板数据窗口画板第二章应用程序创建应用程序对象设置应用程序的属性应用程序对象的事件对象库搜索表运行应用程序应用程序对象的事件触发时机启动应用程序Open 事件初始化,打开初始化窗口与用户交互系统错误打开其它窗口系统错误启动应用程序应用程序终止关闭并清除所有对象应用程序对象应用程序属性应用程序事件对象库搜索表创建应用程序创建应用程序第三章窗口设计窗口创建窗口控件的基本操作窗口控件属性、事件和函数常用对话框创建窗口创建窗口设计窗口布局的地方窗口或控件属性编写事件代码的地方窗口事件窗口控件属性、事件和函数PB控件: 从行为上区分: 1 能响应用户的操作 2 不能响应用户的操作从用途上区分 1 激活动作类 2 选择项类 3 显示数据类 4 修饰类在窗口中添加控件在窗口中添加控件第四章数据库基础及管理数据库应用技术的发展过程如何开发数据库应用系统数据库结构的设计与实现数据库管理数据库的操作表的定义和数据操作表数据的处理 PB的专用接口与数据库建立连接4.1数据库应用技术的发展过程1、主机应用模式2、文件服务器应用模式3、客户服务器应用模式4、分布式计算应用模式5、WEB网络应用模式主机应用模式大型机应用程序数据库按键信息终端字符终端1 终端2 终端n文件服务器应用模式网络文件服务器数据库文件请求文件工作站1工作站2 应用程序工作站n 应用程序应用程序客户服务器应用模式应用程序网络服务器数据库处理请求处理结果工作站n 应用程序工作站1工作站2 应用程序应用程序文件服务器和C/S的数据库操作比较程序发出查询学号为99090221的信息的SQL请求查询操作在客户端完成查询文件请求文件服务器45000名学生数据的文件45000条记录的文件响应文件请求并返回整个文件程序发出查询学号为99090221的信息的SQL请求接收结果查询请求数据服务器查询在服务器端进行45000名学生数据的文件返回99090221的记录分布式计算应用模式数据库数据库服务器商业服务器实现商业规则的组件客户端应用程序工作站1工作站2工作站nWEB网络应用模式Internet/Intranet 客户端浏览器WEB服务器服务器中间件数据库服务器客户端应用 Java Applet ActiveXInternet/Intranet 客户端浏览器服务器数据库4.2 如何开发数据库应用系统用PowerBuilder开发应用系统时,一般都要经过系统分析、系统设计、系统开发、代码调试、系统测试、生成EXE、交付应用等各个阶段。
PowerBuilder函数详解LowerBound()功能:得到指定数组第n维的下界语法:LowerBound ( array {, n } )参数array:数组名n:数值类型,可选项,指定要得到数组哪一维的下界。
缺省值为1返回值Long。
函数执行成功时返回array数组第n维的下界。
如果n的值超过了指定数组的最大维数,那么该函数返回-1。
如果任何参数的值为NULL,LowerBound()函数返回NULL。
UpperBound()功能:得到指定数组第n维的上界。
语法:UpperBound( array {, n } )参数array:数组名n:数值类型,可选项,指定要得到数组哪一维的上界。
缺省值为1返回值Long。
函数执行成功时返回array数组第n维的上界。
如果n的值超过了指定数组的最大维数,那么该函数返回-1。
如果任何参数的值为NULL,UpperBound()函数返回NULL。
Blob()功能:将字符串转换成Blob类型数据。
语法:Blob ( text )参数text:string类型,指定要转换的数据返回值Blob。
函数执行成功时返回转换后的Blob类型数据;如果text参数的值为NULL,则Blob()函数返回NULL。
BlobEdit()功能:将任意类型的数据插入到Blob类型变量的指定位置。
语法:BlobEdit ( blobvariable, n, data )参数blobvariable:Blob类型的已初始化变量,将向该变量中插入数据n:指定插入位置,有效值在1到4,294,967,295之间data:要插入到Blob类型变量中的数据,其数据类型可以是任何有效的PowerBuilder数据类型返回值Unsigned long。
函数执行成功时返回下次可以插入数据的位置;如果blobvariable变量中空间不够或任何参数的值为NULL,则BlobEdit()函数返回NULL。
PB控件使用介绍一、PB中使用Microsoft Web Browser控件步骤:在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器",(随系统而定的版本),就可以在这个窗口直接使用IE浏览器控件了。
常用函数:(对这个ole控件取名叫ole_web)ole_web.object.navigate(string ls_url) file://浏览某url,譬如:ole_web.object.navigate('') 就是浏览 页面,当然支持本地文件,也支持本地图片文件的浏览,如jpeg,jpg,gif,png等等,如果是不支持的文件,则直接弹出选择打开文件对话框,和ie一模一样。
ole_web.object.goback() file://回退(如果没有内容可退,则会弹出错误,可以屏蔽该错误)ole_web.object.goforward() file://前进,同上常用事件:documentcomplete : url请求的页面完成;downloadcomplete:url中请求的下载完成;常用属性:ole_web.object.width :pixel高度,需要转换为pbunit高度才可以调整ole_web.object.height:同上ole_web.object.offline:离线方式,true,false两者之一你甚至可以用pb写出一个和ie类似的界面用来进行浏览网页或图片。
二、在程序中打印在程序中如何提供打印功能呢?这里有三种调用打印函数的格式可供选择。
1. 对数据窗口控制或者数据窗口可以使用这种打印格式。
DATAWINDOWNAME.Print(cancel_window)这里cancel_window 是一个布尔值,它指出是否要显示一个用户可以用来中止打印动作的窗口。
PowerBuilder实例化指导教程(第二版)余建国主编郑州航空工业管理学院第一版前言我国高校经过连续几年的大规模扩招,在校生人数急剧增加,毕业生就业压力随之增大。
对于各高校来说,如何真正落实素质教育进而提高学生的就业竞争力已成为当前面临的重大课题。
具体到计算机领域,随着IT产业的高速发展,计算机在社会各领域的广泛应用,社会越来越需要大量的高级应用型软件人才,如何培养学生的动手能力、实践能力、创新能力就成为当前素质教育的一个重要体现。
面向对象的软件开发技术以其高质量、高速度、可重用、适于编写大规模程序等特点,已成为当代程序设计的主流。
各高校计算机专业纷纷开设了相应课程(如面向对象技术、C++、Delphi、PowerBuilder等)。
然而,受传统教学思想、教学模式的影响,无论是教材的编撰,还是教学方式的组织仍习惯于过去重理论、轻实践,重讲解、轻启发与创新的思维上。
在教学过程中只讲不练或多讲少练,导致学生很难将面向对象的软件开发技术应用于软件系统开发当中。
动手能力和创新意识差,已经无法适应新世纪对应用型软件人才的要求。
经过数年的教学、课题研究与软件开发实践,我们领悟到,如果以一个现实世界的应用系统实例开发过程为主线,并在其中贯穿基于面向对象开发技术的概念、思想、方法与技巧,引导学生将面向对象技术融入应用系统开发的全过程中,能够实现讲与练、理论与实践的协调统一,将素质教育落到实处。
基于此思路,结合我们具体教授面向对象开发技术课程和相关研究课题的一些感受,我们编著了这本《PowerBuilder实例化指导教程》,旨在为我院计算机科学与技术专业相似课程的教学改革提供一种新的思路,为学生学习本类课程提供一种新的方法。
教程从整体上可分为三大部分:第一部分包括第一、第二两章内容,分别从宿舍管理信息系统的系统分析与设计,以及掌握PowerBuilder的集成开发环境诸方面为整个系统的实现做准备。
第二部分内容涉及面向对象技术在应用系统实现中的应用,涵盖第三章至第十三章,其内容按照系统开发的步骤并结合PowerBuilder的主要知识点逐章展开,引导学生系统地掌握面向对象技术。
PowerBuilder参考⼿册PowerBuilder 是⼀个可视化图形界⾯的数据库应⽤系统开发⼯具,它⽀持⾯向对象技术、客户/服务器机制、分布式组件开发和因特⽹应⽤。
加服务器负载)。
2.⽂件服务器⽹络结构:应⽤程序在客户⼯作客户站上运⾏,⽂件服务器只提供资源的集中管理和访问途径。
(增加⽹络负载)3.客户服务器⽹络结构:向服务器发送处理请求⽽不是⽂件请求;服务器返回返回的是处理结果⽽不是⽂件。
访问⽂件服务器的数据库访问客服/服务器的数据库4.分布式客户/服务器⽹络结构客户端应⽤程序(客户层)电脑、实施商业规则的组件(中间层)电脑、数据库服务器(服务器层)电脑(1)组件具有不同的应⽤程序可以重复使⽤的组件共享特性。
(2)组件具有配置和设计的灵活性,使计算机性能得以改善(3)组件开发使得复杂的应⽤变为易于管理的模块5.Web⽹络结构Web服务器(电脑)->中间件(电脑)->数据库服务器(电脑)中间件负责管理Web服务器和数据库服务器之间的通信,并提供应⽤程序服务,它能够直接访问数据库、调⽤外部程序。
或利⽤程序代码访问数据库。
因此可以提供与数据库相关的动态HTML页⾯或执⾏⽤户查询,并将结果格式化成HTML页⾯,然后通过Web服务器返回给⽤户浏览器。
信息系统开发主要分为:结构⽣命周期发、快速原型法和⾯向对象法。
通常软件系统根据需求分为两类。
⼀类需求是需要⽐较稳定的⽽且并能够预先指定的系统,称之为预先指定的系统。
如计算机控制系统,卫星图像处理系统、⽕箭发射控制、数据库管理系统。
开发这类系统需要预先进⾏严格需求分析,指定精确的规格说明,并在严格管理下进⾏传统的⽣命周期开发。
另⼀类是需求模糊,随时可变化的系统。
⼀般是商业和⾏政数据处理系统、决策⽀持系互次序(动态模型)和数据变化(功能模型)。
当涉及交互作⽤与时序的时动态模型最为重要。
当解决问题运算规模很⼤的时功能模型很重要。
需求分析主要解决的问题:1.信息要求,⽤户需要从数据库中获取什么数据,并由此决定在数据库中存储哪些数据。
深入了解PowerBuilder事件摘要:事件是指作用在对象上的动作,在powerbuilder中,系统的运行是通过事件(event)的触发来实现的,powerbuilder中的大多数对象拥有自己的事件,用户也可以根据需要构造各种自定义事件,自定义事件可以像函数那样带有参数。
事件在powerbuilder应用开发中极其重要,加深对事件的认识有助于提高系统开发的整体水平。
本文系统阐述了powerbuilder事件的分类、事件id号、触发机制、事件的返回值以及执行流程等内容。
关键词:powerbuilder 对象事件系统消息中图分类号:tp3 文献标识码:a 文章编号:1007-9416(2011)12-0174-01通常,powerbuilder事件分为系统事件和用户自定义事件。
其中,系统事件是指被用户的动作或系统消息触发的事件,部分系统事件带有返回值,如果定义了参数,在触发时可以进行参数值传递;而用户自定义事件是为增强对象的功能而增加的事件,与系统事件一样,用户自定义事件可以指定事件的参数和返回值,并指定是否让事件使用系统消息等内容。
1、事件id与系统消息的关系在powerbuilder中,被用户的动作或操作系统所触发的事件必须具有id(如,系统事件),事件id的作用是把事件与系统消息连接起来。
至于用户自定义事件,可以使用列在event declaration对话框中的事件id,用来响应某个对应的系统消息。
其中,event列表框中的“pbm_”代码为映射到powerbuilder中的系统消息代码。
在构造用户自定义事件时,不能修改“与系统消息有关”事件的参数及返回值,这是由于与事件id相对应的系统消息一旦发生,powerbuilder即刻触发该事件并为事件参数赋值。
另外,若用户自定义事件“与系统消息无关”(如,open事件),则不为事件选择id,这样做的好处是:事件只能在应用程序运行中由程序来触发,而不会被用户的动作或系统活动所触发。
create by amu on 2012-08-16----------------------------------------------------------------------------------------1.window中的事件事件名触发的时机01.Activate 在窗口激活之前触发02.Clicked 当用户用鼠标单击窗口的空白区域(没有控件的区域)时触发03.Close 当关闭窗口时触发04.CloseQuery 当清除或关闭窗口时触发。
然后检查Message.ReturnValue的值,若为1,则窗口不能关闭05.Deactivate 当窗口变为非活动状态时触发06.DoubleClicked 当用户双击窗口的空白区域时触发07.DragDrop 当一个可拖动的控件被拖动到窗口上时触发08.DragEnter 当一个可拖动的控件进入窗口时触发09.DragLeave 当一个可拖动的控件离开窗口时触发10.DragWithin 当一个可拖动的控件在窗口内部拖动时触发11.Hide 在窗口被隐藏时触发12.HotLinkAlarm 在DDE中服务器应用已经发送了新的数据,客户DDE应用已经接收到这些数据时触发13.Key 当用户击了一个键且插入点不在RichTextEdit编辑控件或数据窗口控件时触发14.MouseDown 当用户在窗口的空白区域按下鼠标左键时触发15.MouseMove 当鼠标在窗口内移动时触发16.MouseUp 当用户在窗口的空白区域释放鼠标左键时触发17.Open 当程序调用以此窗口为参数的Open函数时,此事件在该窗口打开之后,显示之前触发18.Help .........19.Other 当一个非PowerBuilder事件的Windows信息发生时触发20.RButtonDown 在窗口的空白区域单击鼠标右键时触发21.RemoteExec 当一个DDE客户应用发送了一个命令时触发22.RemoteHotLinkStart 当一个DDE客户应用开始一个热连接时触发23.RemoteHotLinkStop 当一个DDE客户应用结束一个热连接时触发24.RemoteRequest 当一个DDE客户应用请求数据时触发25.RemoteSend 当一个DDE客户应用已经发送了数据时触发26.Resize 当用户或程序打开或重设窗口大小时触发27.Show 当程序运行此窗口的show函数时,此事件在窗口显示之前触发28.SystemKey 当插入点不在某个行编辑中且用户按了ALT或ALT加其它键时触发29.Timer 在调用Timer函数后,经过了Timer函数指定的时间后触发30.ToolBarMoved 当MDI窗口的工具条移动时触发以上是我新建一个window是window的事件原来的顺序,下面是我自己常用的排序:01.window打开时发生的事件事件名触发的时机Activate 在窗口激活之前触发Resize 当用户或程序打开或重设窗口大小时触发Open 当程序调用以此窗口为参数的Open函数时,此事件在该窗口打开之后,显示之前触发Show 当程序运行此窗口的show函数时,此事件在窗口显示之前触发02.window关闭时发生的事件Deactivate 当窗口变为非活动状态时触发CloseQuery 当清除或关闭窗口时触发。
10.6 数据窗口事件处理技术在PowerBuilder中,事件有两种,一种是PowerBuilder在语句描绘器中为每一个标准控件设定的一些常用事件,一般的编程人员基于这些事件就可以完成常见的操作。
但是有些情况下,这些事件并不能完全满足应用程序的要求,这时,就需要使用另一种事件——自定义的用户事件。
一般的用户定义事件是与Windows消息对应的事件,这种事件是在应用程序接收到Windows消息后触发的,另外一种用户定义事件则是没有对应的事件,这类事件要由用户在程序代码中触发。
但是,数据窗口控件的自定义消息又有所不同。
因为数据窗口不是标准窗口对象,因此它们所提供的消息不是标准的Windows API消息,这些消息有自己的事件。
前面10.2.2节已经对数据窗口控件的常用事件做了总结,对于用户自定义事件,如果是在代码中触发事件,使用起来也比较容易。
只要在代码中适当的位置使用triggerevent函数就可以了。
因此本节主要讲述如何使用由PowerBuilder数据窗口所提供的消息触发用户自定义事件。
10.6.1 数据窗口消息的含义PowerBuilder为数据窗口提供了23种消息,为便于读者参考,下面列出了各消息的名称和功能:● PBm_dwclosedropdown:关闭下拉式数据窗口。
● PBm_dwscrollend:在数据窗口中卷滚到最后一行。
● PBm_dwscrdlhome:在数据窗口中卷滚到第一行。
● PBm_dwscrolllineend:卷滚到当前行的行尾(水平方向)。
● PBm_dwscrolllinehome:卷滚到当前行的行首(水平方向)。
● PBm_dwnbacktabout:即将通过Shift+Tab组合键离开该控件。
● PBm_dwnchanging:控件即将被改变。
● PBm_dwndropdown:下拉列表框的下拉部分即将可见。
● PBm_dwngraphcreate:即将创建图形。
PowerBuilder函数全集PrintDefineFont()功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。
语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline)参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定赋给当前定义字体的编号,有效值在1到8之间 facename:string类型,指定字体名称,该字体应该是你的打印机支持的字体,比如“宋体”height:Integer类型,使用正值指定字体的高度,以千分之一英寸为单位;使用负值指定字体点数,比如,-18代表18点。
一般来说,使用点数更精确些weight:指定字体的磅数,正常字体为400磅,粗体为700磅fontpitch:FontPitch枚举类型,指定字体标准。
有效取值为:Default! - 缺省值;Fixed! - 固定形式;Variable! - 可变形式fontfamily:FontFamily枚举类型,指定字体系列。
有效取值为:AnyFont!、Decorative!、Modern!、Roman!、Script!、Swiss!italic:boolean类型,指定是否使用斜体样式。
有效取值为:TRUE - 使用斜体样式;FALSE - 不使用斜体样式。
缺省值为FALSEunderline:boolean类型,指定是否加下划线。
有效取值为:TRUE - 加下划线;FALSE - 不加下划线。
缺省值为FALSE返回值Integer。
函数执行成功时返回1,发生错误时返回-1。
如果任何参数的值为NULL,PrintDefineFont()函数返回NULL。
用法在一个打印作业中,应用程序能够最多同时定义8种字体。
基本目录整理:事件含义触发事件对照API函数5种类:custom class :不可见用户自定义类,如实现函数的多态standard class :标准不可见控件扩展类custom visual :用户自定义可见类External Visual: 外部可视类,如ocx引入Standard Visual: PB标准可视控件扩展“Control”和“Object”的区别:在PB里,“Control”和“Object”都是类,只不过前者是可视类,后者是不可视类,叫法不同罢了。
无论使用哪种方式创建的,对于PB库画板来说,都是UserObject,通过Insert-Object-UserObject或Insert-Control-UserObject 都可以把它插入到Window里,当然,这个对象应该是可视的。
另外的插入办法是通过PB的IDE左侧的对象树,直接用鼠标Drag就可以了,这种方法不仅可以插入可视的UserObject,还可以插入不可视的类(可以通过View-Non Visual object llist看到它)对于拷贝来的代码,可以用一下方式判读是从哪里继承来的:双击该对象,观察样式1:如果仅仅是一个DataWindow或其它控件,说明该对象是从Standsrt Visual 继承的;2:如果是多个控件的复合体,说明它是从Custom Visual继承的3:如果是一个PB中不存在的控件,说明它可能是从External Visual 继承的4:如果它没有Layout视图,说明它是从Custom Class 中继承的5:如果它LayOut视图,但没有什么控件,说明它是从Standard Class中继承的还有一个办法是右击该对象,选择Edit source,看看它的声明,Global type XXX from YYY,YYY就是祖先的类型总的来说,从横向和纵向来看:横向--standard,custom纵向--visual,nonvisual既然是标准,就有pb基本控件的事件,属性等,反之custom则得自定义很多事件和属性投机的检查代码:选择Edit source,看看它的声明,Global type XXX from YYY,YYY就是祖先的类型如果是external visual就可以看到以下代码:global type b from userobjectinteger width = 288integer height = 168userobjects objecttype = externalvisual!事件的含义单选或多选按钮消息(前缀:pbm_bm)pbm_bmgetcheck 单选按钮或多选按钮是否被选。