多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行;第二,它更好地满足了客户的需求,因为挑剔的客户希望你开发的程序在显示动画的同时还能播放音乐、显示文件、下载网络文件等,这是单线程应用程序无法完成的。目前,支持多线程的开发工具主要有:Java、VC、Delphi和C++Builder。 多线程强调的是一个进程内部有多个流程在同时执行,同时执行的概念相当于PB分布式计算中的异步处理。也就是说,只要我们在一个程序内部实现了异步处理,就相当于实现了多线程。分析至此,下一步该怎么...
PB中的套接字是通过Winsock.pbl库来提供的,它封装了套接字编程中用到的数据结构和过程,在功能上类似于VB中的Winsock控件。 Winsock.pbl中定义了两种类型的Socket:流式Socket和数据报式Socket。流式Socket需要连接到另一个处于监听状态的流式Socket后才能进行通信,是基于连接的,其可靠性高;数据报式Socket无需建立连接,源主机发出的报文在网络中经过存储转发后到达目的主机,效率高但可靠性低。编程时,根据应用环境和需求选择其中一种,若通信子网相当可靠,可考虑采用数据报式Socket。 图1 用PB编写WinSock TCP/IP应用程序的第一步是将Winsock.pbl加到应用程序中,然后声明如下全局变量: Wins...
一个EXE文件(或者再加PBD文件)要提交给脱离了PowerBuilder环境的用户使用时, 还必须提供一些PowerBuilder应用程序执行、数据库连接等实现所必需的环境动态链接库文件。如果缺少这些dll文件,应用程序可能无法启动,或者无法连接到数据库服务器。 这就是说,经过编译生成的PowerBuilder应用程序需要一定的运行环境。 以下几个文件在PowerBuilder的SharedPowerBuilder文件夹中(或者使用开始菜单中的"查找"),提交应用程序时需要将它们拷贝到EXE文件所在的路径下(对于32位Windows或NT操作系统): PBVM70.DLL :PowerBuilder 虚拟机,必需 PBTRA60.DLL :用来数据库跟踪调用,可选 PBRT...
由于受到强大数据库功能的掩盖,PB的邮件功能鲜为人知。在VB中可以轻松地利用CDO控件发邮件(Delphi中用NMSMTP),而PB中的邮件函数比它们更灵活、方便。 PB以其独特高效的数据库访问技术,赢得了广大程序员的青睐。从表面上看,它似乎只适合于开发数据库应用程序,而事实上,PB遵照信报接口MAPI的标准,开发了许多内部函数和数据结构,用于对电子邮件提供支持,因此也是一个相当不错的邮件应用程序开发工具。 一个邮件应用程序要处理的基本事务主要包括:登录到邮件服务器开始会话、接发邮件、结束邮件会话。在PB中,所有这些事务都围绕mailSession对象来展开,因此,编程时,需要在主窗口中定义一个该类...
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。 消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性中。parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表: 参数类型 Message对象属性 Numeric(数值) Message.DoubleParm PowerObject(PB对象,包括用户自定义的结构数据类型) Me...
当利用PowerBuilder建立数据窗口时,用户通常不能自己选择数据来源和显示类型。如何让用户在应用程序中自己定义数据窗口的数据来源和显示类型呢?为了达到这个目的,我们必须在运行程序阶段根据用户自己的需求,动态地建立一个数据窗口。笔者将结合实际,详细介绍动态创建数据窗口的步骤。 在建立动态数据窗口之前,必须先得到数据窗口对象的语法,PB中为我们提供了SyntaxFromSQL( )函数,利用这个函数可以得到建立数据窗口的语法。SyntaxFromSQL()函数的基本格式如下: 事物对象.SyntaxFromSQL(数据来源字符串,显示类型字符串,错误字符串) 下面是建立一个数据窗口对象语法的范例∶ // 声明变量 ...
树形结构在Windows环境中被普遍应用,它以简捷的界面深受用户喜爱。但在数据库开发中面对层次多、结构复杂的数据,如何快速地构造树形目录呢? 实现关键技术 在PowerBuilder所提供的控件中包含了Treeview控件,但树的具体形成还需用户编写脚本实现,即它的列表项要在程序中动态添加,而这些列表数据通常由用户已录入在数据库中,并作为数据库维护的一项内容。 为了能快速实现数据库的树形结构,我们可以采用编码法,即利用编码表来实现。 编码表的基本字段包括编码和编码名称,其编码规则是以数字、字母的位数来区分不同层次,同一层编码位数相同,层次按位数递增,程序通过判断编码位数来决定所在层数。 例如:第一层...
---- 在 设 计 应 用 程 序 过 程 中, 恰 当 地 应 用 电 脑 声 音 与 动画 技 术, 可 以 为 用 户 提 供 更 加 直 观、友 好、 引 人 注 目 的 操 作 界 面。 下 面 笔 者 介 绍 一 下 在PowerBuild 应 用 中 实 现 声 音 与 动 画 的 一 种 简 便 方 法: 1.作 为 举 例, 创 建 一 个MDI 风 格 的 窗 口w_audani。 在 这 个 窗口 上 放 置 一 个 含 声 音、 动 画 两 个 带 图 标 的 菜 单 项 的 菜单m_audani, 一 个 图 象 框p_1。 整 个 窗 口 的 外 观 如 下: 2.制 备 声 音 和 图 象 文 件。 本 例 中 选 用 了 一 个adu.wav 的 声音 文 件 和 四 个ani1.bmp、ani2.bmp 、ani3.bmp、ani4.bmp 用 于 动 画 素 材 的 分 离 图 象 文 件。...
在建设某公司内部信息网的过程中,涉及到大量的DBF文件直接转换为HTML文件的应用,其他的文件格式(Excel,Access,以及大型数据库的查询)也有这方面的要求,由此用PB实现了基于ODBC查询的PSR文件生成工具。 此生成器的原理是: 1、通过取出表的结构, 2、生成查询的SQL语法, 3、SyntaxFromSQL()函数生成datawindow语法, 4、create()函数生成数据窗 5、将生成的数据窗进行修饰,包括增加对象、删除对象、修饰对象、布置对象等操作,进行数据窗的美化工作。 6、将生成的数据窗用SaveAs()函数另寸为 PSR 文件。 7、在HTML页中使用插件方式或直接连接方式显示该PSR文件。 在实现过程中,使用了数据窗函数Modi...
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('http://liulee.myrice.com') 就是浏览 http://liulee.myrice.com 页面,当然支持本地文件,也支持本地图片文件的浏览,如jpeg,jpg,gif,png等等,如果是不支持的文件,则直接弹出选择打开文件对话框,和ie一模一样。ole_web.object.goback() file://回退(如果没有内容可退,则会弹出错...
怎样在PB中实现文件的拷贝与删除,可借助外部函数可用API函数实现: 1、文件拷贝 函数声明: FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY "Kernel32.dll" 调用: string ls_source, ls_des boolean lb_flag, lb_rtn lb_flag = false ls_source = "c:book.xls" //源文件 ls_des = "C:tmp111.xls" //目标文件 lb_rtn = CopyFileA(ls_source, ls_des, lb_flag) MessageBox("文件拷贝", string(lb_rtn)) 2、删除文件 函数声明: FUNCTION boolean DeleteFileA(ref st...
根据我国的财务票据的当前特点,仍需要财务票据中人民币有大写一项。现在本人用PB编写了一个人民币大写的函数。您只要将您数据窗口中的人民币小写项数据值取出,利用我的这个函数将其转换成大写方式,然后再赋到数据窗口的某项中即可。string jet,dxs,xxs,jew1,jew2,jew,jeq,jeb,jes,jeg,jej,jeflong ls,lssstring jedxjet=string(yjk)ls=len(jet)lss=10 - lsjet=space(lss)+jetdxs='零壹贰叁肆伍陆柒捌玖/'xxs='0123456789 'jew2=mid(jet,1,1)jew1=mid(jet,2,1)jew=mid(jet,3,1)jeq=mid(jet,4,1)jeb=mid(jet,5,1)jes=mid(jet,6,1)jeg=mid(jet,7,1)jej=mid(jet,9,1)jef=mid(jet,10,1)jew2=mid(dxs,pos(xxs,jew2)*2 - 1,2)+"佰"jew1=...
---- 随 着Internet 进 入 千 家 万 户, 通 过Internet 收 发 电 子 邮 件 将 成 为 人 们 最 受 欢 迎 的 通 讯 手 段 之 一。 如 果 我 们 的 应 用 程 序 也 能 够 提 供 收 发 电 子 邮 件 的 功 能, 就 可 以 使 我 们 方 便 快 捷 地 与 他 人 交 换 和 共 享 应 用 的 数 据 和 信 息, 使 其 应 用 真 正 地 溶 合 于Internet 这 个 大 环 境。 下 面 我 介 绍 一 下 在PowerBuild 应 用 中 实 现 收 发 电 子 邮 件 的 方 法。 ---- 在PowerBuild 应 用 中 实 现 收 发 电 子 邮 件, 主 要 是 通 过PowerBuild 系 统 提 供 的 一 套 用 于 邮 件 操 作 的 内 嵌 函 数。 这 些 函 数 实 现 其 应 用 到 微 软 公 司 的MAPI(...